Home | History | Annotate | Download | only in preprocessor
      1 /* A Bison parser, made by GNU Bison 2.7.1.  */
      2 
      3 /* Bison implementation for Yacc-like parsers in C
      4 
      5       Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
      6 
      7    This program is free software: you can redistribute it and/or modify
      8    it under the terms of the GNU General Public License as published by
      9    the Free Software Foundation, either version 3 of the License, or
     10    (at your option) any later version.
     11 
     12    This program is distributed in the hope that it will be useful,
     13    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15    GNU General Public License for more details.
     16 
     17    You should have received a copy of the GNU General Public License
     18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19 
     20 /* As a special exception, you may create a larger work that contains
     21    part or all of the Bison parser skeleton and distribute that work
     22    under terms of your choice, so long as that work isn't itself a
     23    parser generator using the skeleton or a modified version thereof
     24    as a parser skeleton.  Alternatively, if you modify or redistribute
     25    the parser skeleton itself, you may (at your option) remove this
     26    special exception, which will cause the skeleton and the resulting
     27    Bison output files to be licensed under the GNU General Public
     28    License without this special exception.
     29 
     30    This special exception was added by the Free Software Foundation in
     31    version 2.2 of Bison.  */
     32 
     33 /* C LALR(1) parser skeleton written by Richard Stallman, by
     34    simplifying the original so-called "semantic" parser.  */
     35 
     36 /* All symbols defined below should begin with yy or YY, to avoid
     37    infringing on user name space.  This should be done even for local
     38    variables, as they might otherwise be expanded by user macros.
     39    There are some unavoidable exceptions within include files to
     40    define necessary library symbols; they are noted "INFRINGES ON
     41    USER NAME SPACE" below.  */
     42 
     43 /* Identify Bison output.  */
     44 #define YYBISON 1
     45 
     46 /* Bison version.  */
     47 #define YYBISON_VERSION "2.7.1"
     48 
     49 /* Skeleton name.  */
     50 #define YYSKELETON_NAME "yacc.c"
     51 
     52 /* Pure parsers.  */
     53 #define YYPURE 1
     54 
     55 /* Push parsers.  */
     56 #define YYPUSH 0
     57 
     58 /* Pull parsers.  */
     59 #define YYPULL 1
     60 
     61 
     62 /* Substitute the variable and function names.  */
     63 #define yyparse         ppparse
     64 #define yylex           pplex
     65 #define yyerror         pperror
     66 #define yylval          pplval
     67 #define yychar          ppchar
     68 #define yydebug         ppdebug
     69 #define yynerrs         ppnerrs
     70 
     71 /* Copy the first part of user declarations.  */
     72 
     73 
     74 //
     75 // Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
     76 // Use of this source code is governed by a BSD-style license that can be
     77 // found in the LICENSE file.
     78 //
     79 
     80 // This file is auto-generated by generate_parser.sh. DO NOT EDIT!
     81 
     82 #if defined(__GNUC__)
     83 // Triggered by the auto-generated pplval variable.
     84 #if !defined(__clang__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7))
     85 #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
     86 #else
     87 #pragma GCC diagnostic ignored "-Wuninitialized"
     88 #endif
     89 #elif defined(_MSC_VER)
     90 #pragma warning(disable: 4065 4701)
     91 #endif
     92 
     93 #include "ExpressionParser.h"
     94 
     95 #if defined(_MSC_VER)
     96 #include <malloc.h>
     97 #else
     98 #include <stdlib.h>
     99 #endif
    100 
    101 #include <cassert>
    102 #include <sstream>
    103 
    104 #include "DiagnosticsBase.h"
    105 #include "Lexer.h"
    106 #include "Token.h"
    107 
    108 #if defined(_MSC_VER)
    109 typedef __int64 YYSTYPE;
    110 #else
    111 #include <stdint.h>
    112 typedef intmax_t YYSTYPE;
    113 #endif  // _MSC_VER
    114 #define YYENABLE_NLS 0
    115 #define YYLTYPE_IS_TRIVIAL 1
    116 #define YYSTYPE_IS_TRIVIAL 1
    117 #define YYSTYPE_IS_DECLARED 1
    118 
    119 namespace {
    120 struct Context
    121 {
    122     pp::Diagnostics* diagnostics;
    123     pp::Lexer* lexer;
    124     pp::Token* token;
    125     int* result;
    126 };
    127 }  // namespace
    128 
    129 
    130 static int yylex(YYSTYPE* lvalp, Context* context);
    131 static void yyerror(Context* context, const char* reason);
    132 
    133 
    134 
    135 # ifndef YY_NULL
    136 #  if defined __cplusplus && 201103L <= __cplusplus
    137 #   define YY_NULL nullptr
    138 #  else
    139 #   define YY_NULL 0
    140 #  endif
    141 # endif
    142 
    143 /* Enabling verbose error messages.  */
    144 #ifdef YYERROR_VERBOSE
    145 # undef YYERROR_VERBOSE
    146 # define YYERROR_VERBOSE 1
    147 #else
    148 # define YYERROR_VERBOSE 0
    149 #endif
    150 
    151 
    152 /* Enabling traces.  */
    153 #ifndef YYDEBUG
    154 # define YYDEBUG 0
    155 #endif
    156 #if YYDEBUG
    157 extern int ppdebug;
    158 #endif
    159 
    160 /* Tokens.  */
    161 #ifndef YYTOKENTYPE
    162 # define YYTOKENTYPE
    163    /* Put the tokens into the symbol table, so that GDB and other debuggers
    164       know about them.  */
    165    enum yytokentype {
    166      TOK_CONST_INT = 258,
    167      TOK_OP_OR = 259,
    168      TOK_OP_AND = 260,
    169      TOK_OP_NE = 261,
    170      TOK_OP_EQ = 262,
    171      TOK_OP_GE = 263,
    172      TOK_OP_LE = 264,
    173      TOK_OP_RIGHT = 265,
    174      TOK_OP_LEFT = 266,
    175      TOK_UNARY = 267
    176    };
    177 #endif
    178 
    179 
    180 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
    181 typedef int YYSTYPE;
    182 # define YYSTYPE_IS_TRIVIAL 1
    183 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
    184 # define YYSTYPE_IS_DECLARED 1
    185 #endif
    186 
    187 
    188 #ifdef YYPARSE_PARAM
    189 #if defined __STDC__ || defined __cplusplus
    190 int ppparse (void *YYPARSE_PARAM);
    191 #else
    192 int ppparse ();
    193 #endif
    194 #else /* ! YYPARSE_PARAM */
    195 #if defined __STDC__ || defined __cplusplus
    196 int ppparse (Context *context);
    197 #else
    198 int ppparse ();
    199 #endif
    200 #endif /* ! YYPARSE_PARAM */
    201 
    202 
    203 
    204 /* Copy the second part of user declarations.  */
    205 
    206 
    207 
    208 #ifdef short
    209 # undef short
    210 #endif
    211 
    212 #ifdef YYTYPE_UINT8
    213 typedef YYTYPE_UINT8 yytype_uint8;
    214 #else
    215 typedef unsigned char yytype_uint8;
    216 #endif
    217 
    218 #ifdef YYTYPE_INT8
    219 typedef YYTYPE_INT8 yytype_int8;
    220 #elif (defined __STDC__ || defined __C99__FUNC__ \
    221      || defined __cplusplus || defined _MSC_VER)
    222 typedef signed char yytype_int8;
    223 #else
    224 typedef short int yytype_int8;
    225 #endif
    226 
    227 #ifdef YYTYPE_UINT16
    228 typedef YYTYPE_UINT16 yytype_uint16;
    229 #else
    230 typedef unsigned short int yytype_uint16;
    231 #endif
    232 
    233 #ifdef YYTYPE_INT16
    234 typedef YYTYPE_INT16 yytype_int16;
    235 #else
    236 typedef short int yytype_int16;
    237 #endif
    238 
    239 #ifndef YYSIZE_T
    240 # ifdef __SIZE_TYPE__
    241 #  define YYSIZE_T __SIZE_TYPE__
    242 # elif defined size_t
    243 #  define YYSIZE_T size_t
    244 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
    245      || defined __cplusplus || defined _MSC_VER)
    246 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
    247 #  define YYSIZE_T size_t
    248 # else
    249 #  define YYSIZE_T unsigned int
    250 # endif
    251 #endif
    252 
    253 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
    254 
    255 #ifndef YY_
    256 # if defined YYENABLE_NLS && YYENABLE_NLS
    257 #  if ENABLE_NLS
    258 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
    259 #   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
    260 #  endif
    261 # endif
    262 # ifndef YY_
    263 #  define YY_(Msgid) Msgid
    264 # endif
    265 #endif
    266 
    267 #ifndef __attribute__
    268 /* This feature is available in gcc versions 2.5 and later.  */
    269 # if (! defined __GNUC__ || __GNUC__ < 2 \
    270       || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
    271 #  define __attribute__(Spec) /* empty */
    272 # endif
    273 #endif
    274 
    275 /* Suppress unused-variable warnings by "using" E.  */
    276 #if ! defined lint || defined __GNUC__
    277 # define YYUSE(E) ((void) (E))
    278 #else
    279 # define YYUSE(E) /* empty */
    280 #endif
    281 
    282 
    283 /* Identity function, used to suppress warnings about constant conditions.  */
    284 #ifndef lint
    285 # define YYID(N) (N)
    286 #else
    287 #if (defined __STDC__ || defined __C99__FUNC__ \
    288      || defined __cplusplus || defined _MSC_VER)
    289 static int
    290 YYID (int yyi)
    291 #else
    292 static int
    293 YYID (yyi)
    294     int yyi;
    295 #endif
    296 {
    297   return yyi;
    298 }
    299 #endif
    300 
    301 #if ! defined yyoverflow || YYERROR_VERBOSE
    302 
    303 /* The parser invokes alloca or malloc; define the necessary symbols.  */
    304 
    305 # ifdef YYSTACK_USE_ALLOCA
    306 #  if YYSTACK_USE_ALLOCA
    307 #   ifdef __GNUC__
    308 #    define YYSTACK_ALLOC __builtin_alloca
    309 #   elif defined __BUILTIN_VA_ARG_INCR
    310 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
    311 #   elif defined _AIX
    312 #    define YYSTACK_ALLOC __alloca
    313 #   elif defined _MSC_VER
    314 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
    315 #    define alloca _alloca
    316 #   else
    317 #    define YYSTACK_ALLOC alloca
    318 #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
    319      || defined __cplusplus || defined _MSC_VER)
    320 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
    321       /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
    322 #     ifndef EXIT_SUCCESS
    323 #      define EXIT_SUCCESS 0
    324 #     endif
    325 #    endif
    326 #   endif
    327 #  endif
    328 # endif
    329 
    330 # ifdef YYSTACK_ALLOC
    331    /* Pacify GCC's `empty if-body' warning.  */
    332 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
    333 #  ifndef YYSTACK_ALLOC_MAXIMUM
    334     /* The OS might guarantee only one guard page at the bottom of the stack,
    335        and a page size can be as small as 4096 bytes.  So we cannot safely
    336        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
    337        to allow for a few compiler-allocated temporary stack slots.  */
    338 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
    339 #  endif
    340 # else
    341 #  define YYSTACK_ALLOC YYMALLOC
    342 #  define YYSTACK_FREE YYFREE
    343 #  ifndef YYSTACK_ALLOC_MAXIMUM
    344 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
    345 #  endif
    346 #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
    347        && ! ((defined YYMALLOC || defined malloc) \
    348 	     && (defined YYFREE || defined free)))
    349 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
    350 #   ifndef EXIT_SUCCESS
    351 #    define EXIT_SUCCESS 0
    352 #   endif
    353 #  endif
    354 #  ifndef YYMALLOC
    355 #   define YYMALLOC malloc
    356 #   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
    357      || defined __cplusplus || defined _MSC_VER)
    358 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
    359 #   endif
    360 #  endif
    361 #  ifndef YYFREE
    362 #   define YYFREE free
    363 #   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
    364      || defined __cplusplus || defined _MSC_VER)
    365 void free (void *); /* INFRINGES ON USER NAME SPACE */
    366 #   endif
    367 #  endif
    368 # endif
    369 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
    370 
    371 
    372 #if (! defined yyoverflow \
    373      && (! defined __cplusplus \
    374 	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
    375 
    376 /* A type that is properly aligned for any stack member.  */
    377 union yyalloc
    378 {
    379   yytype_int16 yyss_alloc;
    380   YYSTYPE yyvs_alloc;
    381 };
    382 
    383 /* The size of the maximum gap between one aligned stack and the next.  */
    384 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
    385 
    386 /* The size of an array large to enough to hold all stacks, each with
    387    N elements.  */
    388 # define YYSTACK_BYTES(N) \
    389      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
    390       + YYSTACK_GAP_MAXIMUM)
    391 
    392 # define YYCOPY_NEEDED 1
    393 
    394 /* Relocate STACK from its old location to the new one.  The
    395    local variables YYSIZE and YYSTACKSIZE give the old and new number of
    396    elements in the stack, and YYPTR gives the new location of the
    397    stack.  Advance YYPTR to a properly aligned location for the next
    398    stack.  */
    399 # define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
    400     do									\
    401       {									\
    402 	YYSIZE_T yynewbytes;						\
    403 	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
    404 	Stack = &yyptr->Stack_alloc;					\
    405 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
    406 	yyptr += yynewbytes / sizeof (*yyptr);				\
    407       }									\
    408     while (YYID (0))
    409 
    410 #endif
    411 
    412 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
    413 /* Copy COUNT objects from SRC to DST.  The source and destination do
    414    not overlap.  */
    415 # ifndef YYCOPY
    416 #  if defined __GNUC__ && 1 < __GNUC__
    417 #   define YYCOPY(Dst, Src, Count) \
    418       __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
    419 #  else
    420 #   define YYCOPY(Dst, Src, Count)              \
    421       do                                        \
    422         {                                       \
    423           YYSIZE_T yyi;                         \
    424           for (yyi = 0; yyi < (Count); yyi++)   \
    425             (Dst)[yyi] = (Src)[yyi];            \
    426         }                                       \
    427       while (YYID (0))
    428 #  endif
    429 # endif
    430 #endif /* !YYCOPY_NEEDED */
    431 
    432 /* YYFINAL -- State number of the termination state.  */
    433 #define YYFINAL  14
    434 /* YYLAST -- Last index in YYTABLE.  */
    435 #define YYLAST   175
    436 
    437 /* YYNTOKENS -- Number of terminals.  */
    438 #define YYNTOKENS  27
    439 /* YYNNTS -- Number of nonterminals.  */
    440 #define YYNNTS  3
    441 /* YYNRULES -- Number of rules.  */
    442 #define YYNRULES  26
    443 /* YYNRULES -- Number of states.  */
    444 #define YYNSTATES  52
    445 
    446 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
    447 #define YYUNDEFTOK  2
    448 #define YYMAXUTOK   267
    449 
    450 #define YYTRANSLATE(YYX)						\
    451   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
    452 
    453 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
    454 static const yytype_uint8 yytranslate[] =
    455 {
    456        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    457        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    458        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    459        2,     2,     2,    23,     2,     2,     2,    21,     8,     2,
    460       25,    26,    19,    17,     2,    18,     2,    20,     2,     2,
    461        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    462       11,     2,    12,     2,     2,     2,     2,     2,     2,     2,
    463        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    464        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    465        2,     2,     2,     2,     7,     2,     2,     2,     2,     2,
    466        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    467        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    468        2,     2,     2,     2,     6,     2,    24,     2,     2,     2,
    469        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    470        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    471        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    472        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    473        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    474        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    475        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    476        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    477        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    478        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    479        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    480        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    481        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
    482        5,     9,    10,    13,    14,    15,    16,    22
    483 };
    484 
    485 #if YYDEBUG
    486 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
    487    YYRHS.  */
    488 static const yytype_uint8 yyprhs[] =
    489 {
    490        0,     0,     3,     5,     7,    11,    15,    19,    23,    27,
    491       31,    35,    39,    43,    47,    51,    55,    59,    63,    67,
    492       71,    75,    79,    82,    85,    88,    91
    493 };
    494 
    495 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
    496 static const yytype_int8 yyrhs[] =
    497 {
    498       28,     0,    -1,    29,    -1,     3,    -1,    29,     4,    29,
    499       -1,    29,     5,    29,    -1,    29,     6,    29,    -1,    29,
    500        7,    29,    -1,    29,     8,    29,    -1,    29,     9,    29,
    501       -1,    29,    10,    29,    -1,    29,    13,    29,    -1,    29,
    502       14,    29,    -1,    29,    12,    29,    -1,    29,    11,    29,
    503       -1,    29,    15,    29,    -1,    29,    16,    29,    -1,    29,
    504       18,    29,    -1,    29,    17,    29,    -1,    29,    21,    29,
    505       -1,    29,    20,    29,    -1,    29,    19,    29,    -1,    23,
    506       29,    -1,    24,    29,    -1,    18,    29,    -1,    17,    29,
    507       -1,    25,    29,    26,    -1
    508 };
    509 
    510 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
    511 static const yytype_uint8 yyrline[] =
    512 {
    513        0,    97,    97,   104,   105,   108,   111,   114,   117,   120,
    514      123,   126,   129,   132,   135,   138,   141,   144,   147,   150,
    515      163,   176,   179,   182,   185,   188,   191
    516 };
    517 #endif
    518 
    519 #if YYDEBUG || YYERROR_VERBOSE || 0
    520 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    521    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
    522 static const char *const yytname[] =
    523 {
    524   "$end", "error", "$undefined", "TOK_CONST_INT", "TOK_OP_OR",
    525   "TOK_OP_AND", "'|'", "'^'", "'&'", "TOK_OP_NE", "TOK_OP_EQ", "'<'",
    526   "'>'", "TOK_OP_GE", "TOK_OP_LE", "TOK_OP_RIGHT", "TOK_OP_LEFT", "'+'",
    527   "'-'", "'*'", "'/'", "'%'", "TOK_UNARY", "'!'", "'~'", "'('", "')'",
    528   "$accept", "input", "expression", YY_NULL
    529 };
    530 #endif
    531 
    532 # ifdef YYPRINT
    533 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
    534    token YYLEX-NUM.  */
    535 static const yytype_uint16 yytoknum[] =
    536 {
    537        0,   256,   257,   258,   259,   260,   124,    94,    38,   261,
    538      262,    60,    62,   263,   264,   265,   266,    43,    45,    42,
    539       47,    37,   267,    33,   126,    40,    41
    540 };
    541 # endif
    542 
    543 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
    544 static const yytype_uint8 yyr1[] =
    545 {
    546        0,    27,    28,    29,    29,    29,    29,    29,    29,    29,
    547       29,    29,    29,    29,    29,    29,    29,    29,    29,    29,
    548       29,    29,    29,    29,    29,    29,    29
    549 };
    550 
    551 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
    552 static const yytype_uint8 yyr2[] =
    553 {
    554        0,     2,     1,     1,     3,     3,     3,     3,     3,     3,
    555        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
    556        3,     3,     2,     2,     2,     2,     3
    557 };
    558 
    559 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
    560    Performed when YYTABLE doesn't specify something else to do.  Zero
    561    means the default is an error.  */
    562 static const yytype_uint8 yydefact[] =
    563 {
    564        0,     3,     0,     0,     0,     0,     0,     0,     2,    25,
    565       24,    22,    23,     0,     1,     0,     0,     0,     0,     0,
    566        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    567        0,     0,     0,    26,     4,     5,     6,     7,     8,     9,
    568       10,    14,    13,    11,    12,    15,    16,    18,    17,    21,
    569       20,    19
    570 };
    571 
    572 /* YYDEFGOTO[NTERM-NUM].  */
    573 static const yytype_int8 yydefgoto[] =
    574 {
    575       -1,     7,     8
    576 };
    577 
    578 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    579    STATE-NUM.  */
    580 #define YYPACT_NINF -11
    581 static const yytype_int16 yypact[] =
    582 {
    583       46,   -11,    46,    46,    46,    46,    46,    12,    68,   -11,
    584      -11,   -11,   -11,    27,   -11,    46,    46,    46,    46,    46,
    585       46,    46,    46,    46,    46,    46,    46,    46,    46,    46,
    586       46,    46,    46,   -11,    85,   101,   116,   130,   143,   154,
    587      154,   -10,   -10,   -10,   -10,    37,    37,    31,    31,   -11,
    588      -11,   -11
    589 };
    590 
    591 /* YYPGOTO[NTERM-NUM].  */
    592 static const yytype_int8 yypgoto[] =
    593 {
    594      -11,   -11,    -2
    595 };
    596 
    597 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    598    positive, shift that token.  If negative, reduce the rule which
    599    number is the opposite.  If YYTABLE_NINF, syntax error.  */
    600 #define YYTABLE_NINF -1
    601 static const yytype_uint8 yytable[] =
    602 {
    603        9,    10,    11,    12,    13,    26,    27,    28,    29,    30,
    604       31,    32,    14,    34,    35,    36,    37,    38,    39,    40,
    605       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
    606       51,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    607       24,    25,    26,    27,    28,    29,    30,    31,    32,     1,
    608       30,    31,    32,    33,    28,    29,    30,    31,    32,     0,
    609        0,     0,     0,     2,     3,     0,     0,     0,     0,     4,
    610        5,     6,    15,    16,    17,    18,    19,    20,    21,    22,
    611       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
    612       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    613       26,    27,    28,    29,    30,    31,    32,    17,    18,    19,
    614       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
    615       30,    31,    32,    18,    19,    20,    21,    22,    23,    24,
    616       25,    26,    27,    28,    29,    30,    31,    32,    19,    20,
    617       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
    618       31,    32,    20,    21,    22,    23,    24,    25,    26,    27,
    619       28,    29,    30,    31,    32,    22,    23,    24,    25,    26,
    620       27,    28,    29,    30,    31,    32
    621 };
    622 
    623 #define yypact_value_is_default(Yystate) \
    624   (!!((Yystate) == (-11)))
    625 
    626 #define yytable_value_is_error(Yytable_value) \
    627   YYID (0)
    628 
    629 static const yytype_int8 yycheck[] =
    630 {
    631        2,     3,     4,     5,     6,    15,    16,    17,    18,    19,
    632       20,    21,     0,    15,    16,    17,    18,    19,    20,    21,
    633       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
    634       32,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    635       13,    14,    15,    16,    17,    18,    19,    20,    21,     3,
    636       19,    20,    21,    26,    17,    18,    19,    20,    21,    -1,
    637       -1,    -1,    -1,    17,    18,    -1,    -1,    -1,    -1,    23,
    638       24,    25,     4,     5,     6,     7,     8,     9,    10,    11,
    639       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    640        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    641       15,    16,    17,    18,    19,    20,    21,     6,     7,     8,
    642        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    643       19,    20,    21,     7,     8,     9,    10,    11,    12,    13,
    644       14,    15,    16,    17,    18,    19,    20,    21,     8,     9,
    645       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    646       20,    21,     9,    10,    11,    12,    13,    14,    15,    16,
    647       17,    18,    19,    20,    21,    11,    12,    13,    14,    15,
    648       16,    17,    18,    19,    20,    21
    649 };
    650 
    651 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    652    symbol of state STATE-NUM.  */
    653 static const yytype_uint8 yystos[] =
    654 {
    655        0,     3,    17,    18,    23,    24,    25,    28,    29,    29,
    656       29,    29,    29,    29,     0,     4,     5,     6,     7,     8,
    657        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    658       19,    20,    21,    26,    29,    29,    29,    29,    29,    29,
    659       29,    29,    29,    29,    29,    29,    29,    29,    29,    29,
    660       29,    29
    661 };
    662 
    663 #define yyerrok		(yyerrstatus = 0)
    664 #define yyclearin	(yychar = YYEMPTY)
    665 #define YYEMPTY		(-2)
    666 #define YYEOF		0
    667 
    668 #define YYACCEPT	goto yyacceptlab
    669 #define YYABORT		goto yyabortlab
    670 #define YYERROR		goto yyerrorlab
    671 
    672 
    673 /* Like YYERROR except do call yyerror.  This remains here temporarily
    674    to ease the transition to the new meaning of YYERROR, for GCC.
    675    Once GCC version 2 has supplanted version 1, this can go.  However,
    676    YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
    677    in Bison 2.4.2's NEWS entry, where a plan to phase it out is
    678    discussed.  */
    679 
    680 #define YYFAIL		goto yyerrlab
    681 #if defined YYFAIL
    682   /* This is here to suppress warnings from the GCC cpp's
    683      -Wunused-macros.  Normally we don't worry about that warning, but
    684      some users do, and we want to make it easy for users to remove
    685      YYFAIL uses, which will produce warnings from Bison 2.5.  */
    686 #endif
    687 
    688 #define YYRECOVERING()  (!!yyerrstatus)
    689 
    690 #define YYBACKUP(Token, Value)                                  \
    691 do                                                              \
    692   if (yychar == YYEMPTY)                                        \
    693     {                                                           \
    694       yychar = (Token);                                         \
    695       yylval = (Value);                                         \
    696       YYPOPSTACK (yylen);                                       \
    697       yystate = *yyssp;                                         \
    698       goto yybackup;                                            \
    699     }                                                           \
    700   else                                                          \
    701     {                                                           \
    702       yyerror (context, YY_("syntax error: cannot back up")); \
    703       YYERROR;							\
    704     }								\
    705 while (YYID (0))
    706 
    707 /* Error token number */
    708 #define YYTERROR	1
    709 #define YYERRCODE	256
    710 
    711 
    712 /* This macro is provided for backward compatibility. */
    713 #ifndef YY_LOCATION_PRINT
    714 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
    715 #endif
    716 
    717 
    718 /* YYLEX -- calling `yylex' with the right arguments.  */
    719 #ifdef YYLEX_PARAM
    720 # define YYLEX yylex (&yylval, YYLEX_PARAM)
    721 #else
    722 # define YYLEX yylex (&yylval, context)
    723 #endif
    724 
    725 /* Enable debugging if requested.  */
    726 #if YYDEBUG
    727 
    728 # ifndef YYFPRINTF
    729 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
    730 #  define YYFPRINTF fprintf
    731 # endif
    732 
    733 # define YYDPRINTF(Args)			\
    734 do {						\
    735   if (yydebug)					\
    736     YYFPRINTF Args;				\
    737 } while (YYID (0))
    738 
    739 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
    740 do {									  \
    741   if (yydebug)								  \
    742     {									  \
    743       YYFPRINTF (stderr, "%s ", Title);					  \
    744       yy_symbol_print (stderr,						  \
    745 		  Type, Value, context); \
    746       YYFPRINTF (stderr, "\n");						  \
    747     }									  \
    748 } while (YYID (0))
    749 
    750 
    751 /*--------------------------------.
    752 | Print this symbol on YYOUTPUT.  |
    753 `--------------------------------*/
    754 
    755 /*ARGSUSED*/
    756 #if (defined __STDC__ || defined __C99__FUNC__ \
    757      || defined __cplusplus || defined _MSC_VER)
    758 static void
    759 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Context *context)
    760 #else
    761 static void
    762 yy_symbol_value_print (yyoutput, yytype, yyvaluep, context)
    763     FILE *yyoutput;
    764     int yytype;
    765     YYSTYPE const * const yyvaluep;
    766     Context *context;
    767 #endif
    768 {
    769   FILE *yyo = yyoutput;
    770   YYUSE (yyo);
    771   if (!yyvaluep)
    772     return;
    773   YYUSE (context);
    774 # ifdef YYPRINT
    775   if (yytype < YYNTOKENS)
    776     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
    777 # else
    778   YYUSE (yyoutput);
    779 # endif
    780   YYUSE (yytype);
    781 }
    782 
    783 
    784 /*--------------------------------.
    785 | Print this symbol on YYOUTPUT.  |
    786 `--------------------------------*/
    787 
    788 #if (defined __STDC__ || defined __C99__FUNC__ \
    789      || defined __cplusplus || defined _MSC_VER)
    790 static void
    791 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Context *context)
    792 #else
    793 static void
    794 yy_symbol_print (yyoutput, yytype, yyvaluep, context)
    795     FILE *yyoutput;
    796     int yytype;
    797     YYSTYPE const * const yyvaluep;
    798     Context *context;
    799 #endif
    800 {
    801   if (yytype < YYNTOKENS)
    802     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
    803   else
    804     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
    805 
    806   yy_symbol_value_print (yyoutput, yytype, yyvaluep, context);
    807   YYFPRINTF (yyoutput, ")");
    808 }
    809 
    810 /*------------------------------------------------------------------.
    811 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
    812 | TOP (included).                                                   |
    813 `------------------------------------------------------------------*/
    814 
    815 #if (defined __STDC__ || defined __C99__FUNC__ \
    816      || defined __cplusplus || defined _MSC_VER)
    817 static void
    818 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
    819 #else
    820 static void
    821 yy_stack_print (yybottom, yytop)
    822     yytype_int16 *yybottom;
    823     yytype_int16 *yytop;
    824 #endif
    825 {
    826   YYFPRINTF (stderr, "Stack now");
    827   for (; yybottom <= yytop; yybottom++)
    828     {
    829       int yybot = *yybottom;
    830       YYFPRINTF (stderr, " %d", yybot);
    831     }
    832   YYFPRINTF (stderr, "\n");
    833 }
    834 
    835 # define YY_STACK_PRINT(Bottom, Top)				\
    836 do {								\
    837   if (yydebug)							\
    838     yy_stack_print ((Bottom), (Top));				\
    839 } while (YYID (0))
    840 
    841 
    842 /*------------------------------------------------.
    843 | Report that the YYRULE is going to be reduced.  |
    844 `------------------------------------------------*/
    845 
    846 #if (defined __STDC__ || defined __C99__FUNC__ \
    847      || defined __cplusplus || defined _MSC_VER)
    848 static void
    849 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, Context *context)
    850 #else
    851 static void
    852 yy_reduce_print (yyvsp, yyrule, context)
    853     YYSTYPE *yyvsp;
    854     int yyrule;
    855     Context *context;
    856 #endif
    857 {
    858   int yynrhs = yyr2[yyrule];
    859   int yyi;
    860   unsigned long int yylno = yyrline[yyrule];
    861   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
    862 	     yyrule - 1, yylno);
    863   /* The symbols being reduced.  */
    864   for (yyi = 0; yyi < yynrhs; yyi++)
    865     {
    866       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
    867       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
    868 		       &(yyvsp[(yyi + 1) - (yynrhs)])
    869 		       		       , context);
    870       YYFPRINTF (stderr, "\n");
    871     }
    872 }
    873 
    874 # define YY_REDUCE_PRINT(Rule)		\
    875 do {					\
    876   if (yydebug)				\
    877     yy_reduce_print (yyvsp, Rule, context); \
    878 } while (YYID (0))
    879 
    880 /* Nonzero means print parse trace.  It is left uninitialized so that
    881    multiple parsers can coexist.  */
    882 int yydebug;
    883 #else /* !YYDEBUG */
    884 # define YYDPRINTF(Args)
    885 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
    886 # define YY_STACK_PRINT(Bottom, Top)
    887 # define YY_REDUCE_PRINT(Rule)
    888 #endif /* !YYDEBUG */
    889 
    890 
    891 /* YYINITDEPTH -- initial size of the parser's stacks.  */
    892 #ifndef	YYINITDEPTH
    893 # define YYINITDEPTH 200
    894 #endif
    895 
    896 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
    897    if the built-in stack extension method is used).
    898 
    899    Do not make this value too large; the results are undefined if
    900    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
    901    evaluated with infinite-precision integer arithmetic.  */
    902 
    903 #ifndef YYMAXDEPTH
    904 # define YYMAXDEPTH 10000
    905 #endif
    906 
    907 
    908 #if YYERROR_VERBOSE
    909 
    910 # ifndef yystrlen
    911 #  if defined __GLIBC__ && defined _STRING_H
    912 #   define yystrlen strlen
    913 #  else
    914 /* Return the length of YYSTR.  */
    915 #if (defined __STDC__ || defined __C99__FUNC__ \
    916      || defined __cplusplus || defined _MSC_VER)
    917 static YYSIZE_T
    918 yystrlen (const char *yystr)
    919 #else
    920 static YYSIZE_T
    921 yystrlen (yystr)
    922     const char *yystr;
    923 #endif
    924 {
    925   YYSIZE_T yylen;
    926   for (yylen = 0; yystr[yylen]; yylen++)
    927     continue;
    928   return yylen;
    929 }
    930 #  endif
    931 # endif
    932 
    933 # ifndef yystpcpy
    934 #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
    935 #   define yystpcpy stpcpy
    936 #  else
    937 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
    938    YYDEST.  */
    939 #if (defined __STDC__ || defined __C99__FUNC__ \
    940      || defined __cplusplus || defined _MSC_VER)
    941 static char *
    942 yystpcpy (char *yydest, const char *yysrc)
    943 #else
    944 static char *
    945 yystpcpy (yydest, yysrc)
    946     char *yydest;
    947     const char *yysrc;
    948 #endif
    949 {
    950   char *yyd = yydest;
    951   const char *yys = yysrc;
    952 
    953   while ((*yyd++ = *yys++) != '\0')
    954     continue;
    955 
    956   return yyd - 1;
    957 }
    958 #  endif
    959 # endif
    960 
    961 # ifndef yytnamerr
    962 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
    963    quotes and backslashes, so that it's suitable for yyerror.  The
    964    heuristic is that double-quoting is unnecessary unless the string
    965    contains an apostrophe, a comma, or backslash (other than
    966    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
    967    null, do not copy; instead, return the length of what the result
    968    would have been.  */
    969 static YYSIZE_T
    970 yytnamerr (char *yyres, const char *yystr)
    971 {
    972   if (*yystr == '"')
    973     {
    974       YYSIZE_T yyn = 0;
    975       char const *yyp = yystr;
    976 
    977       for (;;)
    978 	switch (*++yyp)
    979 	  {
    980 	  case '\'':
    981 	  case ',':
    982 	    goto do_not_strip_quotes;
    983 
    984 	  case '\\':
    985 	    if (*++yyp != '\\')
    986 	      goto do_not_strip_quotes;
    987 	    /* Fall through.  */
    988 	  default:
    989 	    if (yyres)
    990 	      yyres[yyn] = *yyp;
    991 	    yyn++;
    992 	    break;
    993 
    994 	  case '"':
    995 	    if (yyres)
    996 	      yyres[yyn] = '\0';
    997 	    return yyn;
    998 	  }
    999     do_not_strip_quotes: ;
   1000     }
   1001 
   1002   if (! yyres)
   1003     return yystrlen (yystr);
   1004 
   1005   return yystpcpy (yyres, yystr) - yyres;
   1006 }
   1007 # endif
   1008 
   1009 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
   1010    about the unexpected token YYTOKEN for the state stack whose top is
   1011    YYSSP.
   1012 
   1013    Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
   1014    not large enough to hold the message.  In that case, also set
   1015    *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
   1016    required number of bytes is too large to store.  */
   1017 static int
   1018 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
   1019                 yytype_int16 *yyssp, int yytoken)
   1020 {
   1021   YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
   1022   YYSIZE_T yysize = yysize0;
   1023   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
   1024   /* Internationalized format string. */
   1025   const char *yyformat = YY_NULL;
   1026   /* Arguments of yyformat. */
   1027   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
   1028   /* Number of reported tokens (one for the "unexpected", one per
   1029      "expected"). */
   1030   int yycount = 0;
   1031 
   1032   /* There are many possibilities here to consider:
   1033      - Assume YYFAIL is not used.  It's too flawed to consider.  See
   1034        <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
   1035        for details.  YYERROR is fine as it does not invoke this
   1036        function.
   1037      - If this state is a consistent state with a default action, then
   1038        the only way this function was invoked is if the default action
   1039        is an error action.  In that case, don't check for expected
   1040        tokens because there are none.
   1041      - The only way there can be no lookahead present (in yychar) is if
   1042        this state is a consistent state with a default action.  Thus,
   1043        detecting the absence of a lookahead is sufficient to determine
   1044        that there is no unexpected or expected token to report.  In that
   1045        case, just report a simple "syntax error".
   1046      - Don't assume there isn't a lookahead just because this state is a
   1047        consistent state with a default action.  There might have been a
   1048        previous inconsistent state, consistent state with a non-default
   1049        action, or user semantic action that manipulated yychar.
   1050      - Of course, the expected token list depends on states to have
   1051        correct lookahead information, and it depends on the parser not
   1052        to perform extra reductions after fetching a lookahead from the
   1053        scanner and before detecting a syntax error.  Thus, state merging
   1054        (from LALR or IELR) and default reductions corrupt the expected
   1055        token list.  However, the list is correct for canonical LR with
   1056        one exception: it will still contain any token that will not be
   1057        accepted due to an error action in a later state.
   1058   */
   1059   if (yytoken != YYEMPTY)
   1060     {
   1061       int yyn = yypact[*yyssp];
   1062       yyarg[yycount++] = yytname[yytoken];
   1063       if (!yypact_value_is_default (yyn))
   1064         {
   1065           /* Start YYX at -YYN if negative to avoid negative indexes in
   1066              YYCHECK.  In other words, skip the first -YYN actions for
   1067              this state because they are default actions.  */
   1068           int yyxbegin = yyn < 0 ? -yyn : 0;
   1069           /* Stay within bounds of both yycheck and yytname.  */
   1070           int yychecklim = YYLAST - yyn + 1;
   1071           int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
   1072           int yyx;
   1073 
   1074           for (yyx = yyxbegin; yyx < yyxend; ++yyx)
   1075             if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
   1076                 && !yytable_value_is_error (yytable[yyx + yyn]))
   1077               {
   1078                 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
   1079                   {
   1080                     yycount = 1;
   1081                     yysize = yysize0;
   1082                     break;
   1083                   }
   1084                 yyarg[yycount++] = yytname[yyx];
   1085                 {
   1086                   YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
   1087                   if (! (yysize <= yysize1
   1088                          && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
   1089                     return 2;
   1090                   yysize = yysize1;
   1091                 }
   1092               }
   1093         }
   1094     }
   1095 
   1096   switch (yycount)
   1097     {
   1098 # define YYCASE_(N, S)                      \
   1099       case N:                               \
   1100         yyformat = S;                       \
   1101       break
   1102       YYCASE_(0, YY_("syntax error"));
   1103       YYCASE_(1, YY_("syntax error, unexpected %s"));
   1104       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
   1105       YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
   1106       YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
   1107       YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
   1108 # undef YYCASE_
   1109     }
   1110 
   1111   {
   1112     YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
   1113     if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
   1114       return 2;
   1115     yysize = yysize1;
   1116   }
   1117 
   1118   if (*yymsg_alloc < yysize)
   1119     {
   1120       *yymsg_alloc = 2 * yysize;
   1121       if (! (yysize <= *yymsg_alloc
   1122              && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
   1123         *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
   1124       return 1;
   1125     }
   1126 
   1127   /* Avoid sprintf, as that infringes on the user's name space.
   1128      Don't have undefined behavior even if the translation
   1129      produced a string with the wrong number of "%s"s.  */
   1130   {
   1131     char *yyp = *yymsg;
   1132     int yyi = 0;
   1133     while ((*yyp = *yyformat) != '\0')
   1134       if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
   1135         {
   1136           yyp += yytnamerr (yyp, yyarg[yyi++]);
   1137           yyformat += 2;
   1138         }
   1139       else
   1140         {
   1141           yyp++;
   1142           yyformat++;
   1143         }
   1144   }
   1145   return 0;
   1146 }
   1147 #endif /* YYERROR_VERBOSE */
   1148 
   1149 /*-----------------------------------------------.
   1150 | Release the memory associated to this symbol.  |
   1151 `-----------------------------------------------*/
   1152 
   1153 /*ARGSUSED*/
   1154 #if (defined __STDC__ || defined __C99__FUNC__ \
   1155      || defined __cplusplus || defined _MSC_VER)
   1156 static void
   1157 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, Context *context)
   1158 #else
   1159 static void
   1160 yydestruct (yymsg, yytype, yyvaluep, context)
   1161     const char *yymsg;
   1162     int yytype;
   1163     YYSTYPE *yyvaluep;
   1164     Context *context;
   1165 #endif
   1166 {
   1167   YYUSE (yyvaluep);
   1168   YYUSE (context);
   1169 
   1170   if (!yymsg)
   1171     yymsg = "Deleting";
   1172   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
   1173 
   1174   YYUSE (yytype);
   1175 }
   1176 
   1177 
   1178 
   1179 
   1180 /*----------.
   1181 | yyparse.  |
   1182 `----------*/
   1183 
   1184 #ifdef YYPARSE_PARAM
   1185 #if (defined __STDC__ || defined __C99__FUNC__ \
   1186      || defined __cplusplus || defined _MSC_VER)
   1187 int
   1188 yyparse (void *YYPARSE_PARAM)
   1189 #else
   1190 int
   1191 yyparse (YYPARSE_PARAM)
   1192     void *YYPARSE_PARAM;
   1193 #endif
   1194 #else /* ! YYPARSE_PARAM */
   1195 #if (defined __STDC__ || defined __C99__FUNC__ \
   1196      || defined __cplusplus || defined _MSC_VER)
   1197 int
   1198 yyparse (Context *context)
   1199 #else
   1200 int
   1201 yyparse (context)
   1202     Context *context;
   1203 #endif
   1204 #endif
   1205 {
   1206 /* The lookahead symbol.  */
   1207 int yychar;
   1208 
   1209 
   1210 #if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
   1211 /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
   1212 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
   1213     _Pragma ("GCC diagnostic push") \
   1214     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
   1215     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
   1216 # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
   1217     _Pragma ("GCC diagnostic pop")
   1218 #else
   1219 /* Default value used for initialization, for pacifying older GCCs
   1220    or non-GCC compilers.  */
   1221 static YYSTYPE yyval_default;
   1222 # define YY_INITIAL_VALUE(Value) = Value
   1223 #endif
   1224 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   1225 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   1226 # define YY_IGNORE_MAYBE_UNINITIALIZED_END
   1227 #endif
   1228 #ifndef YY_INITIAL_VALUE
   1229 # define YY_INITIAL_VALUE(Value) /* Nothing. */
   1230 #endif
   1231 
   1232 /* The semantic value of the lookahead symbol.  */
   1233 YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
   1234 
   1235     /* Number of syntax errors so far.  */
   1236     int yynerrs;
   1237 
   1238     int yystate;
   1239     /* Number of tokens to shift before error messages enabled.  */
   1240     int yyerrstatus;
   1241 
   1242     /* The stacks and their tools:
   1243        `yyss': related to states.
   1244        `yyvs': related to semantic values.
   1245 
   1246        Refer to the stacks through separate pointers, to allow yyoverflow
   1247        to reallocate them elsewhere.  */
   1248 
   1249     /* The state stack.  */
   1250     yytype_int16 yyssa[YYINITDEPTH];
   1251     yytype_int16 *yyss;
   1252     yytype_int16 *yyssp;
   1253 
   1254     /* The semantic value stack.  */
   1255     YYSTYPE yyvsa[YYINITDEPTH];
   1256     YYSTYPE *yyvs;
   1257     YYSTYPE *yyvsp;
   1258 
   1259     YYSIZE_T yystacksize;
   1260 
   1261   int yyn;
   1262   int yyresult;
   1263   /* Lookahead token as an internal (translated) token number.  */
   1264   int yytoken = 0;
   1265   /* The variables used to return semantic value and location from the
   1266      action routines.  */
   1267   YYSTYPE yyval;
   1268 
   1269 #if YYERROR_VERBOSE
   1270   /* Buffer for error messages, and its allocated size.  */
   1271   char yymsgbuf[128];
   1272   char *yymsg = yymsgbuf;
   1273   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
   1274 #endif
   1275 
   1276 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
   1277 
   1278   /* The number of symbols on the RHS of the reduced rule.
   1279      Keep to zero when no symbol should be popped.  */
   1280   int yylen = 0;
   1281 
   1282   yyssp = yyss = yyssa;
   1283   yyvsp = yyvs = yyvsa;
   1284   yystacksize = YYINITDEPTH;
   1285 
   1286   YYDPRINTF ((stderr, "Starting parse\n"));
   1287 
   1288   yystate = 0;
   1289   yyerrstatus = 0;
   1290   yynerrs = 0;
   1291   yychar = YYEMPTY; /* Cause a token to be read.  */
   1292   goto yysetstate;
   1293 
   1294 /*------------------------------------------------------------.
   1295 | yynewstate -- Push a new state, which is found in yystate.  |
   1296 `------------------------------------------------------------*/
   1297  yynewstate:
   1298   /* In all cases, when you get here, the value and location stacks
   1299      have just been pushed.  So pushing a state here evens the stacks.  */
   1300   yyssp++;
   1301 
   1302  yysetstate:
   1303   *yyssp = yystate;
   1304 
   1305   if (yyss + yystacksize - 1 <= yyssp)
   1306     {
   1307       /* Get the current used size of the three stacks, in elements.  */
   1308       YYSIZE_T yysize = yyssp - yyss + 1;
   1309 
   1310 #ifdef yyoverflow
   1311       {
   1312 	/* Give user a chance to reallocate the stack.  Use copies of
   1313 	   these so that the &'s don't force the real ones into
   1314 	   memory.  */
   1315 	YYSTYPE *yyvs1 = yyvs;
   1316 	yytype_int16 *yyss1 = yyss;
   1317 
   1318 	/* Each stack pointer address is followed by the size of the
   1319 	   data in use in that stack, in bytes.  This used to be a
   1320 	   conditional around just the two extra args, but that might
   1321 	   be undefined if yyoverflow is a macro.  */
   1322 	yyoverflow (YY_("memory exhausted"),
   1323 		    &yyss1, yysize * sizeof (*yyssp),
   1324 		    &yyvs1, yysize * sizeof (*yyvsp),
   1325 		    &yystacksize);
   1326 
   1327 	yyss = yyss1;
   1328 	yyvs = yyvs1;
   1329       }
   1330 #else /* no yyoverflow */
   1331 # ifndef YYSTACK_RELOCATE
   1332       goto yyexhaustedlab;
   1333 # else
   1334       /* Extend the stack our own way.  */
   1335       if (YYMAXDEPTH <= yystacksize)
   1336 	goto yyexhaustedlab;
   1337       yystacksize *= 2;
   1338       if (YYMAXDEPTH < yystacksize)
   1339 	yystacksize = YYMAXDEPTH;
   1340 
   1341       {
   1342 	yytype_int16 *yyss1 = yyss;
   1343 	union yyalloc *yyptr =
   1344 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
   1345 	if (! yyptr)
   1346 	  goto yyexhaustedlab;
   1347 	YYSTACK_RELOCATE (yyss_alloc, yyss);
   1348 	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
   1349 #  undef YYSTACK_RELOCATE
   1350 	if (yyss1 != yyssa)
   1351 	  YYSTACK_FREE (yyss1);
   1352       }
   1353 # endif
   1354 #endif /* no yyoverflow */
   1355 
   1356       yyssp = yyss + yysize - 1;
   1357       yyvsp = yyvs + yysize - 1;
   1358 
   1359       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
   1360 		  (unsigned long int) yystacksize));
   1361 
   1362       if (yyss + yystacksize - 1 <= yyssp)
   1363 	YYABORT;
   1364     }
   1365 
   1366   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
   1367 
   1368   if (yystate == YYFINAL)
   1369     YYACCEPT;
   1370 
   1371   goto yybackup;
   1372 
   1373 /*-----------.
   1374 | yybackup.  |
   1375 `-----------*/
   1376 yybackup:
   1377 
   1378   /* Do appropriate processing given the current state.  Read a
   1379      lookahead token if we need one and don't already have one.  */
   1380 
   1381   /* First try to decide what to do without reference to lookahead token.  */
   1382   yyn = yypact[yystate];
   1383   if (yypact_value_is_default (yyn))
   1384     goto yydefault;
   1385 
   1386   /* Not known => get a lookahead token if don't already have one.  */
   1387 
   1388   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
   1389   if (yychar == YYEMPTY)
   1390     {
   1391       YYDPRINTF ((stderr, "Reading a token: "));
   1392       yychar = YYLEX;
   1393     }
   1394 
   1395   if (yychar <= YYEOF)
   1396     {
   1397       yychar = yytoken = YYEOF;
   1398       YYDPRINTF ((stderr, "Now at end of input.\n"));
   1399     }
   1400   else
   1401     {
   1402       yytoken = YYTRANSLATE (yychar);
   1403       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
   1404     }
   1405 
   1406   /* If the proper action on seeing token YYTOKEN is to reduce or to
   1407      detect an error, take that action.  */
   1408   yyn += yytoken;
   1409   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
   1410     goto yydefault;
   1411   yyn = yytable[yyn];
   1412   if (yyn <= 0)
   1413     {
   1414       if (yytable_value_is_error (yyn))
   1415         goto yyerrlab;
   1416       yyn = -yyn;
   1417       goto yyreduce;
   1418     }
   1419 
   1420   /* Count tokens shifted since error; after three, turn off error
   1421      status.  */
   1422   if (yyerrstatus)
   1423     yyerrstatus--;
   1424 
   1425   /* Shift the lookahead token.  */
   1426   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
   1427 
   1428   /* Discard the shifted token.  */
   1429   yychar = YYEMPTY;
   1430 
   1431   yystate = yyn;
   1432   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   1433   *++yyvsp = yylval;
   1434   YY_IGNORE_MAYBE_UNINITIALIZED_END
   1435 
   1436   goto yynewstate;
   1437 
   1438 
   1439 /*-----------------------------------------------------------.
   1440 | yydefault -- do the default action for the current state.  |
   1441 `-----------------------------------------------------------*/
   1442 yydefault:
   1443   yyn = yydefact[yystate];
   1444   if (yyn == 0)
   1445     goto yyerrlab;
   1446   goto yyreduce;
   1447 
   1448 
   1449 /*-----------------------------.
   1450 | yyreduce -- Do a reduction.  |
   1451 `-----------------------------*/
   1452 yyreduce:
   1453   /* yyn is the number of a rule to reduce with.  */
   1454   yylen = yyr2[yyn];
   1455 
   1456   /* If YYLEN is nonzero, implement the default value of the action:
   1457      `$$ = $1'.
   1458 
   1459      Otherwise, the following line sets YYVAL to garbage.
   1460      This behavior is undocumented and Bison
   1461      users should not rely upon it.  Assigning to YYVAL
   1462      unconditionally makes the parser a bit smaller, and it avoids a
   1463      GCC warning that YYVAL may be used uninitialized.  */
   1464   yyval = yyvsp[1-yylen];
   1465 
   1466 
   1467   YY_REDUCE_PRINT (yyn);
   1468   switch (yyn)
   1469     {
   1470         case 2:
   1471 
   1472     {
   1473         *(context->result) = static_cast<int>((yyvsp[(1) - (1)]));
   1474         YYACCEPT;
   1475     }
   1476     break;
   1477 
   1478   case 4:
   1479 
   1480     {
   1481         (yyval) = (yyvsp[(1) - (3)]) || (yyvsp[(3) - (3)]);
   1482     }
   1483     break;
   1484 
   1485   case 5:
   1486 
   1487     {
   1488         (yyval) = (yyvsp[(1) - (3)]) && (yyvsp[(3) - (3)]);
   1489     }
   1490     break;
   1491 
   1492   case 6:
   1493 
   1494     {
   1495         (yyval) = (yyvsp[(1) - (3)]) | (yyvsp[(3) - (3)]);
   1496     }
   1497     break;
   1498 
   1499   case 7:
   1500 
   1501     {
   1502         (yyval) = (yyvsp[(1) - (3)]) ^ (yyvsp[(3) - (3)]);
   1503     }
   1504     break;
   1505 
   1506   case 8:
   1507 
   1508     {
   1509         (yyval) = (yyvsp[(1) - (3)]) & (yyvsp[(3) - (3)]);
   1510     }
   1511     break;
   1512 
   1513   case 9:
   1514 
   1515     {
   1516         (yyval) = (yyvsp[(1) - (3)]) != (yyvsp[(3) - (3)]);
   1517     }
   1518     break;
   1519 
   1520   case 10:
   1521 
   1522     {
   1523         (yyval) = (yyvsp[(1) - (3)]) == (yyvsp[(3) - (3)]);
   1524     }
   1525     break;
   1526 
   1527   case 11:
   1528 
   1529     {
   1530         (yyval) = (yyvsp[(1) - (3)]) >= (yyvsp[(3) - (3)]);
   1531     }
   1532     break;
   1533 
   1534   case 12:
   1535 
   1536     {
   1537         (yyval) = (yyvsp[(1) - (3)]) <= (yyvsp[(3) - (3)]);
   1538     }
   1539     break;
   1540 
   1541   case 13:
   1542 
   1543     {
   1544         (yyval) = (yyvsp[(1) - (3)]) > (yyvsp[(3) - (3)]);
   1545     }
   1546     break;
   1547 
   1548   case 14:
   1549 
   1550     {
   1551         (yyval) = (yyvsp[(1) - (3)]) < (yyvsp[(3) - (3)]);
   1552     }
   1553     break;
   1554 
   1555   case 15:
   1556 
   1557     {
   1558         (yyval) = (yyvsp[(1) - (3)]) >> (yyvsp[(3) - (3)]);
   1559     }
   1560     break;
   1561 
   1562   case 16:
   1563 
   1564     {
   1565         (yyval) = (yyvsp[(1) - (3)]) << (yyvsp[(3) - (3)]);
   1566     }
   1567     break;
   1568 
   1569   case 17:
   1570 
   1571     {
   1572         (yyval) = (yyvsp[(1) - (3)]) - (yyvsp[(3) - (3)]);
   1573     }
   1574     break;
   1575 
   1576   case 18:
   1577 
   1578     {
   1579         (yyval) = (yyvsp[(1) - (3)]) + (yyvsp[(3) - (3)]);
   1580     }
   1581     break;
   1582 
   1583   case 19:
   1584 
   1585     {
   1586         if ((yyvsp[(3) - (3)]) == 0) {
   1587             std::ostringstream stream;
   1588             stream << (yyvsp[(1) - (3)]) << " % " << (yyvsp[(3) - (3)]);
   1589             std::string text = stream.str();
   1590             context->diagnostics->report(pp::Diagnostics::PP_DIVISION_BY_ZERO,
   1591                                          context->token->location,
   1592                                          text.c_str());
   1593             YYABORT;
   1594         } else {
   1595             (yyval) = (yyvsp[(1) - (3)]) % (yyvsp[(3) - (3)]);
   1596         }
   1597     }
   1598     break;
   1599 
   1600   case 20:
   1601 
   1602     {
   1603         if ((yyvsp[(3) - (3)]) == 0) {
   1604             std::ostringstream stream;
   1605             stream << (yyvsp[(1) - (3)]) << " / " << (yyvsp[(3) - (3)]);
   1606             std::string text = stream.str();
   1607             context->diagnostics->report(pp::Diagnostics::PP_DIVISION_BY_ZERO,
   1608                                          context->token->location,
   1609                                          text.c_str());
   1610             YYABORT;
   1611         } else {
   1612             (yyval) = (yyvsp[(1) - (3)]) / (yyvsp[(3) - (3)]);
   1613         }
   1614     }
   1615     break;
   1616 
   1617   case 21:
   1618 
   1619     {
   1620         (yyval) = (yyvsp[(1) - (3)]) * (yyvsp[(3) - (3)]);
   1621     }
   1622     break;
   1623 
   1624   case 22:
   1625 
   1626     {
   1627         (yyval) = ! (yyvsp[(2) - (2)]);
   1628     }
   1629     break;
   1630 
   1631   case 23:
   1632 
   1633     {
   1634         (yyval) = ~ (yyvsp[(2) - (2)]);
   1635     }
   1636     break;
   1637 
   1638   case 24:
   1639 
   1640     {
   1641         (yyval) = - (yyvsp[(2) - (2)]);
   1642     }
   1643     break;
   1644 
   1645   case 25:
   1646 
   1647     {
   1648         (yyval) = + (yyvsp[(2) - (2)]);
   1649     }
   1650     break;
   1651 
   1652   case 26:
   1653 
   1654     {
   1655         (yyval) = (yyvsp[(2) - (3)]);
   1656     }
   1657     break;
   1658 
   1659 
   1660 
   1661       default: break;
   1662     }
   1663   /* User semantic actions sometimes alter yychar, and that requires
   1664      that yytoken be updated with the new translation.  We take the
   1665      approach of translating immediately before every use of yytoken.
   1666      One alternative is translating here after every semantic action,
   1667      but that translation would be missed if the semantic action invokes
   1668      YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
   1669      if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
   1670      incorrect destructor might then be invoked immediately.  In the
   1671      case of YYERROR or YYBACKUP, subsequent parser actions might lead
   1672      to an incorrect destructor call or verbose syntax error message
   1673      before the lookahead is translated.  */
   1674   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
   1675 
   1676   YYPOPSTACK (yylen);
   1677   yylen = 0;
   1678   YY_STACK_PRINT (yyss, yyssp);
   1679 
   1680   *++yyvsp = yyval;
   1681 
   1682   /* Now `shift' the result of the reduction.  Determine what state
   1683      that goes to, based on the state we popped back to and the rule
   1684      number reduced by.  */
   1685 
   1686   yyn = yyr1[yyn];
   1687 
   1688   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
   1689   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
   1690     yystate = yytable[yystate];
   1691   else
   1692     yystate = yydefgoto[yyn - YYNTOKENS];
   1693 
   1694   goto yynewstate;
   1695 
   1696 
   1697 /*------------------------------------.
   1698 | yyerrlab -- here on detecting error |
   1699 `------------------------------------*/
   1700 yyerrlab:
   1701   /* Make sure we have latest lookahead translation.  See comments at
   1702      user semantic actions for why this is necessary.  */
   1703   yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
   1704 
   1705   /* If not already recovering from an error, report this error.  */
   1706   if (!yyerrstatus)
   1707     {
   1708       ++yynerrs;
   1709 #if ! YYERROR_VERBOSE
   1710       yyerror (context, YY_("syntax error"));
   1711 #else
   1712 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
   1713                                         yyssp, yytoken)
   1714       {
   1715         char const *yymsgp = YY_("syntax error");
   1716         int yysyntax_error_status;
   1717         yysyntax_error_status = YYSYNTAX_ERROR;
   1718         if (yysyntax_error_status == 0)
   1719           yymsgp = yymsg;
   1720         else if (yysyntax_error_status == 1)
   1721           {
   1722             if (yymsg != yymsgbuf)
   1723               YYSTACK_FREE (yymsg);
   1724             yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
   1725             if (!yymsg)
   1726               {
   1727                 yymsg = yymsgbuf;
   1728                 yymsg_alloc = sizeof yymsgbuf;
   1729                 yysyntax_error_status = 2;
   1730               }
   1731             else
   1732               {
   1733                 yysyntax_error_status = YYSYNTAX_ERROR;
   1734                 yymsgp = yymsg;
   1735               }
   1736           }
   1737         yyerror (context, yymsgp);
   1738         if (yysyntax_error_status == 2)
   1739           goto yyexhaustedlab;
   1740       }
   1741 # undef YYSYNTAX_ERROR
   1742 #endif
   1743     }
   1744 
   1745 
   1746 
   1747   if (yyerrstatus == 3)
   1748     {
   1749       /* If just tried and failed to reuse lookahead token after an
   1750 	 error, discard it.  */
   1751 
   1752       if (yychar <= YYEOF)
   1753 	{
   1754 	  /* Return failure if at end of input.  */
   1755 	  if (yychar == YYEOF)
   1756 	    YYABORT;
   1757 	}
   1758       else
   1759 	{
   1760 	  yydestruct ("Error: discarding",
   1761 		      yytoken, &yylval, context);
   1762 	  yychar = YYEMPTY;
   1763 	}
   1764     }
   1765 
   1766   /* Else will try to reuse lookahead token after shifting the error
   1767      token.  */
   1768   goto yyerrlab1;
   1769 
   1770 
   1771 /*---------------------------------------------------.
   1772 | yyerrorlab -- error raised explicitly by YYERROR.  |
   1773 `---------------------------------------------------*/
   1774 yyerrorlab:
   1775 
   1776   /* Pacify compilers like GCC when the user code never invokes
   1777      YYERROR and the label yyerrorlab therefore never appears in user
   1778      code.  */
   1779   if (/*CONSTCOND*/ 0)
   1780      goto yyerrorlab;
   1781 
   1782   /* Do not reclaim the symbols of the rule which action triggered
   1783      this YYERROR.  */
   1784   YYPOPSTACK (yylen);
   1785   yylen = 0;
   1786   YY_STACK_PRINT (yyss, yyssp);
   1787   yystate = *yyssp;
   1788   goto yyerrlab1;
   1789 
   1790 
   1791 /*-------------------------------------------------------------.
   1792 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
   1793 `-------------------------------------------------------------*/
   1794 yyerrlab1:
   1795   yyerrstatus = 3;	/* Each real token shifted decrements this.  */
   1796 
   1797   for (;;)
   1798     {
   1799       yyn = yypact[yystate];
   1800       if (!yypact_value_is_default (yyn))
   1801 	{
   1802 	  yyn += YYTERROR;
   1803 	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
   1804 	    {
   1805 	      yyn = yytable[yyn];
   1806 	      if (0 < yyn)
   1807 		break;
   1808 	    }
   1809 	}
   1810 
   1811       /* Pop the current state because it cannot handle the error token.  */
   1812       if (yyssp == yyss)
   1813 	YYABORT;
   1814 
   1815 
   1816       yydestruct ("Error: popping",
   1817 		  yystos[yystate], yyvsp, context);
   1818       YYPOPSTACK (1);
   1819       yystate = *yyssp;
   1820       YY_STACK_PRINT (yyss, yyssp);
   1821     }
   1822 
   1823   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   1824   *++yyvsp = yylval;
   1825   YY_IGNORE_MAYBE_UNINITIALIZED_END
   1826 
   1827 
   1828   /* Shift the error token.  */
   1829   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
   1830 
   1831   yystate = yyn;
   1832   goto yynewstate;
   1833 
   1834 
   1835 /*-------------------------------------.
   1836 | yyacceptlab -- YYACCEPT comes here.  |
   1837 `-------------------------------------*/
   1838 yyacceptlab:
   1839   yyresult = 0;
   1840   goto yyreturn;
   1841 
   1842 /*-----------------------------------.
   1843 | yyabortlab -- YYABORT comes here.  |
   1844 `-----------------------------------*/
   1845 yyabortlab:
   1846   yyresult = 1;
   1847   goto yyreturn;
   1848 
   1849 #if !defined yyoverflow || YYERROR_VERBOSE
   1850 /*-------------------------------------------------.
   1851 | yyexhaustedlab -- memory exhaustion comes here.  |
   1852 `-------------------------------------------------*/
   1853 yyexhaustedlab:
   1854   yyerror (context, YY_("memory exhausted"));
   1855   yyresult = 2;
   1856   /* Fall through.  */
   1857 #endif
   1858 
   1859 yyreturn:
   1860   if (yychar != YYEMPTY)
   1861     {
   1862       /* Make sure we have latest lookahead translation.  See comments at
   1863          user semantic actions for why this is necessary.  */
   1864       yytoken = YYTRANSLATE (yychar);
   1865       yydestruct ("Cleanup: discarding lookahead",
   1866                   yytoken, &yylval, context);
   1867     }
   1868   /* Do not reclaim the symbols of the rule which action triggered
   1869      this YYABORT or YYACCEPT.  */
   1870   YYPOPSTACK (yylen);
   1871   YY_STACK_PRINT (yyss, yyssp);
   1872   while (yyssp != yyss)
   1873     {
   1874       yydestruct ("Cleanup: popping",
   1875 		  yystos[*yyssp], yyvsp, context);
   1876       YYPOPSTACK (1);
   1877     }
   1878 #ifndef yyoverflow
   1879   if (yyss != yyssa)
   1880     YYSTACK_FREE (yyss);
   1881 #endif
   1882 #if YYERROR_VERBOSE
   1883   if (yymsg != yymsgbuf)
   1884     YYSTACK_FREE (yymsg);
   1885 #endif
   1886   /* Make sure YYID is used.  */
   1887   return YYID (yyresult);
   1888 }
   1889 
   1890 
   1891 
   1892 
   1893 
   1894 int yylex(YYSTYPE *lvalp, Context *context)
   1895 {
   1896     int type = 0;
   1897 
   1898     pp::Token *token = context->token;
   1899     switch (token->type)
   1900     {
   1901       case pp::Token::CONST_INT: {
   1902         unsigned int val = 0;
   1903         if (!token->uValue(&val))
   1904         {
   1905             context->diagnostics->report(pp::Diagnostics::PP_INTEGER_OVERFLOW,
   1906                                          token->location, token->text);
   1907         }
   1908         *lvalp = static_cast<YYSTYPE>(val);
   1909         type = TOK_CONST_INT;
   1910         break;
   1911       }
   1912       case pp::Token::OP_OR:
   1913         type = TOK_OP_OR;
   1914         break;
   1915       case pp::Token::OP_AND:
   1916         type = TOK_OP_AND;
   1917         break;
   1918       case pp::Token::OP_NE:
   1919         type = TOK_OP_NE;
   1920         break;
   1921       case pp::Token::OP_EQ:
   1922         type = TOK_OP_EQ;
   1923         break;
   1924       case pp::Token::OP_GE:
   1925         type = TOK_OP_GE;
   1926         break;
   1927       case pp::Token::OP_LE:
   1928         type = TOK_OP_LE;
   1929         break;
   1930       case pp::Token::OP_RIGHT:
   1931         type = TOK_OP_RIGHT;
   1932         break;
   1933       case pp::Token::OP_LEFT:
   1934         type = TOK_OP_LEFT;
   1935         break;
   1936       case '|':
   1937       case '^':
   1938       case '&':
   1939       case '>':
   1940       case '<':
   1941       case '-':
   1942       case '+':
   1943       case '%':
   1944       case '/':
   1945       case '*':
   1946       case '!':
   1947       case '~':
   1948       case '(':
   1949       case ')':
   1950         type = token->type;
   1951         break;
   1952 
   1953       default:
   1954         break;
   1955     }
   1956 
   1957     // Advance to the next token if the current one is valid.
   1958     if (type != 0)
   1959         context->lexer->lex(token);
   1960 
   1961     return type;
   1962 }
   1963 
   1964 void yyerror(Context *context, const char *reason)
   1965 {
   1966     context->diagnostics->report(pp::Diagnostics::PP_INVALID_EXPRESSION,
   1967                                  context->token->location,
   1968                                  reason);
   1969 }
   1970 
   1971 namespace pp {
   1972 
   1973 ExpressionParser::ExpressionParser(Lexer *lexer, Diagnostics *diagnostics)
   1974     : mLexer(lexer),
   1975       mDiagnostics(diagnostics)
   1976 {
   1977 }
   1978 
   1979 bool ExpressionParser::parse(Token *token, int *result)
   1980 {
   1981     Context context;
   1982     context.diagnostics = mDiagnostics;
   1983     context.lexer = mLexer;
   1984     context.token = token;
   1985     context.result = result;
   1986     int ret = yyparse(&context);
   1987     switch (ret)
   1988     {
   1989       case 0:
   1990       case 1:
   1991         break;
   1992 
   1993       case 2:
   1994         mDiagnostics->report(Diagnostics::PP_OUT_OF_MEMORY, token->location, "");
   1995         break;
   1996 
   1997       default:
   1998         assert(false);
   1999         mDiagnostics->report(Diagnostics::PP_INTERNAL_ERROR, token->location, "");
   2000         break;
   2001     }
   2002 
   2003     return ret == 0;
   2004 }
   2005 
   2006 }  // namespace pp
   2007