From fe7765a7908a8c6cd228fbfea09160d8818d191d Mon Sep 17 00:00:00 2001 From: Greg Sjaardema Date: Thu, 7 Nov 2024 09:06:15 -0700 Subject: [PATCH] APREPRO: Make s + s alias for s // s --- .../libraries/aprepro_lib/apr_parser.cc | 64 +- .../seacas/libraries/aprepro_lib/aprepro.yy | 2 +- .../libraries/aprepro_lib/aprepro_parser.h | 713 ++++++++++-------- 3 files changed, 436 insertions(+), 343 deletions(-) diff --git a/packages/seacas/libraries/aprepro_lib/apr_parser.cc b/packages/seacas/libraries/aprepro_lib/apr_parser.cc index 2e1043d898..65eebc2391 100644 --- a/packages/seacas/libraries/aprepro_lib/apr_parser.cc +++ b/packages/seacas/libraries/aprepro_lib/apr_parser.cc @@ -2,7 +2,7 @@ // Skeleton implementation for Bison LALR(1) parsers in C++ -// Copyright (C) 2002-2015, 2018-2021, 2024 Free Software Foundation, Inc. +// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -480,6 +480,7 @@ namespace SEAMS { int yylen = 0; // Error handling. + int yynerrs_ = 0; int yyerrstatus_ = 0; /// The lookahead symbol. @@ -1151,7 +1152,11 @@ namespace SEAMS { { concat_string((yystack_[2].value.string), (yystack_[0].value.string), &(yylhs.value.string)); } break; - case 109: // sexp: SFNCT LPAR exp COMMA exp RPAR + case 109: // sexp: sexp PLU sexp + { concat_string((yystack_[2].value.string), (yystack_[0].value.string), &(yylhs.value.string)); } + break; + + case 110: // sexp: SFNCT LPAR exp COMMA exp RPAR { if (arg_check((yystack_[5].value.tptr), (yystack_[5].value.tptr)->value.strfnct_dd == NULL)) (yylhs.value.string) = (char*)(*((yystack_[5].value.tptr)->value.strfnct_dd))((yystack_[3].value.val), (yystack_[1].value.val)); @@ -1160,7 +1165,7 @@ namespace SEAMS { } break; - case 110: // sexp: SFNCT LPAR exp COMMA sexp COMMA sexp COMMA sexp COMMA sexp RPAR + case 111: // sexp: SFNCT LPAR exp COMMA sexp COMMA sexp COMMA sexp COMMA sexp RPAR { if (arg_check((yystack_[11].value.tptr), (yystack_[11].value.tptr)->value.strfnct_dcccc == NULL)) (yylhs.value.string) = (char*)(*((yystack_[11].value.tptr)->value.strfnct_dcccc))((yystack_[9].value.val), (yystack_[7].value.string), (yystack_[5].value.string), (yystack_[3].value.string), (yystack_[1].value.string)); @@ -1169,7 +1174,7 @@ namespace SEAMS { } break; - case 111: // sexp: SFNCT LPAR exp COMMA sexp COMMA sexp RPAR + case 112: // sexp: SFNCT LPAR exp COMMA sexp COMMA sexp RPAR { if (arg_check((yystack_[7].value.tptr), (yystack_[7].value.tptr)->value.strfnct_dcc == NULL)) (yylhs.value.string) = (char*)(*((yystack_[7].value.tptr)->value.strfnct_dcc))((yystack_[5].value.val), (yystack_[3].value.string), (yystack_[1].value.string)); @@ -1178,7 +1183,7 @@ namespace SEAMS { } break; - case 112: // sexp: SFNCT LPAR exp COMMA sexp RPAR + case 113: // sexp: SFNCT LPAR exp COMMA sexp RPAR { if (arg_check((yystack_[5].value.tptr), (yystack_[5].value.tptr)->value.strfnct_dc == NULL)) (yylhs.value.string) = (char*)(*((yystack_[5].value.tptr)->value.strfnct_dc))((yystack_[3].value.val), (yystack_[1].value.string)); @@ -1187,7 +1192,7 @@ namespace SEAMS { } break; - case 113: // sexp: SFNCT LPAR sexp COMMA sexp COMMA sexp RPAR + case 114: // sexp: SFNCT LPAR sexp COMMA sexp COMMA sexp RPAR { if (arg_check((yystack_[7].value.tptr), (yystack_[7].value.tptr)->value.strfnct_ccc == NULL)) (yylhs.value.string) = (char*)(*((yystack_[7].value.tptr)->value.strfnct_ccc))((yystack_[5].value.string), (yystack_[3].value.string), (yystack_[1].value.string)); @@ -1196,7 +1201,7 @@ namespace SEAMS { } break; - case 114: // sexp: SFNCT LPAR sexp COMMA sexp RPAR + case 115: // sexp: SFNCT LPAR sexp COMMA sexp RPAR { if (arg_check((yystack_[5].value.tptr), (yystack_[5].value.tptr)->value.strfnct_cc == NULL)) (yylhs.value.string) = (char*)(*((yystack_[5].value.tptr)->value.strfnct_cc))((yystack_[3].value.string), (yystack_[1].value.string)); @@ -1205,46 +1210,42 @@ namespace SEAMS { } break; - case 115: // sexp: bool QUEST sexp COLON sexp + case 116: // sexp: bool QUEST sexp COLON sexp { (yylhs.value.string) = ((yystack_[4].value.val)) ? ((yystack_[2].value.string)) : ((yystack_[0].value.string)); } break; - case 116: // sexp: exp TIM sexp + case 117: // sexp: exp TIM sexp { (yylhs.value.string) = (char*)""; yyerror(aprepro, "Multiplying an arithmetic with a string is not defined"); yyerrok;} break; - case 117: // sexp: sexp TIM exp + case 118: // sexp: sexp TIM exp { (yylhs.value.string) = (char*)""; yyerror(aprepro, "Multiplying a string with an arithmetic is not defined"); yyerrok;} break; - case 118: // sexp: sexp TIM sexp + case 119: // sexp: sexp TIM sexp { (yylhs.value.string) = (char*)""; yyerror(aprepro, "Multiplying a string with a string is not defined"); yyerrok;} break; - case 119: // sexp: sexp DIV exp + case 120: // sexp: sexp DIV exp { (yylhs.value.string) = (char*)""; yyerror(aprepro, "Dividing a string by an arithmetic is not defined"); yyerrok;} break; - case 120: // sexp: exp DIV sexp + case 121: // sexp: exp DIV sexp { (yylhs.value.string) = (char*)""; yyerror(aprepro, "Dividing an arithmetic by a string is not defined"); yyerrok;} break; - case 121: // sexp: sexp DIV sexp + case 122: // sexp: sexp DIV sexp { (yylhs.value.string) = (char*)""; yyerror(aprepro, "Dividing a string by a string is not defined"); yyerrok;} break; - case 122: // sexp: exp PLU sexp + case 123: // sexp: exp PLU sexp { (yylhs.value.string) = (char*)""; yyerror(aprepro, "Adding an arithmetic and a string is not defined"); yyerrok;} break; - case 123: // sexp: sexp PLU exp + case 124: // sexp: sexp PLU exp { (yylhs.value.string) = (char*)""; yyerror(aprepro, "Adding a string and an arithmetic is not defined"); yyerrok;} break; - case 124: // sexp: sexp PLU sexp - { (yylhs.value.string) = (char*)""; yyerror(aprepro, "Adding a string to a string is not defined"); yyerrok;} - break; - case 125: // sexp: exp SUB sexp { (yylhs.value.string) = (char*)""; yyerror(aprepro, "Subtracting an arithmetic and a string is not defined"); yyerrok;} break; @@ -1733,6 +1734,7 @@ namespace SEAMS { // If not already recovering from an error, report this error. if (!yyerrstatus_) { + ++yynerrs_; context yyctx (*this, yyla); std::string msg = yysyntax_error_ (yyctx); error (YY_MOVE (msg)); @@ -2119,20 +2121,20 @@ namespace SEAMS { 25, 190, 0, 191, 0, 0, 30, 19, 21, 31, 20, 22, 88, 0, 90, 92, 94, 91, 58, 34, 46, 59, 35, 47, 60, 36, 48, 61, 37, 49, - 62, 38, 50, 63, 39, 51, 124, 123, 127, 126, - 121, 119, 118, 117, 108, 0, 28, 23, 17, 29, + 62, 38, 50, 63, 39, 51, 109, 124, 127, 126, + 122, 120, 119, 118, 108, 0, 28, 23, 17, 29, 24, 18, 70, 40, 10, 71, 41, 11, 72, 42, 13, 73, 43, 14, 74, 44, 15, 75, 45, 16, - 122, 182, 125, 183, 120, 185, 93, 116, 184, 186, + 123, 182, 125, 183, 121, 185, 93, 117, 184, 186, 189, 0, 194, 170, 0, 169, 0, 168, 107, 0, 104, 0, 106, 83, 0, 77, 0, 82, 161, 137, 138, 139, 184, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 115, 193, 195, - 196, 0, 173, 171, 172, 0, 175, 0, 0, 114, - 0, 112, 109, 79, 78, 0, 81, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 116, 193, 195, + 196, 0, 173, 171, 172, 0, 175, 0, 0, 115, + 0, 113, 110, 79, 78, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 197, 174, 177, 0, 176, - 0, 113, 0, 111, 80, 0, 0, 0, 0, 179, - 178, 0, 0, 0, 0, 180, 0, 110, 0, 181 + 0, 114, 0, 112, 80, 0, 0, 0, 0, 179, + 178, 0, 0, 0, 0, 180, 0, 111, 0, 181 }; const short @@ -2648,8 +2650,8 @@ namespace SEAMS { 3, 3, 3, 3, 3, 3, 1, 4, 6, 6, 8, 6, 4, 4, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 1, 1, 1, 3, 3, - 3, 3, 3, 3, 4, 3, 4, 4, 3, 6, - 12, 8, 6, 8, 6, 5, 3, 3, 3, 3, + 3, 3, 3, 3, 4, 3, 4, 4, 3, 3, + 6, 12, 8, 6, 8, 6, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 2, 2, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, @@ -2694,7 +2696,7 @@ namespace SEAMS { 249, 255, 261, 267, 273, 277, 281, 284, 286, 294, 296, 304, 305, 306, 307, 316, 317, 318, 319, 321, 324, 328, 333, 334, 335, 341, 347, 353, 359, 360, - 366, 372, 378, 384, 390, 396, 397, 398, 399, 400, + 361, 367, 373, 379, 385, 391, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 421, 424, 429, 430, 431, 432, 433, 438, 439, 440, 441, 442, diff --git a/packages/seacas/libraries/aprepro_lib/aprepro.yy b/packages/seacas/libraries/aprepro_lib/aprepro.yy index 1a330699c5..1a0c7346fe 100644 --- a/packages/seacas/libraries/aprepro_lib/aprepro.yy +++ b/packages/seacas/libraries/aprepro_lib/aprepro.yy @@ -357,6 +357,7 @@ sexp: QSTRING { $$ = $1; } $$ = (char*)""; } | sexp CONCAT sexp { concat_string($1, $3, &$$); } + | sexp PLU sexp { concat_string($1, $3, &$$); } | SFNCT LPAR exp COMMA exp RPAR { if (arg_check($1, $1->value.strfnct_dd == NULL)) $$ = (char*)(*($1->value.strfnct_dd))($3, $5); @@ -402,7 +403,6 @@ sexp: QSTRING { $$ = $1; } | sexp DIV sexp { $$ = (char*)""; yyerror(aprepro, "Dividing a string by a string is not defined"); yyerrok;} | exp PLU sexp { $$ = (char*)""; yyerror(aprepro, "Adding an arithmetic and a string is not defined"); yyerrok;} | sexp PLU exp { $$ = (char*)""; yyerror(aprepro, "Adding a string and an arithmetic is not defined"); yyerrok;} - | sexp PLU sexp { $$ = (char*)""; yyerror(aprepro, "Adding a string to a string is not defined"); yyerrok;} | exp SUB sexp { $$ = (char*)""; yyerror(aprepro, "Subtracting an arithmetic and a string is not defined"); yyerrok;} | sexp SUB exp { $$ = (char*)""; yyerror(aprepro, "Subtracting a string and an arithmetic is not defined"); yyerrok;} | sexp SUB sexp { $$ = (char*)""; yyerror(aprepro, "Subtracting a string from a string is not defined"); yyerrok;} diff --git a/packages/seacas/libraries/aprepro_lib/aprepro_parser.h b/packages/seacas/libraries/aprepro_lib/aprepro_parser.h index 1184447f75..3729eff615 100644 --- a/packages/seacas/libraries/aprepro_lib/aprepro_parser.h +++ b/packages/seacas/libraries/aprepro_lib/aprepro_parser.h @@ -30,6 +30,7 @@ // This special exception was added by the Free Software Foundation in // version 2.2 of Bison. + /** ** \file aprepro_parser.h ** Define the SEAMS::parser class. @@ -42,228 +43,248 @@ // private implementation details that can be changed or removed. #ifndef YY_SEAMS_APREPRO_PARSER_H_INCLUDED -#define YY_SEAMS_APREPRO_PARSER_H_INCLUDED +# define YY_SEAMS_APREPRO_PARSER_H_INCLUDED + -#include // std::abort -#include -#include -#include -#include +# include // std::abort +# include +# include +# include +# include #if defined __cplusplus -#define YY_CPLUSPLUS __cplusplus +# define YY_CPLUSPLUS __cplusplus #else -#define YY_CPLUSPLUS 199711L +# define YY_CPLUSPLUS 199711L #endif // Support move semantics when possible. #if 201103L <= YY_CPLUSPLUS -#define YY_MOVE std::move -#define YY_MOVE_OR_COPY move -#define YY_MOVE_REF(Type) Type && -#define YY_RVREF(Type) Type && -#define YY_COPY(Type) Type +# define YY_MOVE std::move +# define YY_MOVE_OR_COPY move +# define YY_MOVE_REF(Type) Type&& +# define YY_RVREF(Type) Type&& +# define YY_COPY(Type) Type #else -#define YY_MOVE -#define YY_MOVE_OR_COPY copy -#define YY_MOVE_REF(Type) Type & -#define YY_RVREF(Type) const Type & -#define YY_COPY(Type) const Type & +# define YY_MOVE +# define YY_MOVE_OR_COPY copy +# define YY_MOVE_REF(Type) Type& +# define YY_RVREF(Type) const Type& +# define YY_COPY(Type) const Type& #endif // Support noexcept when possible. #if 201103L <= YY_CPLUSPLUS -#define YY_NOEXCEPT noexcept -#define YY_NOTHROW +# define YY_NOEXCEPT noexcept +# define YY_NOTHROW #else -#define YY_NOEXCEPT -#define YY_NOTHROW throw() +# define YY_NOEXCEPT +# define YY_NOTHROW throw () #endif // Support constexpr when possible. #if 201703 <= YY_CPLUSPLUS -#define YY_CONSTEXPR constexpr +# define YY_CONSTEXPR constexpr #else -#define YY_CONSTEXPR +# define YY_CONSTEXPR #endif + + #ifndef YY_ATTRIBUTE_PURE -#if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) -#define YY_ATTRIBUTE_PURE __attribute__((__pure__)) -#else -#define YY_ATTRIBUTE_PURE -#endif +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define YY_ATTRIBUTE_PURE +# endif #endif #ifndef YY_ATTRIBUTE_UNUSED -#if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) -#define YY_ATTRIBUTE_UNUSED __attribute__((__unused__)) -#else -#define YY_ATTRIBUTE_UNUSED -#endif +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +# else +# define YY_ATTRIBUTE_UNUSED +# endif #endif /* Suppress unused-variable warnings by "using" E. */ -#if !defined lint || defined __GNUC__ -#define YY_USE(E) ((void)(E)) +#if ! defined lint || defined __GNUC__ +# define YY_USE(E) ((void) (E)) #else -#define YY_USE(E) /* empty */ +# define YY_USE(E) /* empty */ #endif /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -#if defined __GNUC__ && !defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ -#if __GNUC__ * 100 + __GNUC_MINOR__ < 407 -#define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wuninitialized\"") -#else -#define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wuninitialized\"") \ - _Pragma("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -#endif -#define YY_IGNORE_MAYBE_UNINITIALIZED_END _Pragma("GCC diagnostic pop") +#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ +# if __GNUC__ * 100 + __GNUC_MINOR__ < 407 +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") +# else +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# endif +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") #else -#define YY_INITIAL_VALUE(Value) Value +# define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -#define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -#define YY_IGNORE_MAYBE_UNINITIALIZED_END +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE -#define YY_INITIAL_VALUE(Value) /* Nothing. */ +# define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif -#if defined __cplusplus && defined __GNUC__ && !defined __ICC && 6 <= __GNUC__ -#define YY_IGNORE_USELESS_CAST_BEGIN \ - _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wuseless-cast\"") -#define YY_IGNORE_USELESS_CAST_END _Pragma("GCC diagnostic pop") +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") #endif #ifndef YY_IGNORE_USELESS_CAST_BEGIN -#define YY_IGNORE_USELESS_CAST_BEGIN -#define YY_IGNORE_USELESS_CAST_END -#endif - -#ifndef YY_CAST -#ifdef __cplusplus -#define YY_CAST(Type, Val) static_cast(Val) -#define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast(Val) -#else -#define YY_CAST(Type, Val) ((Type)(Val)) -#define YY_REINTERPRET_CAST(Type, Val) ((Type)(Val)) -#endif -#endif -#ifndef YY_NULLPTR -#if defined __cplusplus -#if 201103L <= __cplusplus -#define YY_NULLPTR nullptr -#else -#define YY_NULLPTR 0 -#endif -#else -#define YY_NULLPTR ((void *)0) -#endif -#endif +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif +# ifndef YY_NULLPTR +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif +# else +# define YY_NULLPTR ((void*)0) +# endif +# endif /* Debug traces. */ #ifndef SEAMSDEBUG -#if defined YYDEBUG +# if defined YYDEBUG #if YYDEBUG -#define SEAMSDEBUG 1 -#else -#define SEAMSDEBUG 0 -#endif -#else /* ! defined YYDEBUG */ -#define SEAMSDEBUG 1 -#endif /* ! defined YYDEBUG */ -#endif /* ! defined SEAMSDEBUG */ +# define SEAMSDEBUG 1 +# else +# define SEAMSDEBUG 0 +# endif +# else /* ! defined YYDEBUG */ +# define SEAMSDEBUG 1 +# endif /* ! defined YYDEBUG */ +#endif /* ! defined SEAMSDEBUG */ namespace SEAMS { + + + /// A Bison parser. class Parser { public: #ifdef SEAMSSTYPE -#ifdef __GNUC__ -#pragma GCC message "bison: do not #define SEAMSSTYPE in C++, use %define api.value.type" -#endif +# ifdef __GNUC__ +# pragma GCC message "bison: do not #define SEAMSSTYPE in C++, use %define api.value.type" +# endif typedef SEAMSSTYPE value_type; #else /// Symbol semantic values. - union value_type { + union value_type + { + + double val; /* For returning numbers. */ + struct symrec *tptr; /* For returning symbol-table pointers */ + char *string; /* For returning quoted strings */ + struct array *arrval; /* For returning arrays */ + - double val; /* For returning numbers. */ - struct symrec *tptr; /* For returning symbol-table pointers */ - char *string; /* For returning quoted strings */ - struct array *arrval; /* For returning arrays */ }; #endif /// Backward compatibility (Bison 3.8). typedef value_type semantic_type; + /// Syntax errors thrown from user actions. struct syntax_error : std::runtime_error { - syntax_error(const std::string &m) : std::runtime_error(m) {} + syntax_error (const std::string& m) + : std::runtime_error (m) + {} - syntax_error(const syntax_error &s) : std::runtime_error(s.what()) {} + syntax_error (const syntax_error& s) + : std::runtime_error (s.what ()) + {} - ~syntax_error() YY_NOEXCEPT YY_NOTHROW; + ~syntax_error () YY_NOEXCEPT YY_NOTHROW; }; /// Token kinds. struct token { - enum token_kind_type { + enum token_kind_type + { SEAMSEMPTY = -2, - END = 0, // "end of file" - SEAMSerror = 256, // error - SEAMSUNDEF = 257, // "invalid token" - NUM = 258, // NUM - QSTRING = 259, // QSTRING - UNDVAR = 260, // UNDVAR - VAR = 261, // VAR - SVAR = 262, // SVAR - IMMVAR = 263, // IMMVAR - IMMSVAR = 264, // IMMSVAR - AVAR = 265, // AVAR - FNCT = 266, // FNCT - SFNCT = 267, // SFNCT - AFNCT = 268, // AFNCT - COMMA = 269, // COMMA - LPAR = 270, // LPAR - RPAR = 271, // RPAR - LBRACK = 272, // LBRACK - RBRACK = 273, // RBRACK - LBRACE = 274, // LBRACE - RBRACE = 275, // RBRACE - SEMI = 276, // SEMI - EQUAL = 277, // EQUAL - EQ_PLUS = 278, // EQ_PLUS - EQ_MINUS = 279, // EQ_MINUS - EQ_TIME = 280, // EQ_TIME - EQ_DIV = 281, // EQ_DIV - EQ_POW = 282, // EQ_POW - QUEST = 283, // QUEST - COLON = 284, // COLON - LOR = 285, // LOR - LAND = 286, // LAND - LT = 287, // LT - GT = 288, // GT - LE = 289, // LE - GE = 290, // GE - EQ = 291, // EQ - NE = 292, // NE - PLU = 293, // PLU - SUB = 294, // SUB - DIV = 295, // DIV - TIM = 296, // TIM - MOD = 297, // MOD - UNARY = 298, // UNARY - NOT = 299, // NOT - POW = 300, // POW - INC = 301, // INC - DEC = 302, // DEC - CONCAT = 303 // CONCAT + END = 0, // "end of file" + SEAMSerror = 256, // error + SEAMSUNDEF = 257, // "invalid token" + NUM = 258, // NUM + QSTRING = 259, // QSTRING + UNDVAR = 260, // UNDVAR + VAR = 261, // VAR + SVAR = 262, // SVAR + IMMVAR = 263, // IMMVAR + IMMSVAR = 264, // IMMSVAR + AVAR = 265, // AVAR + FNCT = 266, // FNCT + SFNCT = 267, // SFNCT + AFNCT = 268, // AFNCT + COMMA = 269, // COMMA + LPAR = 270, // LPAR + RPAR = 271, // RPAR + LBRACK = 272, // LBRACK + RBRACK = 273, // RBRACK + LBRACE = 274, // LBRACE + RBRACE = 275, // RBRACE + SEMI = 276, // SEMI + EQUAL = 277, // EQUAL + EQ_PLUS = 278, // EQ_PLUS + EQ_MINUS = 279, // EQ_MINUS + EQ_TIME = 280, // EQ_TIME + EQ_DIV = 281, // EQ_DIV + EQ_POW = 282, // EQ_POW + QUEST = 283, // QUEST + COLON = 284, // COLON + LOR = 285, // LOR + LAND = 286, // LAND + LT = 287, // LT + GT = 288, // GT + LE = 289, // LE + GE = 290, // GE + EQ = 291, // EQ + NE = 292, // NE + PLU = 293, // PLU + SUB = 294, // SUB + DIV = 295, // DIV + TIM = 296, // TIM + MOD = 297, // MOD + UNARY = 298, // UNARY + NOT = 299, // NOT + POW = 300, // POW + INC = 301, // INC + DEC = 302, // DEC + CONCAT = 303 // CONCAT }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -278,66 +299,67 @@ namespace SEAMS { /// Symbol kinds. struct symbol_kind { - enum symbol_kind_type { - YYNTOKENS = 50, ///< Number of tokens. - S_YYEMPTY = -2, - S_YYEOF = 0, // "end of file" - S_YYerror = 1, // error - S_YYUNDEF = 2, // "invalid token" - S_NUM = 3, // NUM - S_QSTRING = 4, // QSTRING - S_UNDVAR = 5, // UNDVAR - S_VAR = 6, // VAR - S_SVAR = 7, // SVAR - S_IMMVAR = 8, // IMMVAR - S_IMMSVAR = 9, // IMMSVAR - S_AVAR = 10, // AVAR - S_FNCT = 11, // FNCT - S_SFNCT = 12, // SFNCT - S_AFNCT = 13, // AFNCT - S_COMMA = 14, // COMMA - S_LPAR = 15, // LPAR - S_RPAR = 16, // RPAR - S_LBRACK = 17, // LBRACK - S_RBRACK = 18, // RBRACK - S_LBRACE = 19, // LBRACE - S_RBRACE = 20, // RBRACE - S_SEMI = 21, // SEMI - S_EQUAL = 22, // EQUAL - S_EQ_PLUS = 23, // EQ_PLUS - S_EQ_MINUS = 24, // EQ_MINUS - S_EQ_TIME = 25, // EQ_TIME - S_EQ_DIV = 26, // EQ_DIV - S_EQ_POW = 27, // EQ_POW - S_QUEST = 28, // QUEST - S_COLON = 29, // COLON - S_LOR = 30, // LOR - S_LAND = 31, // LAND - S_LT = 32, // LT - S_GT = 33, // GT - S_LE = 34, // LE - S_GE = 35, // GE - S_EQ = 36, // EQ - S_NE = 37, // NE - S_PLU = 38, // PLU - S_SUB = 39, // SUB - S_DIV = 40, // DIV - S_TIM = 41, // TIM - S_MOD = 42, // MOD - S_UNARY = 43, // UNARY - S_NOT = 44, // NOT - S_POW = 45, // POW - S_INC = 46, // INC - S_DEC = 47, // DEC - S_CONCAT = 48, // CONCAT - S_49_n_ = 49, // '\n' - S_YYACCEPT = 50, // $accept - S_input = 51, // input - S_line = 52, // line - S_bool = 53, // bool - S_aexp = 54, // aexp - S_sexp = 55, // sexp - S_exp = 56 // exp + enum symbol_kind_type + { + YYNTOKENS = 50, ///< Number of tokens. + S_YYEMPTY = -2, + S_YYEOF = 0, // "end of file" + S_YYerror = 1, // error + S_YYUNDEF = 2, // "invalid token" + S_NUM = 3, // NUM + S_QSTRING = 4, // QSTRING + S_UNDVAR = 5, // UNDVAR + S_VAR = 6, // VAR + S_SVAR = 7, // SVAR + S_IMMVAR = 8, // IMMVAR + S_IMMSVAR = 9, // IMMSVAR + S_AVAR = 10, // AVAR + S_FNCT = 11, // FNCT + S_SFNCT = 12, // SFNCT + S_AFNCT = 13, // AFNCT + S_COMMA = 14, // COMMA + S_LPAR = 15, // LPAR + S_RPAR = 16, // RPAR + S_LBRACK = 17, // LBRACK + S_RBRACK = 18, // RBRACK + S_LBRACE = 19, // LBRACE + S_RBRACE = 20, // RBRACE + S_SEMI = 21, // SEMI + S_EQUAL = 22, // EQUAL + S_EQ_PLUS = 23, // EQ_PLUS + S_EQ_MINUS = 24, // EQ_MINUS + S_EQ_TIME = 25, // EQ_TIME + S_EQ_DIV = 26, // EQ_DIV + S_EQ_POW = 27, // EQ_POW + S_QUEST = 28, // QUEST + S_COLON = 29, // COLON + S_LOR = 30, // LOR + S_LAND = 31, // LAND + S_LT = 32, // LT + S_GT = 33, // GT + S_LE = 34, // LE + S_GE = 35, // GE + S_EQ = 36, // EQ + S_NE = 37, // NE + S_PLU = 38, // PLU + S_SUB = 39, // SUB + S_DIV = 40, // DIV + S_TIM = 41, // TIM + S_MOD = 42, // MOD + S_UNARY = 43, // UNARY + S_NOT = 44, // NOT + S_POW = 45, // POW + S_INC = 46, // INC + S_DEC = 47, // DEC + S_CONCAT = 48, // CONCAT + S_49_n_ = 49, // '\n' + S_YYACCEPT = 50, // $accept + S_input = 51, // input + S_line = 52, // line + S_bool = 53, // bool + S_aexp = 54, // aexp + S_sexp = 55, // sexp + S_exp = 56 // exp }; }; @@ -353,44 +375,62 @@ namespace SEAMS { /// via kind (). /// /// Provide access to semantic value. - template struct basic_symbol : Base + template + struct basic_symbol : Base { /// Alias to Base. typedef Base super_type; /// Default constructor. - basic_symbol() YY_NOEXCEPT : value() {} + basic_symbol () YY_NOEXCEPT + : value () + {} #if 201103L <= YY_CPLUSPLUS /// Move constructor. - basic_symbol(basic_symbol &&that) : Base(std::move(that)), value(std::move(that.value)) {} + basic_symbol (basic_symbol&& that) + : Base (std::move (that)) + , value (std::move (that.value)) + {} #endif /// Copy constructor. - basic_symbol(const basic_symbol &that); + basic_symbol (const basic_symbol& that); /// Constructor for valueless symbols. - basic_symbol(typename Base::kind_type t); + basic_symbol (typename Base::kind_type t); /// Constructor for symbols with semantic value. - basic_symbol(typename Base::kind_type t, YY_RVREF(value_type) v); + basic_symbol (typename Base::kind_type t, + YY_RVREF (value_type) v); /// Destroy the symbol. - ~basic_symbol() { clear(); } + ~basic_symbol () + { + clear (); + } + + /// Destroy contents, and record that is empty. - void clear() YY_NOEXCEPT { Base::clear(); } + void clear () YY_NOEXCEPT + { + Base::clear (); + } /// The user-facing name of this symbol. - std::string name() const YY_NOEXCEPT { return Parser::symbol_name(this->kind()); } + std::string name () const YY_NOEXCEPT + { + return Parser::symbol_name (this->kind ()); + } /// Backward compatibility (Bison 3.6). - symbol_kind_type type_get() const YY_NOEXCEPT; + symbol_kind_type type_get () const YY_NOEXCEPT; /// Whether empty. - bool empty() const YY_NOEXCEPT; + bool empty () const YY_NOEXCEPT; /// Destructive move, \a s is emptied into this. - void move(basic_symbol &s); + void move (basic_symbol& s); /// The semantic value. value_type value; @@ -398,7 +438,7 @@ namespace SEAMS { private: #if YY_CPLUSPLUS < 201103L /// Assignment operator. - basic_symbol &operator=(const basic_symbol &that); + basic_symbol& operator= (const basic_symbol& that); #endif }; @@ -409,31 +449,33 @@ namespace SEAMS { typedef token_kind_type kind_type; /// Default constructor. - by_kind() YY_NOEXCEPT; + by_kind () YY_NOEXCEPT; #if 201103L <= YY_CPLUSPLUS /// Move constructor. - by_kind(by_kind &&that) YY_NOEXCEPT; + by_kind (by_kind&& that) YY_NOEXCEPT; #endif /// Copy constructor. - by_kind(const by_kind &that) YY_NOEXCEPT; + by_kind (const by_kind& that) YY_NOEXCEPT; /// Constructor from (external) token numbers. - by_kind(kind_type t) YY_NOEXCEPT; + by_kind (kind_type t) YY_NOEXCEPT; + + /// Record that this symbol is empty. - void clear() YY_NOEXCEPT; + void clear () YY_NOEXCEPT; /// Steal the symbol kind from \a that. - void move(by_kind &that); + void move (by_kind& that); /// The (internal) type number (corresponding to \a type). /// \a empty when empty. - symbol_kind_type kind() const YY_NOEXCEPT; + symbol_kind_type kind () const YY_NOEXCEPT; /// Backward compatibility (Bison 3.6). - symbol_kind_type type_get() const YY_NOEXCEPT; + symbol_kind_type type_get () const YY_NOEXCEPT; /// The symbol kind. /// \a S_YYEMPTY when empty. @@ -445,99 +487,101 @@ namespace SEAMS { /// "External" symbols: returned by the scanner. struct symbol_type : basic_symbol - { - }; + {}; /// Build a parser object. - Parser(class Aprepro &aprepro_yyarg); - virtual ~Parser(); + Parser (class Aprepro& aprepro_yyarg); + virtual ~Parser (); #if 201103L <= YY_CPLUSPLUS /// Non copyable. - Parser(const Parser &) = delete; + Parser (const Parser&) = delete; /// Non copyable. - Parser &operator=(const Parser &) = delete; + Parser& operator= (const Parser&) = delete; #endif /// Parse. An alias for parse (). /// \returns 0 iff parsing succeeded. - int operator()(); + int operator() (); /// Parse. /// \returns 0 iff parsing succeeded. - virtual int parse(); + virtual int parse (); #if SEAMSDEBUG /// The current debugging stream. - std::ostream &debug_stream() const YY_ATTRIBUTE_PURE; + std::ostream& debug_stream () const YY_ATTRIBUTE_PURE; /// Set the current debugging stream. - void set_debug_stream(std::ostream &); + void set_debug_stream (std::ostream &); /// Type for debugging levels. typedef int debug_level_type; /// The current debugging level. - debug_level_type debug_level() const YY_ATTRIBUTE_PURE; + debug_level_type debug_level () const YY_ATTRIBUTE_PURE; /// Set the current debugging level. - void set_debug_level(debug_level_type l); + void set_debug_level (debug_level_type l); #endif /// Report a syntax error. /// \param msg a description of the syntax error. - virtual void error(const std::string &msg); + virtual void error (const std::string& msg); /// Report a syntax error. - void error(const syntax_error &err); + void error (const syntax_error& err); /// The user-facing name of the symbol whose (internal) number is /// YYSYMBOL. No bounds checking. - static std::string symbol_name(symbol_kind_type yysymbol); + static std::string symbol_name (symbol_kind_type yysymbol); + + class context { public: - context(const Parser &yyparser, const symbol_type &yyla); - const symbol_type &lookahead() const YY_NOEXCEPT { return yyla_; } - symbol_kind_type token() const YY_NOEXCEPT { return yyla_.kind(); } + context (const Parser& yyparser, const symbol_type& yyla); + const symbol_type& lookahead () const YY_NOEXCEPT { return yyla_; } + symbol_kind_type token () const YY_NOEXCEPT { return yyla_.kind (); } /// Put in YYARG at most YYARGN of the expected tokens, and return the /// number of tokens stored in YYARG. If YYARG is null, return the /// number of expected tokens (guaranteed to be less than YYNTOKENS). - int expected_tokens(symbol_kind_type yyarg[], int yyargn) const; + int expected_tokens (symbol_kind_type yyarg[], int yyargn) const; private: - const Parser &yyparser_; - const symbol_type &yyla_; + const Parser& yyparser_; + const symbol_type& yyla_; }; private: #if YY_CPLUSPLUS < 201103L /// Non copyable. - Parser(const Parser &); + Parser (const Parser&); /// Non copyable. - Parser &operator=(const Parser &); + Parser& operator= (const Parser&); #endif + /// Stored state numbers (used for stacks). typedef short state_type; /// The arguments of the error message. - int yy_syntax_error_arguments_(const context &yyctx, symbol_kind_type yyarg[], - int yyargn) const; + int yy_syntax_error_arguments_ (const context& yyctx, + symbol_kind_type yyarg[], int yyargn) const; /// Generate an error message. /// \param yyctx the context in which the error occurred. - virtual std::string yysyntax_error_(const context &yyctx) const; + virtual std::string yysyntax_error_ (const context& yyctx) const; /// Compute post-reduction state. /// \param yystate the current state /// \param yysym the nonterminal to push on the stack - static state_type yy_lr_goto_state_(state_type yystate, int yysym); + static state_type yy_lr_goto_state_ (state_type yystate, int yysym); /// Whether the given \c yypact_ value indicates a defaulted state. /// \param yyvalue the value to check - static bool yy_pact_value_is_default_(int yyvalue) YY_NOEXCEPT; + static bool yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT; /// Whether the given \c yytable_ value indicates a syntax error. /// \param yyvalue the value to check - static bool yy_table_value_is_error_(int yyvalue) YY_NOEXCEPT; + static bool yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT; static const signed char yypact_ninf_; static const signed char yytable_ninf_; @@ -545,13 +589,14 @@ namespace SEAMS { /// Convert a scanner token kind \a t to a symbol kind. /// In theory \a t should be a token_kind_type, but character literals /// are valid, yet not members of the token_kind_type enum. - static symbol_kind_type yytranslate_(int t) YY_NOEXCEPT; + static symbol_kind_type yytranslate_ (int t) YY_NOEXCEPT; /// Convert the symbol name \a n to a form suitable for a diagnostic. - static std::string yytnamerr_(const char *yystr); + static std::string yytnamerr_ (const char *yystr); /// For a symbol, its name in clear. - static const char *const yytname_[]; + static const char* const yytname_[]; + // Tables. // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -586,57 +631,59 @@ namespace SEAMS { // YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. static const signed char yyr2_[]; + #if SEAMSDEBUG // YYRLINE[YYN] -- Source line where rule number YYN was defined. static const short yyrline_[]; /// Report on the debug stream that the rule \a r is going to be reduced. - virtual void yy_reduce_print_(int r) const; + virtual void yy_reduce_print_ (int r) const; /// Print the state stack on the debug stream. - virtual void yy_stack_print_() const; + virtual void yy_stack_print_ () const; /// Debugging level. int yydebug_; /// Debug stream. - std::ostream *yycdebug_; + std::ostream* yycdebug_; /// \brief Display a symbol kind, value and location. /// \param yyo The output stream. /// \param yysym The symbol. template - void yy_print_(std::ostream &yyo, const basic_symbol &yysym) const; + void yy_print_ (std::ostream& yyo, const basic_symbol& yysym) const; #endif /// \brief Reclaim the memory associated to a symbol. /// \param yymsg Why this token is reclaimed. /// If null, print nothing. /// \param yysym The symbol. - template void yy_destroy_(const char *yymsg, basic_symbol &yysym) const; + template + void yy_destroy_ (const char* yymsg, basic_symbol& yysym) const; private: /// Type access provider for state based symbols. struct by_state { /// Default constructor. - by_state() YY_NOEXCEPT; + by_state () YY_NOEXCEPT; /// The symbol kind as needed by the constructor. typedef state_type kind_type; /// Constructor. - by_state(kind_type s) YY_NOEXCEPT; + by_state (kind_type s) YY_NOEXCEPT; /// Copy constructor. - by_state(const by_state &that) YY_NOEXCEPT; + by_state (const by_state& that) YY_NOEXCEPT; /// Record that this symbol is empty. - void clear() YY_NOEXCEPT; + void clear () YY_NOEXCEPT; /// Steal the symbol kind from \a that. - void move(by_state &that); + void move (by_state& that); /// The symbol kind (corresponding to \a state). /// \a symbol_kind::S_YYEMPTY when empty. - symbol_kind_type kind() const YY_NOEXCEPT; + symbol_kind_type kind () const YY_NOEXCEPT; /// The state number used to denote an empty symbol. /// We use the initial state, as it does not have a value. @@ -653,103 +700,140 @@ namespace SEAMS { /// Superclass. typedef basic_symbol super_type; /// Construct an empty symbol. - stack_symbol_type(); + stack_symbol_type (); /// Move or copy construction. - stack_symbol_type(YY_RVREF(stack_symbol_type) that); + stack_symbol_type (YY_RVREF (stack_symbol_type) that); /// Steal the contents from \a sym to build this. - stack_symbol_type(state_type s, YY_MOVE_REF(symbol_type) sym); + stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym); #if YY_CPLUSPLUS < 201103L /// Assignment, needed by push_back by some old implementations. /// Moves the contents of that. - stack_symbol_type &operator=(stack_symbol_type &that); + stack_symbol_type& operator= (stack_symbol_type& that); /// Assignment, needed by push_back by other implementations. /// Needed by some other old implementations. - stack_symbol_type &operator=(const stack_symbol_type &that); + stack_symbol_type& operator= (const stack_symbol_type& that); #endif }; /// A stack with random access from its top. - template > class stack + template > + class stack { public: // Hide our reversed order. - typedef typename S::iterator iterator; + typedef typename S::iterator iterator; typedef typename S::const_iterator const_iterator; - typedef typename S::size_type size_type; - typedef typename std::ptrdiff_t index_type; + typedef typename S::size_type size_type; + typedef typename std::ptrdiff_t index_type; - stack(size_type n = 200) YY_NOEXCEPT : seq_(n) {} + stack (size_type n = 200) YY_NOEXCEPT + : seq_ (n) + {} #if 201103L <= YY_CPLUSPLUS /// Non copyable. - stack(const stack &) = delete; + stack (const stack&) = delete; /// Non copyable. - stack &operator=(const stack &) = delete; + stack& operator= (const stack&) = delete; #endif /// Random access. /// /// Index 0 returns the topmost element. - const T &operator[](index_type i) const { return seq_[size_type(size() - 1 - i)]; } + const T& + operator[] (index_type i) const + { + return seq_[size_type (size () - 1 - i)]; + } /// Random access. /// /// Index 0 returns the topmost element. - T &operator[](index_type i) { return seq_[size_type(size() - 1 - i)]; } + T& + operator[] (index_type i) + { + return seq_[size_type (size () - 1 - i)]; + } /// Steal the contents of \a t. /// /// Close to move-semantics. - void push(YY_MOVE_REF(T) t) + void + push (YY_MOVE_REF (T) t) { - seq_.push_back(T()); - operator[](0).move(t); + seq_.push_back (T ()); + operator[] (0).move (t); } /// Pop elements from the stack. - void pop(std::ptrdiff_t n = 1) YY_NOEXCEPT + void + pop (std::ptrdiff_t n = 1) YY_NOEXCEPT { for (; 0 < n; --n) - seq_.pop_back(); + seq_.pop_back (); } /// Pop all elements from the stack. - void clear() YY_NOEXCEPT { seq_.clear(); } + void + clear () YY_NOEXCEPT + { + seq_.clear (); + } /// Number of elements on the stack. - index_type size() const YY_NOEXCEPT { return index_type(seq_.size()); } + index_type + size () const YY_NOEXCEPT + { + return index_type (seq_.size ()); + } /// Iterator on top of the stack (going downwards). - const_iterator begin() const YY_NOEXCEPT { return seq_.begin(); } + const_iterator + begin () const YY_NOEXCEPT + { + return seq_.begin (); + } /// Bottom of the stack. - const_iterator end() const YY_NOEXCEPT { return seq_.end(); } + const_iterator + end () const YY_NOEXCEPT + { + return seq_.end (); + } /// Present a slice of the top of a stack. class slice { public: - slice(const stack &stack, index_type range) YY_NOEXCEPT : stack_(stack), range_(range) {} + slice (const stack& stack, index_type range) YY_NOEXCEPT + : stack_ (stack) + , range_ (range) + {} - const T &operator[](index_type i) const { return stack_[range_ - i]; } + const T& + operator[] (index_type i) const + { + return stack_[range_ - i]; + } private: - const stack &stack_; - index_type range_; + const stack& stack_; + index_type range_; }; private: #if YY_CPLUSPLUS < 201103L /// Non copyable. - stack(const stack &); + stack (const stack&); /// Non copyable. - stack &operator=(const stack &); + stack& operator= (const stack&); #endif /// The wrapped container. S seq_; }; + /// Stack type. typedef stack stack_type; @@ -761,7 +845,7 @@ namespace SEAMS { /// if null, no trace is output. /// \param sym the symbol /// \warning the contents of \a s.value is stolen. - void yypush_(const char *m, YY_MOVE_REF(stack_symbol_type) sym); + void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym); /// Push a new look ahead token on the state on the stack. /// \param m a debug message to display @@ -769,22 +853,29 @@ namespace SEAMS { /// \param s the state /// \param sym the symbol (for its value and location). /// \warning the contents of \a sym.value is stolen. - void yypush_(const char *m, state_type s, YY_MOVE_REF(symbol_type) sym); + void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym); /// Pop \a n symbols from the stack. - void yypop_(int n = 1) YY_NOEXCEPT; + void yypop_ (int n = 1) YY_NOEXCEPT; /// Constants. - enum { - yylast_ = 2057, ///< Last index in yytable_. - yynnts_ = 7, ///< Number of nonterminal symbols. - yyfinal_ = 2 ///< Termination state number. + enum + { + yylast_ = 2057, ///< Last index in yytable_. + yynnts_ = 7, ///< Number of nonterminal symbols. + yyfinal_ = 2 ///< Termination state number. }; + // User arguments. - class Aprepro &aprepro; + class Aprepro& aprepro; + }; -} // namespace SEAMS + +} // SEAMS + + + #endif // !YY_SEAMS_APREPRO_PARSER_H_INCLUDED