diff options
Diffstat (limited to 'src/tools/lcc')
| -rw-r--r-- | src/tools/lcc/lburg/gram.c | 2005 | 
1 files changed, 1507 insertions, 498 deletions
diff --git a/src/tools/lcc/lburg/gram.c b/src/tools/lcc/lburg/gram.c index c09f897..f6ee9f9 100644 --- a/src/tools/lcc/lburg/gram.c +++ b/src/tools/lcc/lburg/gram.c @@ -1,257 +1,1546 @@ -#if defined(__STDC__) || defined(__cplusplus) -#define YYCONST const -#define YYPARAMS(x) x -#define YYDEFUN(name, arglist, args) name(args) -#define YYAND , -#define YYPTR void * -#else -#define YYCONST -#define YYPARAMS(x) () -#define YYDEFUN(name, arglist, args) name arglist args; -#define YYAND ; -#define YYPTR char * -#endif -#define YYBYACC 1 -#ifndef YYDONT_INCLUDE_STDIO -#include <stdio.h> -#endif -#include <stdlib.h> /* for malloc/realloc/free */ -#line 2 "lburg/gram.y" +/* A Bison parser, made by GNU Bison 3.0.4.  */ + +/* Bison implementation for Yacc-like parsers in C + +   Copyright (C) 1984, 1989-1990, 2000-2015 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 +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ + +/* As a special exception, you may create a larger work that contains +   part or all of the Bison parser skeleton and distribute that work +   under terms of your choice, so long as that work isn't itself a +   parser generator using the skeleton or a modified version thereof +   as a parser skeleton.  Alternatively, if you modify or redistribute +   the parser skeleton itself, you may (at your option) remove this +   special exception, which will cause the skeleton and the resulting +   Bison output files to be licensed under the GNU General Public +   License without this special exception. + +   This special exception was added by the Free Software Foundation in +   version 2.2 of Bison.  */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by +   simplifying the original so-called "semantic" parser.  */ + +/* All symbols defined below should begin with yy or YY, to avoid +   infringing on user name space.  This should be done even for local +   variables, as they might otherwise be expanded by user macros. +   There are some unavoidable exceptions within include files to +   define necessary library symbols; they are noted "INFRINGES ON +   USER NAME SPACE" below.  */ + +/* Identify Bison output.  */ +#define YYBISON 1 + +/* Bison version.  */ +#define YYBISON_VERSION "3.0.4" + +/* Skeleton name.  */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers.  */ +#define YYPURE 0 + +/* Push parsers.  */ +#define YYPUSH 0 + +/* Pull parsers.  */ +#define YYPULL 1 + + + + +/* Copy the first part of user declarations.  */ +#line 1 "src/tools/lcc/lburg/gram.y" /* yacc.c:339  */ +  #include <stdio.h>  #include "lburg.h" +static char rcsid[] = "$Id: gram.y 145 2001-10-17 21:53:10Z timo $";  /*lint -e616 -e527 -e652 -esym(552,yynerrs) -esym(563,yynewstate,yyerrlab) */  static int yylineno = 0; -#line 8 "lburg/gram.y" -typedef union { + +#line 74 "y.tab.c" /* yacc.c:339  */ + +# ifndef YY_NULLPTR +#  if defined __cplusplus && 201103L <= __cplusplus +#   define YY_NULLPTR nullptr +#  else +#   define YY_NULLPTR 0 +#  endif +# endif + +/* Enabling verbose error messages.  */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + + +/* Debug traces.  */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int yydebug; +#endif + +/* Token type.  */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE +  enum yytokentype +  { +    TERMINAL = 258, +    START = 259, +    PPERCENT = 260, +    ID = 261, +    TEMPLATE = 262, +    CODE = 263, +    INT = 264 +  }; +#endif +/* Tokens.  */ +#define TERMINAL 258 +#define START 259 +#define PPERCENT 260 +#define ID 261 +#define TEMPLATE 262 +#define CODE 263 +#define INT 264 + +/* Value type.  */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED + +union YYSTYPE +{ +#line 8 "src/tools/lcc/lburg/gram.y" /* yacc.c:355  */ +  	int n;  	char *string;  	Tree tree; -} YYSTYPE; -#line 37 "y.tab.c" -#define TERMINAL 257 -#define START 258 -#define PPERCENT 259 -#define ID 260 -#define TEMPLATE 261 -#define CODE 262 -#define INT 263 -#define YYERRCODE 256 -static YYCONST short yylhs[] = {                                        -1, -    0,    0,    4,    4,    6,    6,    6,    6,    7,    7, -    5,    5,    5,    5,    1,    3,    3,    3,    2, + +#line 135 "y.tab.c" /* yacc.c:355  */  }; -static YYCONST short yylen[] = {                                         2, -    3,    1,    0,    2,    3,    3,    1,    2,    0,    4, -    0,    7,    2,    3,    1,    1,    4,    6,    1, + +typedef union YYSTYPE YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 +#endif + + +extern YYSTYPE yylval; + +int yyparse (void); + + + +/* Copy the second part of user declarations.  */ + +#line 152 "y.tab.c" /* yacc.c:358  */ + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#else +typedef signed char yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +#  define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +#  define YYSIZE_T size_t +# elif ! defined YYSIZE_T +#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +#  define YYSIZE_T size_t +# else +#  define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +#  if ENABLE_NLS +#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */ +#   define YY_(Msgid) dgettext ("bison-runtime", Msgid) +#  endif +# endif +# ifndef YY_ +#  define YY_(Msgid) Msgid +# endif +#endif + +#ifndef YY_ATTRIBUTE +# if (defined __GNUC__                                               \ +      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \ +     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C +#  define YY_ATTRIBUTE(Spec) __attribute__(Spec) +# else +#  define YY_ATTRIBUTE(Spec) /* empty */ +# endif +#endif + +#ifndef YY_ATTRIBUTE_PURE +# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__)) +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) +#endif + +#if !defined _Noreturn \ +     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) +# if defined _MSC_VER && 1200 <= _MSC_VER +#  define _Noreturn __declspec (noreturn) +# else +#  define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# endif +#endif + +/* Suppress unused-variable warnings by "using" E.  */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(E) ((void) (E)) +#else +# define YYUSE(E) /* empty */ +#endif + +#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +/* Suppress an incorrect diagnostic about yylval being uninitialized.  */ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ +    _Pragma ("GCC diagnostic push") \ +    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ +    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ +    _Pragma ("GCC diagnostic pop") +#else +# 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 +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols.  */ + +# ifdef YYSTACK_USE_ALLOCA +#  if YYSTACK_USE_ALLOCA +#   ifdef __GNUC__ +#    define YYSTACK_ALLOC __builtin_alloca +#   elif defined __BUILTIN_VA_ARG_INCR +#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */ +#   elif defined _AIX +#    define YYSTACK_ALLOC __alloca +#   elif defined _MSC_VER +#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */ +#    define alloca _alloca +#   else +#    define YYSTACK_ALLOC alloca +#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS +#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ +      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */ +#     ifndef EXIT_SUCCESS +#      define EXIT_SUCCESS 0 +#     endif +#    endif +#   endif +#  endif +# endif + +# ifdef YYSTACK_ALLOC +   /* Pacify GCC's 'empty if-body' warning.  */ +#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +#  ifndef YYSTACK_ALLOC_MAXIMUM +    /* The OS might guarantee only one guard page at the bottom of the stack, +       and a page size can be as small as 4096 bytes.  So we cannot safely +       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number +       to allow for a few compiler-allocated temporary stack slots.  */ +#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +#  endif +# else +#  define YYSTACK_ALLOC YYMALLOC +#  define YYSTACK_FREE YYFREE +#  ifndef YYSTACK_ALLOC_MAXIMUM +#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +#  endif +#  if (defined __cplusplus && ! defined EXIT_SUCCESS \ +       && ! ((defined YYMALLOC || defined malloc) \ +             && (defined YYFREE || defined free))) +#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ +#   ifndef EXIT_SUCCESS +#    define EXIT_SUCCESS 0 +#   endif +#  endif +#  ifndef YYMALLOC +#   define YYMALLOC malloc +#   if ! defined malloc && ! defined EXIT_SUCCESS +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +#   endif +#  endif +#  ifndef YYFREE +#   define YYFREE free +#   if ! defined free && ! defined EXIT_SUCCESS +void free (void *); /* INFRINGES ON USER NAME SPACE */ +#   endif +#  endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ +     && (! defined __cplusplus \ +         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member.  */ +union yyalloc +{ +  yytype_int16 yyss_alloc; +  YYSTYPE yyvs_alloc;  }; -static YYCONST short yydefred[] = {                                      3, -    0,    0,    0,    9,    0,   11,    7,    4,    8,    0, -   15,    0,    0,    0,    5,    6,    0,   13,    0,    0, -   14,    0,   10,    0,    0,    0,    0,    0,   19,    0, -   17,    0,   12,    0,   18, + +/* The size of the maximum gap between one aligned stack and the next.  */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with +   N elements.  */ +# define YYSTACK_BYTES(N) \ +     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ +      + YYSTACK_GAP_MAXIMUM) + +# define YYCOPY_NEEDED 1 + +/* Relocate STACK from its old location to the new one.  The +   local variables YYSIZE and YYSTACKSIZE give the old and new number of +   elements in the stack, and YYPTR gives the new location of the +   stack.  Advance YYPTR to a properly aligned location for the next +   stack.  */ +# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \ +    do                                                                  \ +      {                                                                 \ +        YYSIZE_T yynewbytes;                                            \ +        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \ +        Stack = &yyptr->Stack_alloc;                                    \ +        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ +        yyptr += yynewbytes / sizeof (*yyptr);                          \ +      }                                                                 \ +    while (0) + +#endif + +#if defined YYCOPY_NEEDED && YYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST.  The source and destination do +   not overlap.  */ +# ifndef YYCOPY +#  if defined __GNUC__ && 1 < __GNUC__ +#   define YYCOPY(Dst, Src, Count) \ +      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) +#  else +#   define YYCOPY(Dst, Src, Count)              \ +      do                                        \ +        {                                       \ +          YYSIZE_T yyi;                         \ +          for (yyi = 0; yyi < (Count); yyi++)   \ +            (Dst)[yyi] = (Src)[yyi];            \ +        }                                       \ +      while (0) +#  endif +# endif +#endif /* !YYCOPY_NEEDED */ + +/* YYFINAL -- State number of the termination state.  */ +#define YYFINAL  3 +/* YYLAST -- Last index in YYTABLE.  */ +#define YYLAST   35 + +/* YYNTOKENS -- Number of terminals.  */ +#define YYNTOKENS  16 +/* YYNNTS -- Number of nonterminals.  */ +#define YYNNTS  9 +/* YYNRULES -- Number of rules.  */ +#define YYNRULES  20 +/* YYNSTATES -- Number of states.  */ +#define YYNSTATES  37 + +/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned +   by yylex, with out-of-bounds checking.  */ +#define YYUNDEFTOK  2 +#define YYMAXUTOK   264 + +#define YYTRANSLATE(YYX)                                                \ +  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM +   as returned by yylex, without out-of-bounds checking.  */ +static const yytype_uint8 yytranslate[] = +{ +       0,     2,     2,     2,     2,     2,     2,     2,     2,     2, +      10,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +      13,    14,     2,     2,    15,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,    12,     2, +       2,    11,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2, +       2,     2,     2,     2,     2,     2,     1,     2,     3,     4, +       5,     6,     7,     8,     9  }; -static YYCONST short yydgoto[] = {                                       1, -   12,   30,   25,    2,   13,    8,   10, + +#if YYDEBUG +  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */ +static const yytype_uint8 yyrline[] = +{ +       0,    22,    22,    23,    26,    27,    30,    31,    35,    36, +      39,    40,    43,    44,    45,    46,    49,    52,    53,    54, +      57  }; -static YYCONST short yysindex[] = {                                      0, -    0,   -4,   -2,    0, -250,    0,    0,    0,    0,   -9, -    0,    1,  -10,  -49,    0,    0,    3,    0,  -44, -248, -    0, -244,    0,  -22, -242, -244, -245,  -37,    0,   10, -    0, -244,    0,  -20,    0, +#endif + +#if YYDEBUG || YYERROR_VERBOSE || 0 +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. +   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */ +static const char *const yytname[] = +{ +  "$end", "error", "$undefined", "TERMINAL", "START", "PPERCENT", "ID", +  "TEMPLATE", "CODE", "INT", "'\\n'", "'='", "':'", "'('", "')'", "','", +  "$accept", "spec", "decls", "decl", "blist", "rules", "nonterm", "tree", +  "cost", YY_NULLPTR  }; -static YYCONST short yyrindex[] = {                                      0, -    0,   22,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,   23,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,  -39,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0, +#endif + +# ifdef YYPRINT +/* YYTOKNUM[NUM] -- (External) token number corresponding to the +   (internal) symbol number NUM (which must be that of a token).  */ +static const yytype_uint16 yytoknum[] = +{ +       0,   256,   257,   258,   259,   260,   261,   262,   263,   264, +      10,    61,    58,    40,    41,    44  }; -static YYCONST short yygindex[] = {                                      0, -   11,    0,  -23,    0,    0,    0,    0, +# endif + +#define YYPACT_NINF -26 + +#define yypact_value_is_default(Yystate) \ +  (!!((Yystate) == (-26))) + +#define YYTABLE_NINF -4 + +#define yytable_value_is_error(Yytable_value) \ +  0 + +  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing +     STATE-NUM.  */ +static const yytype_int8 yypact[] = +{ +     -26,    11,     0,   -26,     5,   -26,     8,   -26,   -26,   -26, +     -26,     3,   -26,     7,     6,     9,   -26,   -26,    12,   -26, +      13,    14,   -26,    15,   -26,    16,    17,    15,    18,     4, +     -26,    20,   -26,    15,   -26,    19,   -26  }; -#define YYTABLESIZE 255 -static YYCONST short yytable[] = {                                      18, -   15,   16,   28,   31,   16,    7,   32,    9,   34,   11, -   16,   20,   21,   22,   23,   24,   29,   26,   27,   33, -   35,    2,    1,   19,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,   16,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, -    0,    0,    0,    0,    0,   17,    0,    0,    0,   11, -   14,    3,    4,    5,    6, + +  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. +     Performed when YYTABLE does not specify something else to do.  Zero +     means the default is an error.  */ +static const yytype_uint8 yydefact[] = +{ +       4,     0,     0,     1,     0,    10,     0,    12,     8,     5, +       9,     0,    16,     0,     0,     0,     6,     7,     0,    14, +       0,     0,    15,     0,    11,    17,     0,     0,     0,     0, +      20,     0,    18,     0,    13,     0,    19  }; -static YYCONST short yycheck[] = {                                      10, -   10,   41,   26,   41,   44,   10,   44,   10,   32,  260, -   10,   61,   10,   58,  263,  260,  262,   40,  261,   10, -   41,    0,    0,   13,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,  261,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, -   -1,   -1,   -1,   -1,   -1,  256,   -1,   -1,   -1,  260, -  260,  256,  257,  258,  259, + +  /* YYPGOTO[NTERM-NUM].  */ +static const yytype_int8 yypgoto[] = +{ +     -26,   -26,   -26,   -26,   -26,   -26,    21,   -25,   -26  }; -#define YYFINAL 1 -#ifndef YYDEBUG -#define YYDEBUG 0 -#endif -#define YYMAXTOKEN 263 -#if YYDEBUG -static YYCONST char *YYCONST yyname[] = { -"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,"'('","')'",0,0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,"':'",0,0, -"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -"TERMINAL","START","PPERCENT","ID","TEMPLATE","CODE","INT", + +  /* YYDEFGOTO[NTERM-NUM].  */ +static const yytype_int8 yydefgoto[] = +{ +      -1,     1,     2,     9,    11,    14,    13,    26,    31 +}; + +  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If +     positive, shift that token.  If negative, reduce the rule whose +     number is the opposite.  If YYTABLE_NINF, syntax error.  */ +static const yytype_int8 yytable[] = +{ +      -3,     4,    29,     5,     6,     7,    -2,    18,    35,    15, +       8,     3,    12,    16,    12,    10,    19,    17,    32,    33, +      21,    25,    22,    24,    28,    23,    30,     0,     0,    27, +      34,     0,     0,    36,     0,    20 +}; + +static const yytype_int8 yycheck[] = +{ +       0,     1,    27,     3,     4,     5,     0,     1,    33,     6, +      10,     0,     6,    10,     6,    10,    10,    10,    14,    15, +      11,     6,    10,     9,     7,    12,     8,    -1,    -1,    13, +      10,    -1,    -1,    14,    -1,    14  }; -static YYCONST char *YYCONST yyrule[] = { -"$accept : spec", -"spec : decls PPERCENT rules", -"spec : decls", -"decls :", -"decls : decls decl", -"decl : TERMINAL blist '\\n'", -"decl : START nonterm '\\n'", -"decl : '\\n'", -"decl : error '\\n'", -"blist :", -"blist : blist ID '=' INT", -"rules :", -"rules : rules nonterm ':' tree TEMPLATE cost '\\n'", -"rules : rules '\\n'", -"rules : rules error '\\n'", -"nonterm : ID", -"tree : ID", -"tree : ID '(' tree ')'", -"tree : ID '(' tree ',' tree ')'", -"cost : CODE", + +  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing +     symbol of state STATE-NUM.  */ +static const yytype_uint8 yystos[] = +{ +       0,    17,    18,     0,     1,     3,     4,     5,    10,    19, +      10,    20,     6,    22,    21,     6,    10,    10,     1,    10, +      22,    11,    10,    12,     9,     6,    23,    13,     7,    23, +       8,    24,    14,    15,    10,    23,    14  }; + +  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */ +static const yytype_uint8 yyr1[] = +{ +       0,    16,    17,    17,    18,    18,    19,    19,    19,    19, +      20,    20,    21,    21,    21,    21,    22,    23,    23,    23, +      24 +}; + +  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */ +static const yytype_uint8 yyr2[] = +{ +       0,     2,     3,     1,     0,     2,     3,     3,     1,     2, +       0,     4,     0,     7,     2,     3,     1,     1,     4,     6, +       1 +}; + + +#define yyerrok         (yyerrstatus = 0) +#define yyclearin       (yychar = YYEMPTY) +#define YYEMPTY         (-2) +#define YYEOF           0 + +#define YYACCEPT        goto yyacceptlab +#define YYABORT         goto yyabortlab +#define YYERROR         goto yyerrorlab + + +#define YYRECOVERING()  (!!yyerrstatus) + +#define YYBACKUP(Token, Value)                                  \ +do                                                              \ +  if (yychar == YYEMPTY)                                        \ +    {                                                           \ +      yychar = (Token);                                         \ +      yylval = (Value);                                         \ +      YYPOPSTACK (yylen);                                       \ +      yystate = *yyssp;                                         \ +      goto yybackup;                                            \ +    }                                                           \ +  else                                                          \ +    {                                                           \ +      yyerror (YY_("syntax error: cannot back up")); \ +      YYERROR;                                                  \ +    }                                                           \ +while (0) + +/* Error token number */ +#define YYTERROR        1 +#define YYERRCODE       256 + + + +/* Enable debugging if requested.  */ +#if YYDEBUG + +# ifndef YYFPRINTF +#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */ +#  define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args)                        \ +do {                                            \ +  if (yydebug)                                  \ +    YYFPRINTF Args;                             \ +} while (0) + +/* This macro is provided for backward compatibility. */ +#ifndef YY_LOCATION_PRINT +# define YY_LOCATION_PRINT(File, Loc) ((void) 0)  #endif -#define YYLEX yylex() -#define YYEMPTY -1 -#define yyclearin (yychar=(YYEMPTY)) -#define yyerrok (yyerrflag=0) + + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \ +do {                                                                      \ +  if (yydebug)                                                            \ +    {                                                                     \ +      YYFPRINTF (stderr, "%s ", Title);                                   \ +      yy_symbol_print (stderr,                                            \ +                  Type, Value); \ +      YYFPRINTF (stderr, "\n");                                           \ +    }                                                                     \ +} while (0) + + +/*----------------------------------------. +| Print this symbol's value on YYOUTPUT.  | +`----------------------------------------*/ + +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +{ +  FILE *yyo = yyoutput; +  YYUSE (yyo); +  if (!yyvaluep) +    return; +# ifdef YYPRINT +  if (yytype < YYNTOKENS) +    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# endif +  YYUSE (yytype); +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT.  | +`--------------------------------*/ + +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +{ +  YYFPRINTF (yyoutput, "%s %s (", +             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); + +  yy_symbol_value_print (yyoutput, yytype, yyvaluep); +  YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included).                                                   | +`------------------------------------------------------------------*/ + +static void +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +{ +  YYFPRINTF (stderr, "Stack now"); +  for (; yybottom <= yytop; yybottom++) +    { +      int yybot = *yybottom; +      YYFPRINTF (stderr, " %d", yybot); +    } +  YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top)                            \ +do {                                                            \ +  if (yydebug)                                                  \ +    yy_stack_print ((Bottom), (Top));                           \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced.  | +`------------------------------------------------*/ + +static void +yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) +{ +  unsigned long int yylno = yyrline[yyrule]; +  int yynrhs = yyr2[yyrule]; +  int yyi; +  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", +             yyrule - 1, yylno); +  /* The symbols being reduced.  */ +  for (yyi = 0; yyi < yynrhs; yyi++) +    { +      YYFPRINTF (stderr, "   $%d = ", yyi + 1); +      yy_symbol_print (stderr, +                       yystos[yyssp[yyi + 1 - yynrhs]], +                       &(yyvsp[(yyi + 1) - (yynrhs)]) +                                              ); +      YYFPRINTF (stderr, "\n"); +    } +} + +# define YY_REDUCE_PRINT(Rule)          \ +do {                                    \ +  if (yydebug)                          \ +    yy_reduce_print (yyssp, yyvsp, Rule); \ +} while (0) + +/* Nonzero means print parse trace.  It is left uninitialized so that +   multiple parsers can coexist.  */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks.  */  #ifndef YYINITDEPTH -#define YYINITDEPTH 200 +# define YYINITDEPTH 200  #endif -#ifdef YYSTACKSIZE + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only +   if the built-in stack extension method is used). + +   Do not make this value too large; the results are undefined if +   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) +   evaluated with infinite-precision integer arithmetic.  */ +  #ifndef YYMAXDEPTH -#define YYMAXDEPTH YYSTACKSIZE -#endif -#else -#ifdef YYMAXDEPTH -#define YYSTACKSIZE YYMAXDEPTH -#else -#define YYSTACKSIZE 500 -#define YYMAXDEPTH 500 -#endif +# define YYMAXDEPTH 10000  #endif -#ifndef YYMAXSTACKSIZE -#define YYMAXSTACKSIZE 10000 -#endif -int yydebug; -int yynerrs; -int yyerrflag; -int yychar; -YYSTYPE yyval; -YYSTYPE yylval; -static short *yyss; -static YYSTYPE *yyvs; -static int yystacksize; -#define yyfree(x) free(x) -extern int yylex(); - -static YYPTR -YYDEFUN (yymalloc, (bytes), unsigned bytes) + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +#  if defined __GLIBC__ && defined _STRING_H +#   define yystrlen strlen +#  else +/* Return the length of YYSTR.  */ +static YYSIZE_T +yystrlen (const char *yystr)  { -    YYPTR ptr = (YYPTR) malloc (bytes); -    if (ptr != 0) return (ptr); -    yyerror ("yyparse: memory exhausted"); -    return (0); +  YYSIZE_T yylen; +  for (yylen = 0; yystr[yylen]; yylen++) +    continue; +  return yylen;  } +#  endif +# endif -static YYPTR -YYDEFUN (yyrealloc, (old, bytes), YYPTR old YYAND unsigned bytes) +# ifndef yystpcpy +#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +#   define yystpcpy stpcpy +#  else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in +   YYDEST.  */ +static char * +yystpcpy (char *yydest, const char *yysrc)  { -    YYPTR ptr = (YYPTR) realloc (old, bytes); -    if (ptr != 0) return (ptr); -    yyerror ("yyparse: memory exhausted"); -    return (0); +  char *yyd = yydest; +  const char *yys = yysrc; + +  while ((*yyd++ = *yys++) != '\0') +    continue; + +  return yyd - 1;  } +#  endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary +   quotes and backslashes, so that it's suitable for yyerror.  The +   heuristic is that double-quoting is unnecessary unless the string +   contains an apostrophe, a comma, or backslash (other than +   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is +   null, do not copy; instead, return the length of what the result +   would have been.  */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ +  if (*yystr == '"') +    { +      YYSIZE_T yyn = 0; +      char const *yyp = yystr; + +      for (;;) +        switch (*++yyp) +          { +          case '\'': +          case ',': +            goto do_not_strip_quotes; + +          case '\\': +            if (*++yyp != '\\') +              goto do_not_strip_quotes; +            /* Fall through.  */ +          default: +            if (yyres) +              yyres[yyn] = *yyp; +            yyn++; +            break; +          case '"': +            if (yyres) +              yyres[yyn] = '\0'; +            return yyn; +          } +    do_not_strip_quotes: ; +    } + +  if (! yyres) +    return yystrlen (yystr); + +  return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message +   about the unexpected token YYTOKEN for the state stack whose top is +   YYSSP. + +   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is +   not large enough to hold the message.  In that case, also set +   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the +   required number of bytes is too large to store.  */  static int -#ifdef __GNUC__ -inline -#endif -yygrow () +yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, +                yytype_int16 *yyssp, int yytoken)  { -#if YYDEBUG -    int old_stacksize = yystacksize; +  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); +  YYSIZE_T yysize = yysize0; +  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; +  /* Internationalized format string. */ +  const char *yyformat = YY_NULLPTR; +  /* Arguments of yyformat. */ +  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; +  /* Number of reported tokens (one for the "unexpected", one per +     "expected"). */ +  int yycount = 0; + +  /* There are many possibilities here to consider: +     - If this state is a consistent state with a default action, then +       the only way this function was invoked is if the default action +       is an error action.  In that case, don't check for expected +       tokens because there are none. +     - The only way there can be no lookahead present (in yychar) is if +       this state is a consistent state with a default action.  Thus, +       detecting the absence of a lookahead is sufficient to determine +       that there is no unexpected or expected token to report.  In that +       case, just report a simple "syntax error". +     - Don't assume there isn't a lookahead just because this state is a +       consistent state with a default action.  There might have been a +       previous inconsistent state, consistent state with a non-default +       action, or user semantic action that manipulated yychar. +     - Of course, the expected token list depends on states to have +       correct lookahead information, and it depends on the parser not +       to perform extra reductions after fetching a lookahead from the +       scanner and before detecting a syntax error.  Thus, state merging +       (from LALR or IELR) and default reductions corrupt the expected +       token list.  However, the list is correct for canonical LR with +       one exception: it will still contain any token that will not be +       accepted due to an error action in a later state. +  */ +  if (yytoken != YYEMPTY) +    { +      int yyn = yypact[*yyssp]; +      yyarg[yycount++] = yytname[yytoken]; +      if (!yypact_value_is_default (yyn)) +        { +          /* Start YYX at -YYN if negative to avoid negative indexes in +             YYCHECK.  In other words, skip the first -YYN actions for +             this state because they are default actions.  */ +          int yyxbegin = yyn < 0 ? -yyn : 0; +          /* Stay within bounds of both yycheck and yytname.  */ +          int yychecklim = YYLAST - yyn + 1; +          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; +          int yyx; + +          for (yyx = yyxbegin; yyx < yyxend; ++yyx) +            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR +                && !yytable_value_is_error (yytable[yyx + yyn])) +              { +                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) +                  { +                    yycount = 1; +                    yysize = yysize0; +                    break; +                  } +                yyarg[yycount++] = yytname[yyx]; +                { +                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); +                  if (! (yysize <= yysize1 +                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) +                    return 2; +                  yysize = yysize1; +                } +              } +        } +    } + +  switch (yycount) +    { +# define YYCASE_(N, S)                      \ +      case N:                               \ +        yyformat = S;                       \ +      break +      YYCASE_(0, YY_("syntax error")); +      YYCASE_(1, YY_("syntax error, unexpected %s")); +      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); +      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); +      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); +      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +# undef YYCASE_ +    } + +  { +    YYSIZE_T yysize1 = yysize + yystrlen (yyformat); +    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) +      return 2; +    yysize = yysize1; +  } + +  if (*yymsg_alloc < yysize) +    { +      *yymsg_alloc = 2 * yysize; +      if (! (yysize <= *yymsg_alloc +             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) +        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; +      return 1; +    } + +  /* Avoid sprintf, as that infringes on the user's name space. +     Don't have undefined behavior even if the translation +     produced a string with the wrong number of "%s"s.  */ +  { +    char *yyp = *yymsg; +    int yyi = 0; +    while ((*yyp = *yyformat) != '\0') +      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) +        { +          yyp += yytnamerr (yyp, yyarg[yyi++]); +          yyformat += 2; +        } +      else +        { +          yyp++; +          yyformat++; +        } +  } +  return 0; +} +#endif /* YYERROR_VERBOSE */ + +/*-----------------------------------------------. +| Release the memory associated to this symbol.  | +`-----------------------------------------------*/ + +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +{ +  YYUSE (yyvaluep); +  if (!yymsg) +    yymsg = "Deleting"; +  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + +  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +  YYUSE (yytype); +  YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + + + +/* The lookahead symbol.  */ +int yychar; + +/* The semantic value of the lookahead symbol.  */ +YYSTYPE yylval; +/* Number of syntax errors so far.  */ +int yynerrs; + + +/*----------. +| yyparse.  | +`----------*/ + +int +yyparse (void) +{ +    int yystate; +    /* Number of tokens to shift before error messages enabled.  */ +    int yyerrstatus; + +    /* The stacks and their tools: +       'yyss': related to states. +       'yyvs': related to semantic values. + +       Refer to the stacks through separate pointers, to allow yyoverflow +       to reallocate them elsewhere.  */ + +    /* The state stack.  */ +    yytype_int16 yyssa[YYINITDEPTH]; +    yytype_int16 *yyss; +    yytype_int16 *yyssp; + +    /* The semantic value stack.  */ +    YYSTYPE yyvsa[YYINITDEPTH]; +    YYSTYPE *yyvs; +    YYSTYPE *yyvsp; + +    YYSIZE_T yystacksize; + +  int yyn; +  int yyresult; +  /* Lookahead token as an internal (translated) token number.  */ +  int yytoken = 0; +  /* The variables used to return semantic value and location from the +     action routines.  */ +  YYSTYPE yyval; + +#if YYERROR_VERBOSE +  /* Buffer for error messages, and its allocated size.  */ +  char yymsgbuf[128]; +  char *yymsg = yymsgbuf; +  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;  #endif -    short *new_yyss; -    YYSTYPE *new_yyvs; - -    if (yystacksize == YYMAXSTACKSIZE) -        return (1); -    yystacksize += (yystacksize + 1 ) / 2; -    if (yystacksize > YYMAXSTACKSIZE) -        yystacksize = YYMAXSTACKSIZE; -#if YYDEBUG -    if (yydebug) -        printf("yydebug: growing stack size from %d to %d\n", -               old_stacksize, yystacksize); + +#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N)) + +  /* The number of symbols on the RHS of the reduced rule. +     Keep to zero when no symbol should be popped.  */ +  int yylen = 0; + +  yyssp = yyss = yyssa; +  yyvsp = yyvs = yyvsa; +  yystacksize = YYINITDEPTH; + +  YYDPRINTF ((stderr, "Starting parse\n")); + +  yystate = 0; +  yyerrstatus = 0; +  yynerrs = 0; +  yychar = YYEMPTY; /* Cause a token to be read.  */ +  goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate.  | +`------------------------------------------------------------*/ + yynewstate: +  /* In all cases, when you get here, the value and location stacks +     have just been pushed.  So pushing a state here evens the stacks.  */ +  yyssp++; + + yysetstate: +  *yyssp = yystate; + +  if (yyss + yystacksize - 1 <= yyssp) +    { +      /* Get the current used size of the three stacks, in elements.  */ +      YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow +      { +        /* Give user a chance to reallocate the stack.  Use copies of +           these so that the &'s don't force the real ones into +           memory.  */ +        YYSTYPE *yyvs1 = yyvs; +        yytype_int16 *yyss1 = yyss; + +        /* Each stack pointer address is followed by the size of the +           data in use in that stack, in bytes.  This used to be a +           conditional around just the two extra args, but that might +           be undefined if yyoverflow is a macro.  */ +        yyoverflow (YY_("memory exhausted"), +                    &yyss1, yysize * sizeof (*yyssp), +                    &yyvs1, yysize * sizeof (*yyvsp), +                    &yystacksize); + +        yyss = yyss1; +        yyvs = yyvs1; +      } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE +      goto yyexhaustedlab; +# else +      /* Extend the stack our own way.  */ +      if (YYMAXDEPTH <= yystacksize) +        goto yyexhaustedlab; +      yystacksize *= 2; +      if (YYMAXDEPTH < yystacksize) +        yystacksize = YYMAXDEPTH; + +      { +        yytype_int16 *yyss1 = yyss; +        union yyalloc *yyptr = +          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); +        if (! yyptr) +          goto yyexhaustedlab; +        YYSTACK_RELOCATE (yyss_alloc, yyss); +        YYSTACK_RELOCATE (yyvs_alloc, yyvs); +#  undef YYSTACK_RELOCATE +        if (yyss1 != yyssa) +          YYSTACK_FREE (yyss1); +      } +# endif +#endif /* no yyoverflow */ + +      yyssp = yyss + yysize - 1; +      yyvsp = yyvs + yysize - 1; + +      YYDPRINTF ((stderr, "Stack size increased to %lu\n", +                  (unsigned long int) yystacksize)); + +      if (yyss + yystacksize - 1 <= yyssp) +        YYABORT; +    } + +  YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + +  if (yystate == YYFINAL) +    YYACCEPT; + +  goto yybackup; + +/*-----------. +| yybackup.  | +`-----------*/ +yybackup: + +  /* Do appropriate processing given the current state.  Read a +     lookahead token if we need one and don't already have one.  */ + +  /* First try to decide what to do without reference to lookahead token.  */ +  yyn = yypact[yystate]; +  if (yypact_value_is_default (yyn)) +    goto yydefault; + +  /* Not known => get a lookahead token if don't already have one.  */ + +  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */ +  if (yychar == YYEMPTY) +    { +      YYDPRINTF ((stderr, "Reading a token: ")); +      yychar = yylex (); +    } + +  if (yychar <= YYEOF) +    { +      yychar = yytoken = YYEOF; +      YYDPRINTF ((stderr, "Now at end of input.\n")); +    } +  else +    { +      yytoken = YYTRANSLATE (yychar); +      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); +    } + +  /* If the proper action on seeing token YYTOKEN is to reduce or to +     detect an error, take that action.  */ +  yyn += yytoken; +  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) +    goto yydefault; +  yyn = yytable[yyn]; +  if (yyn <= 0) +    { +      if (yytable_value_is_error (yyn)) +        goto yyerrlab; +      yyn = -yyn; +      goto yyreduce; +    } + +  /* Count tokens shifted since error; after three, turn off error +     status.  */ +  if (yyerrstatus) +    yyerrstatus--; + +  /* Shift the lookahead token.  */ +  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + +  /* Discard the shifted token.  */ +  yychar = YYEMPTY; + +  yystate = yyn; +  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +  *++yyvsp = yylval; +  YY_IGNORE_MAYBE_UNINITIALIZED_END + +  goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state.  | +`-----------------------------------------------------------*/ +yydefault: +  yyn = yydefact[yystate]; +  if (yyn == 0) +    goto yyerrlab; +  goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction.  | +`-----------------------------*/ +yyreduce: +  /* yyn is the number of a rule to reduce with.  */ +  yylen = yyr2[yyn]; + +  /* If YYLEN is nonzero, implement the default value of the action: +     '$$ = $1'. + +     Otherwise, the following line sets YYVAL to garbage. +     This behavior is undocumented and Bison +     users should not rely upon it.  Assigning to YYVAL +     unconditionally makes the parser a bit smaller, and it avoids a +     GCC warning that YYVAL may be used uninitialized.  */ +  yyval = yyvsp[1-yylen]; + + +  YY_REDUCE_PRINT (yyn); +  switch (yyn) +    { +        case 2: +#line 22 "src/tools/lcc/lburg/gram.y" /* yacc.c:1646  */ +    { yylineno = 0; } +#line 1242 "y.tab.c" /* yacc.c:1646  */ +    break; + +  case 3: +#line 23 "src/tools/lcc/lburg/gram.y" /* yacc.c:1646  */ +    { yylineno = 0; } +#line 1248 "y.tab.c" /* yacc.c:1646  */ +    break; + +  case 7: +#line 31 "src/tools/lcc/lburg/gram.y" /* yacc.c:1646  */ +    { +		if (nonterm((yyvsp[-1].string))->number != 1) +			yyerror("redeclaration of the start symbol\n"); +		} +#line 1257 "y.tab.c" /* yacc.c:1646  */ +    break; + +  case 9: +#line 36 "src/tools/lcc/lburg/gram.y" /* yacc.c:1646  */ +    { yyerrok; } +#line 1263 "y.tab.c" /* yacc.c:1646  */ +    break; + +  case 11: +#line 40 "src/tools/lcc/lburg/gram.y" /* yacc.c:1646  */ +    { term((yyvsp[-2].string), (yyvsp[0].n)); } +#line 1269 "y.tab.c" /* yacc.c:1646  */ +    break; + +  case 13: +#line 44 "src/tools/lcc/lburg/gram.y" /* yacc.c:1646  */ +    { rule((yyvsp[-5].string), (yyvsp[-3].tree), (yyvsp[-2].string), (yyvsp[-1].string)); } +#line 1275 "y.tab.c" /* yacc.c:1646  */ +    break; + +  case 15: +#line 46 "src/tools/lcc/lburg/gram.y" /* yacc.c:1646  */ +    { yyerrok; } +#line 1281 "y.tab.c" /* yacc.c:1646  */ +    break; + +  case 16: +#line 49 "src/tools/lcc/lburg/gram.y" /* yacc.c:1646  */ +    { nonterm((yyval.string) = (yyvsp[0].string)); } +#line 1287 "y.tab.c" /* yacc.c:1646  */ +    break; + +  case 17: +#line 52 "src/tools/lcc/lburg/gram.y" /* yacc.c:1646  */ +    { (yyval.tree) = tree((yyvsp[0].string),  0,  0); } +#line 1293 "y.tab.c" /* yacc.c:1646  */ +    break; + +  case 18: +#line 53 "src/tools/lcc/lburg/gram.y" /* yacc.c:1646  */ +    { (yyval.tree) = tree((yyvsp[-3].string), (yyvsp[-1].tree),  0); } +#line 1299 "y.tab.c" /* yacc.c:1646  */ +    break; + +  case 19: +#line 54 "src/tools/lcc/lburg/gram.y" /* yacc.c:1646  */ +    { (yyval.tree) = tree((yyvsp[-5].string), (yyvsp[-3].tree), (yyvsp[-1].tree)); } +#line 1305 "y.tab.c" /* yacc.c:1646  */ +    break; + +  case 20: +#line 57 "src/tools/lcc/lburg/gram.y" /* yacc.c:1646  */ +    { if (*(yyvsp[0].string) == 0) (yyval.string) = "0"; } +#line 1311 "y.tab.c" /* yacc.c:1646  */ +    break; + + +#line 1315 "y.tab.c" /* yacc.c:1646  */ +      default: break; +    } +  /* User semantic actions sometimes alter yychar, and that requires +     that yytoken be updated with the new translation.  We take the +     approach of translating immediately before every use of yytoken. +     One alternative is translating here after every semantic action, +     but that translation would be missed if the semantic action invokes +     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or +     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an +     incorrect destructor might then be invoked immediately.  In the +     case of YYERROR or YYBACKUP, subsequent parser actions might lead +     to an incorrect destructor call or verbose syntax error message +     before the lookahead is translated.  */ +  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + +  YYPOPSTACK (yylen); +  yylen = 0; +  YY_STACK_PRINT (yyss, yyssp); + +  *++yyvsp = yyval; + +  /* Now 'shift' the result of the reduction.  Determine what state +     that goes to, based on the state we popped back to and the rule +     number reduced by.  */ + +  yyn = yyr1[yyn]; + +  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; +  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) +    yystate = yytable[yystate]; +  else +    yystate = yydefgoto[yyn - YYNTOKENS]; + +  goto yynewstate; + + +/*--------------------------------------. +| yyerrlab -- here on detecting error.  | +`--------------------------------------*/ +yyerrlab: +  /* Make sure we have latest lookahead translation.  See comments at +     user semantic actions for why this is necessary.  */ +  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); + +  /* If not already recovering from an error, report this error.  */ +  if (!yyerrstatus) +    { +      ++yynerrs; +#if ! YYERROR_VERBOSE +      yyerror (YY_("syntax error")); +#else +# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ +                                        yyssp, yytoken) +      { +        char const *yymsgp = YY_("syntax error"); +        int yysyntax_error_status; +        yysyntax_error_status = YYSYNTAX_ERROR; +        if (yysyntax_error_status == 0) +          yymsgp = yymsg; +        else if (yysyntax_error_status == 1) +          { +            if (yymsg != yymsgbuf) +              YYSTACK_FREE (yymsg); +            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); +            if (!yymsg) +              { +                yymsg = yymsgbuf; +                yymsg_alloc = sizeof yymsgbuf; +                yysyntax_error_status = 2; +              } +            else +              { +                yysyntax_error_status = YYSYNTAX_ERROR; +                yymsgp = yymsg; +              } +          } +        yyerror (yymsgp); +        if (yysyntax_error_status == 2) +          goto yyexhaustedlab; +      } +# undef YYSYNTAX_ERROR +#endif +    } + + + +  if (yyerrstatus == 3) +    { +      /* If just tried and failed to reuse lookahead token after an +         error, discard it.  */ + +      if (yychar <= YYEOF) +        { +          /* Return failure if at end of input.  */ +          if (yychar == YYEOF) +            YYABORT; +        } +      else +        { +          yydestruct ("Error: discarding", +                      yytoken, &yylval); +          yychar = YYEMPTY; +        } +    } + +  /* Else will try to reuse lookahead token after shifting the error +     token.  */ +  goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR.  | +`---------------------------------------------------*/ +yyerrorlab: + +  /* Pacify compilers like GCC when the user code never invokes +     YYERROR and the label yyerrorlab therefore never appears in user +     code.  */ +  if (/*CONSTCOND*/ 0) +     goto yyerrorlab; + +  /* Do not reclaim the symbols of the rule whose action triggered +     this YYERROR.  */ +  YYPOPSTACK (yylen); +  yylen = 0; +  YY_STACK_PRINT (yyss, yyssp); +  yystate = *yyssp; +  goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR.  | +`-------------------------------------------------------------*/ +yyerrlab1: +  yyerrstatus = 3;      /* Each real token shifted decrements this.  */ + +  for (;;) +    { +      yyn = yypact[yystate]; +      if (!yypact_value_is_default (yyn)) +        { +          yyn += YYTERROR; +          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) +            { +              yyn = yytable[yyn]; +              if (0 < yyn) +                break; +            } +        } + +      /* Pop the current state because it cannot handle the error token.  */ +      if (yyssp == yyss) +        YYABORT; + + +      yydestruct ("Error: popping", +                  yystos[yystate], yyvsp); +      YYPOPSTACK (1); +      yystate = *yyssp; +      YY_STACK_PRINT (yyss, yyssp); +    } + +  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +  *++yyvsp = yylval; +  YY_IGNORE_MAYBE_UNINITIALIZED_END + + +  /* Shift the error token.  */ +  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + +  yystate = yyn; +  goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here.  | +`-------------------------------------*/ +yyacceptlab: +  yyresult = 0; +  goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here.  | +`-----------------------------------*/ +yyabortlab: +  yyresult = 1; +  goto yyreturn; + +#if !defined yyoverflow || YYERROR_VERBOSE +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here.  | +`-------------------------------------------------*/ +yyexhaustedlab: +  yyerror (YY_("memory exhausted")); +  yyresult = 2; +  /* Fall through.  */  #endif -    new_yyss = (short *) yyrealloc ((char *)yyss, yystacksize * sizeof (short)); -    if (new_yyss == 0) -        return (1); -    new_yyvs = (YYSTYPE *) yyrealloc ((char *)yyvs, yystacksize * sizeof (YYSTYPE)); -    if (new_yyvs == 0) + +yyreturn: +  if (yychar != YYEMPTY)      { -        yyfree (new_yyss); -        return (1); +      /* Make sure we have latest lookahead translation.  See comments at +         user semantic actions for why this is necessary.  */ +      yytoken = YYTRANSLATE (yychar); +      yydestruct ("Cleanup: discarding lookahead", +                  yytoken, &yylval);      } -    yyss = new_yyss; -    yyvs = new_yyvs; -    return (0); +  /* Do not reclaim the symbols of the rule whose action triggered +     this YYABORT or YYACCEPT.  */ +  YYPOPSTACK (yylen); +  YY_STACK_PRINT (yyss, yyssp); +  while (yyssp != yyss) +    { +      yydestruct ("Cleanup: popping", +                  yystos[*yyssp], yyvsp); +      YYPOPSTACK (1); +    } +#ifndef yyoverflow +  if (yyss != yyssa) +    YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE +  if (yymsg != yymsgbuf) +    YYSTACK_FREE (yymsg); +#endif +  return yyresult;  } -#line 60 "lburg/gram.y" +#line 59 "src/tools/lcc/lburg/gram.y" /* yacc.c:1906  */ +  #include <assert.h>  #include <stdarg.h>  #include <ctype.h> @@ -395,283 +1684,3 @@ void yywarn(char *fmt, ...) {  	fprintf(stderr, "warning: ");  	vfprintf(stderr, fmt, ap);  } -#line 403 "y.tab.c" -#define YYABORT goto yyabort -#define YYACCEPT goto yyaccept -#define YYERROR goto yyerrlab - -#if YYDEBUG -#ifdef __cplusplus -extern "C" char *getenv(); -#else -extern char *getenv(); -#endif -#endif - -int -yyparse() -{ -    register int yym, yyn, yystate; -    register YYSTYPE *yyvsp; -    register short *yyssp; -    short *yysse; -#if YYDEBUG -    register YYCONST char *yys; - -    if (yys = getenv("YYDEBUG")) -    { -        yyn = *yys; -        if (yyn >= '0' && yyn <= '9') -            yydebug = yyn - '0'; -    } -#endif - -    yynerrs = 0; -    yyerrflag = 0; -    yychar = (-1); - -    if (yyss == 0) -    { -        yyss = (short *) yymalloc (YYSTACKSIZE * sizeof (short)); -        if (yyss == 0) -          goto yyabort; -        yyvs = (YYSTYPE *) yymalloc (YYSTACKSIZE * sizeof (YYSTYPE)); -        if (yyvs == 0) -        { -            yyfree (yyss); -            goto yyabort; -        } -        yystacksize = YYSTACKSIZE; -    } -    yysse = yyss + yystacksize - 1; -    yyssp = yyss; -    yyvsp = yyvs; -    *yyssp = yystate = 0; -    goto yyloop; - -yypush_lex: -    yyval = yylval; -    yystate = yytable[yyn]; -yypush: -    if (yyssp >= yysse) -    { -        int depth = yyssp - yyss; -        if (yygrow() != 0) -             goto yyoverflow; -        yysse = yyss + yystacksize -1; -        yyssp = depth + yyss; -        yyvsp = depth + yyvs; -    } -    *++yyssp = yystate; -    *++yyvsp = yyval; - -yyloop: -    if ((yyn = yydefred[yystate])) goto yyreduce; -    yyn = yysindex[yystate]; -    if (yychar < 0) -    { -        if ((yychar = yylex()) < 0) yychar = 0; -#if YYDEBUG -        if (yydebug) -        { -            yys = 0; -            if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; -            if (!yys) yys = "illegal-symbol"; -            printf("yydebug: state %d, reading %d (%s)\n", yystate, -                    yychar, yys); -        } -#endif -    } -    if (yyn != 0 -        && ((yyn += yychar), ((unsigned)yyn <= (unsigned)YYTABLESIZE)) -        && yycheck[yyn] == yychar) -    { -#if YYDEBUG -        if (yydebug) -            printf("yydebug: state %d, shifting to state %d\n", -                    yystate, yytable[yyn]); -#endif -        if (yyerrflag > 0)  --yyerrflag; -        yychar = (-1); -        goto yypush_lex; -    } -    yyn = yyrindex[yystate]; -    if (yyn != 0 -        && ((yyn += yychar), ((unsigned)yyn <= (unsigned)YYTABLESIZE)) -        && yycheck[yyn] == yychar) -    { -        yyn = yytable[yyn]; -        goto yyreduce; -    } -    if (yyerrflag) goto yyinrecovery; -#ifdef lint -    goto yynewerror; -yynewerror: -#endif -    yyerror("syntax error"); -#ifdef lint -    goto yyerrlab; -yyerrlab: -#endif -    ++yynerrs; -yyinrecovery: -    if (yyerrflag < 3) -    { -        yyerrflag = 3; -        for (;;) -        { -            yyn = yysindex[*yyssp]; -            if (yyn != 0 -                && ((yyn += YYERRCODE), ((unsigned)yyn <= (unsigned)YYTABLESIZE)) -                && yycheck[yyn] == YYERRCODE) -            { -#if YYDEBUG -                if (yydebug) -                    printf("yydebug: state %d, error recovery shifting\ - to state %d\n", *yyssp, yytable[yyn]); -#endif -                goto yypush_lex; -            } -            else -            { -#if YYDEBUG -                if (yydebug) -                    printf("yydebug: error recovery discarding state %d\n", -                            *yyssp); -#endif -                if (yyssp <= yyss) goto yyabort; -                --yyssp; -                --yyvsp; -            } -        } -    } -    else -    { -        if (yychar == 0) goto yyabort; -#if YYDEBUG -        if (yydebug) -        { -            yys = 0; -            if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; -            if (!yys) yys = "illegal-symbol"; -            printf("yydebug: state %d, error recovery discards token %d (%s)\n", -                    yystate, yychar, yys); -        } -#endif -        yychar = (-1); -        goto yyloop; -    } -yyreduce: -#if YYDEBUG -    if (yydebug) -        printf("yydebug: state %d, reducing by rule %d (%s)\n", -                yystate, yyn, yyrule[yyn]); -#endif -    yym = yylen[yyn]; -    yyval = yyvsp[1-yym]; -    switch (yyn) -    { -case 1: -#line 22 "lburg/gram.y" -{ yylineno = 0; } -break; -case 2: -#line 23 "lburg/gram.y" -{ yylineno = 0; } -break; -case 6: -#line 31 "lburg/gram.y" -{ -		if (nonterm(yyvsp[-1].string)->number != 1) -			yyerror("redeclaration of the start symbol\n"); -		} -break; -case 8: -#line 36 "lburg/gram.y" -{ yyerrok; } -break; -case 10: -#line 40 "lburg/gram.y" -{ term(yyvsp[-2].string, yyvsp[0].n); } -break; -case 12: -#line 44 "lburg/gram.y" -{ rule(yyvsp[-5].string, yyvsp[-3].tree, yyvsp[-2].string, yyvsp[-1].string); } -break; -case 14: -#line 46 "lburg/gram.y" -{ yyerrok; } -break; -case 15: -#line 49 "lburg/gram.y" -{ nonterm(yyval.string = yyvsp[0].string); } -break; -case 16: -#line 52 "lburg/gram.y" -{ yyval.tree = tree(yyvsp[0].string,  0,  0); } -break; -case 17: -#line 53 "lburg/gram.y" -{ yyval.tree = tree(yyvsp[-3].string, yyvsp[-1].tree,  0); } -break; -case 18: -#line 54 "lburg/gram.y" -{ yyval.tree = tree(yyvsp[-5].string, yyvsp[-3].tree, yyvsp[-1].tree); } -break; -case 19: -#line 57 "lburg/gram.y" -{ if (*yyvsp[0].string == 0) yyval.string = "0"; } -break; -#line 630 "y.tab.c" -    } -    yyssp -= yym; -    yyvsp -= yym; -    yym = yylhs[yyn]; -    yystate = *yyssp; -    if (yystate == 0 && yym == 0) -    { -#if YYDEBUG -        if (yydebug) -            printf("yydebug: after reduction, shifting from state 0 to\ - state %d\n", YYFINAL); -#endif -        yystate = YYFINAL; -        *++yyssp = YYFINAL; -        *++yyvsp = yyval; -        if (yychar < 0) -        { -            if ((yychar = yylex()) < 0) yychar = 0; -#if YYDEBUG -            if (yydebug) -            { -                yys = 0; -                if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; -                if (!yys) yys = "illegal-symbol"; -                printf("yydebug: state %d, reading %d (%s)\n", -                        YYFINAL, yychar, yys); -            } -#endif -        } -        if (yychar == 0) goto yyaccept; -        goto yyloop; -    } -    yyn = yygindex[yym]; -	 if (yyn != 0 -        && ((yyn += yystate), ((unsigned)yyn <= (unsigned)YYTABLESIZE)) -        && yycheck[yyn] == yystate) -        yystate = yytable[yyn]; -    else -        yystate = yydgoto[yym]; -#if YYDEBUG -    if (yydebug) -        printf("yydebug: after reduction, shifting from state %d \ -to state %d\n", *yyssp, yystate); -#endif -    goto yypush; -yyoverflow: -    yyerror("yacc stack overflow"); -yyabort: -    return (1); -yyaccept: -    return (0); -}  | 
