Main Page   Modules   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

parser.c

Go to the documentation of this file.
00001 
00002 /*  A Bison parser, made from parser.y
00003     by GNU Bison version 1.28  */
00004 
00005 #define YYBISON 1  /* Identify Bison output.  */
00006 
00007 #define TOK_OPTIONS 257
00008 #define TOK_TOKEN 258
00009 #define TOK_SCANNER 259
00010 #define TOK_CODE  260
00011 #define TOK_SPECIAL 261
00012 #define TOK_SKIP  262
00013 #define TOK_MORE  263
00014 #define TOK_KEYWORD 264
00015 #define TOK_PARSER  265
00016 #define TOK_LOOKAHEAD 266
00017 #define TOK_THROW 267
00018 #define TOK_CATCH 268
00019 #define TOK_LBRACE  269
00020 #define TOK_RBRACE  270
00021 #define TOK_LPAREN  271
00022 #define TOK_RPAREN  272
00023 #define TOK_LBRACKET  273
00024 #define TOK_RBRACKET  274
00025 #define TOK_EQUAL 275
00026 #define TOK_COMMA 276
00027 #define TOK_SEMICOLON 277
00028 #define TOK_TWODOTS 278
00029 #define TOK_STAR  279
00030 #define TOK_HASH  280
00031 #define TOK_OR  281
00032 #define TOK_FORCE 282
00033 #define TOK_PLUS  283
00034 #define TOK_QMARK 284
00035 #define TOK_LSQUARE 285
00036 #define TOK_RSQUARE 286
00037 #define TOK_TILDE 287
00038 #define TOK_DASH  288
00039 #define TOK_NAME  289
00040 #define TOK_STRING  290
00041 #define TOK_NUMBER  291
00042 #define TOK_BOOL  292
00043 #define TOK_CHAR  293
00044 #define TOK_DUMB  294
00045 
00046 #line 1 "parser.y"
00047 
00048 /*
00049  *  File:       parser.y
00050  *              $Id: parser.y,v 1.17 2002/06/23 23:33:08 alec Exp $
00051  *
00052  *  Author:     Alec Panoviciu (alecu@email.com)
00053  * 
00054  *  Comments: the CppCC's parser (YACC implementation, tested only with BISON)
00055  *
00056  *  Revision history:
00057  * 
00058  *  $Log: parser.y,v $
00059  *  Revision 1.17  2002/06/23 23:33:08  alec
00060  *  la-time usercode (force)
00061  *
00062  *  Revision 1.16  2002/06/13 11:40:25  alec
00063  *  added #line stuff
00064  *
00065  *  Revision 1.15  2002/06/05 21:35:25  alec
00066  *  gcc happy
00067  *
00068  *  Revision 1.14  2002/05/31 12:11:09  alec
00069  *  *** empty log message ***
00070  *
00071  *  Revision 1.13  2002/05/27 03:03:02  alec
00072  *  doc update
00073  *
00074  *  Revision 1.12  2002/05/16 21:38:14  alec
00075  *  parser generation done
00076  *
00077  *  Revision 1.11  2002/05/10 07:15:10  alec
00078  *  parser parse tree ok
00079  *
00080  *  Revision 1.10  2002/05/08 18:20:50  alec
00081  *  *** empty log message ***
00082  *
00083  *  Revision 1.9  2002/05/08 10:35:42  alec
00084  *  added keyword tokens support
00085  *
00086  *  Revision 1.8  2002/05/07 10:02:18  alec
00087  *  fixed some bugs & mem leaks; added MORE tokens support
00088  *
00089  *  Revision 1.7  2002/05/04 18:51:16  alec
00090  *  sync
00091  *
00092  *  Revision 1.6  2002/05/04 17:39:22  alec
00093  *  the scanner works (slightly tested)
00094  *
00095  *  Revision 1.5  2002/04/30 16:24:38  alec
00096  *  tested the scanner ptree & vBitVector implementation -> ok
00097  *
00098  *  Revision 1.4  2002/04/29 17:55:41  alec
00099  *  regexps almost done
00100  *
00101  *  Revision 1.3  2002/04/29 09:34:10  alec
00102  *  scanner ptree building compiles
00103  *
00104  */
00105 
00106 /*
00107   Copyright (C) 2002 Alexandru Panoviciu (alecu@email.com)
00108 
00109   This program is free software; you can redistribute it and/or modify
00110   it under the terms of the GNU General Public License as published by
00111   the Free Software Foundation; either version 2 of the License, or
00112   (at your option) any later version.
00113 
00114   This program is distributed in the hope that it will be useful,
00115   but WITHOUT ANY WARRANTY; without even the implied warranty of
00116   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00117   GNU General Public License for more details.
00118 
00119   You should have received a copy of the GNU General Public License
00120   along with this program; if not, write to the Free Software
00121   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00122 
00123 */
00124 
00125 #line 81 "parser.y"
00126  /*all the includes go in here */
00127 #include <stdio.h>
00128 #include <stdlib.h>
00129 #include <string.h>
00130 #include "xalloc.h"
00131 #include "cw_misc.h"
00132 #include "cw_options_recorder.h"
00133 #include "cw_itoken_spec.h"
00134 #include "cw_macro_token_expander.h"
00135 #include "cw_re_node_builder.h"
00136 #include "cw_iscanner_spec.h"
00137 #include "cw_iparser_spec.h"
00138 #include "cw_ebnf_node_builder.h"
00139   
00140 void yyerror (char *s);
00141 
00142  
00143 /* the declas below contain context information passed from one rule to the
00144    other during parsing. */
00145  
00146 #define TKIND_SPECIAL 0
00147 #define TKIND_REG     1
00148 #define TKIND_SKIP    2 
00149 #define TKIND_MORE    3
00150 #define TKIND_KEYWORD 4
00151  
00152 CstringList scannerDecl_tokenStates;
00153 int scannerDecl_tokenKind;
00154  extern int yylineno;
00155 
00156 #line 113 "parser.y"
00157 typedef union {
00158   char *strVal;
00159   void *objVal;
00160   int intVal;
00161   char chrVal;
00162   CstringList strListVal;
00163   CwCharClassList charClassListVal;
00164   CwCharClass*    charClassVal;
00165   CwCatchClauseList catchClauseListVal;
00166   CwCatchClause*  catchClauseVal;
00167   int foo;
00168 } YYSTYPE;
00169 #ifndef YYDEBUG
00170 #define YYDEBUG 1
00171 #endif
00172 
00173 #include <stdio.h>
00174 
00175 #ifndef __cplusplus
00176 #ifndef __STDC__
00177 #define const
00178 #endif
00179 #endif
00180 
00181 
00182 
00183 #define YYFINAL   221
00184 #define YYFLAG    -32768
00185 #define YYNTBASE  41
00186 
00187 #define YYTRANSLATE(x) ((unsigned)(x) <= 294 ? yytranslate[x] : 116)
00188 
00189 static const char yytranslate[] = {     0,
00190      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00191      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00192      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00193      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00194      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00195      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00196      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00197      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00198      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00199      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00200      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00201      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00202      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00203      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00204      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00205      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00206      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00207      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00208      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00209      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00210      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00211      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00212      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00213      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00214      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00215      2,     2,     2,     2,     2,     1,     3,     4,     5,     6,
00216      7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
00217     17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
00218     27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
00219     37,    38,    39,    40
00220 };
00221 
00222 #if YYDEBUG != 0
00223 static const short yyprhs[] = {     0,
00224      0,     1,     7,     8,    10,    15,    19,    21,    24,    26,
00225     29,    33,    37,    41,    42,    43,    44,    53,    54,    55,
00226     56,    67,    69,    72,    74,    75,    82,    83,    90,    91,
00227     98,    99,   106,   107,   113,   114,   116,   120,   124,   126,
00228    130,   132,   135,   142,   149,   151,   154,   156,   158,   162,
00229    164,   167,   169,   172,   175,   178,   180,   184,   186,   190,
00230    195,   196,   198,   200,   204,   206,   210,   211,   212,   213,
00231    224,   226,   229,   231,   233,   234,   235,   236,   237,   238,
00232    239,   256,   257,   258,   263,   264,   266,   268,   272,   274,
00233    277,   285,   286,   288,   289,   294,   296,   298,   300,   304,
00234    308,   312,   318,   320,   323,   326,   329,   330,   336,   339,
00235    340,   345,   349,   350,   354,   355,   357,   359,   362,   363,
00236    364,   371,   372,   373,   377,   378,   380,   381
00237 };
00238 
00239 static const short yyrhs[] = {    -1,
00240     43,    42,    48,    52,    78,     0,     0,    44,     0,     3,
00241     15,    45,    16,     0,     3,    15,    16,     0,    46,     0,
00242     45,    46,     0,    47,     0,    47,    23,     0,    35,    21,
00243     36,     0,    35,    21,    37,     0,    35,    21,    38,     0,
00244      0,     0,     0,   113,    49,     4,    35,    50,   111,    51,
00245    114,     0,     0,     0,     0,   113,    53,     5,    35,    54,
00246    111,    55,    15,    56,    16,     0,    57,     0,    56,    57,
00247      0,   114,     0,     0,    63,     8,    58,    15,    66,    16,
00248      0,     0,    63,     9,    59,    15,    66,    16,     0,     0,
00249     63,    10,    60,    15,    66,    16,     0,     0,    63,     4,
00250     61,    15,    66,    16,     0,     0,     7,    62,    15,    68,
00251     16,     0,     0,    64,     0,    19,    65,    20,     0,    19,
00252     25,    20,     0,    35,     0,    65,    22,    35,     0,    67,
00253      0,    66,    67,     0,    19,    26,    35,    24,    69,    20,
00254      0,    19,    35,    24,    69,    20,   113,     0,    35,     0,
00255     68,    35,     0,    70,     0,    71,     0,    70,    27,    71,
00256      0,    72,     0,    71,    72,     0,    73,     0,    73,    25,
00257      0,    73,    29,     0,    73,    30,     0,    36,     0,    19,
00258     35,    20,     0,    74,     0,    17,    70,    18,     0,    75,
00259     31,    76,    32,     0,     0,    33,     0,    77,     0,    76,
00260     22,    77,     0,    39,     0,    39,    34,    39,     0,     0,
00261      0,     0,   113,    79,    11,    35,    80,   111,    81,    15,
00262     82,    16,     0,    83,     0,    82,    83,     0,   114,     0,
00263     84,     0,     0,     0,     0,     0,     0,     0,    17,    85,
00264     40,    86,    35,    17,    87,    40,    88,    91,    89,    15,
00265    113,    90,    93,    16,     0,     0,     0,    13,    17,    92,
00266     40,     0,     0,    94,     0,    95,     0,    95,    27,    94,
00267      0,    96,     0,    95,    96,     0,    98,   113,    97,   100,
00268    106,   113,    97,     0,     0,    28,     0,     0,    12,    17,
00269     99,    18,     0,    37,     0,    94,     0,   114,     0,    37,
00270     22,    94,     0,    37,    22,   114,     0,    94,    22,   114,
00271      0,    37,    22,    94,    22,   114,     0,   101,     0,   101,
00272     29,     0,   101,    30,     0,   101,    25,     0,     0,    35,
00273    102,    21,    35,   104,     0,    35,   104,     0,     0,    19,
00274     35,    20,   103,     0,    17,    94,    18,     0,     0,    17,
00275    105,    40,     0,     0,   107,     0,   108,     0,   107,   108,
00276      0,     0,     0,    14,    17,   109,    40,   110,   114,     0,
00277      0,     0,    24,   112,    40,     0,     0,   114,     0,     0,
00278     15,   115,    40,     0
00279 };
00280 
00281 #endif
00282 
00283 #if YYDEBUG != 0
00284 static const short yyrline[] = { 0,
00285    224,   231,   235,   236,   243,   244,   247,   248,   251,   252,
00286    255,   257,   259,   267,   274,   280,   287,   297,   304,   310,
00287    316,   319,   320,   323,   328,   331,   335,   338,   342,   345,
00288    349,   352,   356,   357,   363,   367,   373,   377,   383,   387,
00289    393,   394,   397,   403,   431,   436,   443,   446,   450,   456,
00290    460,   466,   470,   474,   478,   484,   489,   493,   497,   503,
00291    510,   511,   514,   518,   525,   530,   541,   548,   554,   560,
00292    563,   564,   567,   572,   575,   576,   577,   578,   580,   581,
00293    583,   594,   595,   597,   600,   601,   604,   606,   610,   612,
00294    616,   638,   639,   642,   644,   648,   650,   652,   657,   659,
00295    664,   669,   676,   678,   680,   682,   686,   686,   694,   700,
00296    701,   705,   709,   710,   713,   714,   717,   721,   727,   728,
00297    730,   747,   748,   749,   754,   755,   758,   759
00298 };
00299 #endif
00300 
00301 
00302 #if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
00303 
00304 static const char * const yytname[] = {   "$","error","$undefined.","TOK_OPTIONS",
00305 "TOK_TOKEN","TOK_SCANNER","TOK_CODE","TOK_SPECIAL","TOK_SKIP","TOK_MORE","TOK_KEYWORD",
00306 "TOK_PARSER","TOK_LOOKAHEAD","TOK_THROW","TOK_CATCH","TOK_LBRACE","TOK_RBRACE",
00307 "TOK_LPAREN","TOK_RPAREN","TOK_LBRACKET","TOK_RBRACKET","TOK_EQUAL","TOK_COMMA",
00308 "TOK_SEMICOLON","TOK_TWODOTS","TOK_STAR","TOK_HASH","TOK_OR","TOK_FORCE","TOK_PLUS",
00309 "TOK_QMARK","TOK_LSQUARE","TOK_RSQUARE","TOK_TILDE","TOK_DASH","TOK_NAME","TOK_STRING",
00310 "TOK_NUMBER","TOK_BOOL","TOK_CHAR","TOK_DUMB","GRAMMAR_FILE","@1","OPTIONS_SECTION_OPTIONAL",
00311 "OPTIONS_SECTION","OPTIONS_LIST","OPTION_LINE1","OPTION_LINE","TOKEN_CUSTOMIZATION_SECTION",
00312 "@2","@3","@4","LEXICAL_SECTION","@5","@6","@7","SCANNER_DECL_LIST","SCANNER_DECL",
00313 "@8","@9","@10","@11","@12","LEXICAL_STATES_LIST_OPTIONAL","LEXICAL_STATES_LIST",
00314 "STATE_NAME_LIST","TOKEN_DECL_LIST","TOKEN_DECL","SPECIAL_TOKEN_DECL_LIST","TOKEN_REGEXP",
00315 "REGEXP_OR_LIST","REGEXP_CAT_LIST","REGEXP_TERM","REGEXP_ATOM","CHARACTER_LIST",
00316 "NEGATE_OPTIONAL","CHARACTER_DESCRIPTOR_LIST","CHARACTER_DESCRIPTOR","SYNTAX_SECTION",
00317 "@13","@14","@15","PARSER_DECL_LIST","PARSER_DECL","PRODUCTION","@16","@17",
00318 "@18","@19","@20","@21","THROW_CLAUSE_OPTIONAL","@22","OR_LIST_OPTIONAL","OR_LIST",
00319 "CAT_LIST","EXPANSION","FORCE_OPTIONAL","LOOKAHEAD_OPTIONAL","LOOKAHEAD_ARGS",
00320 "FACTOR","ATOM","@23","@24","ACTUAL_ARGS_LIST","@25","CATCH_CLAUSES_OPTIONAL",
00321 "CATCH_CLAUSES_LIST","CATCH_CLAUSE","@26","@27","C_INHERITANCE_OPTIONAL","@28",
00322 "C_BLOCK_OPTIONAL","C_BLOCK","@29", NULL
00323 };
00324 #endif
00325 
00326 static const short yyr1[] = {     0,
00327     42,    41,    43,    43,    44,    44,    45,    45,    46,    46,
00328     47,    47,    47,    49,    50,    51,    48,    53,    54,    55,
00329     52,    56,    56,    57,    58,    57,    59,    57,    60,    57,
00330     61,    57,    62,    57,    63,    63,    64,    64,    65,    65,
00331     66,    66,    67,    67,    68,    68,    69,    70,    70,    71,
00332     71,    72,    72,    72,    72,    73,    73,    73,    73,    74,
00333     75,    75,    76,    76,    77,    77,    79,    80,    81,    78,
00334     82,    82,    83,    83,    85,    86,    87,    88,    89,    90,
00335     84,    91,    92,    91,    93,    93,    94,    94,    95,    95,
00336     96,    97,    97,    98,    98,    99,    99,    99,    99,    99,
00337     99,    99,   100,   100,   100,   100,   102,   101,   101,   103,
00338    101,   101,   105,   104,   106,   106,   107,   107,   109,   110,
00339    108,   111,   112,   111,   113,   113,   115,   114
00340 };
00341 
00342 static const short yyr2[] = {     0,
00343      0,     5,     0,     1,     4,     3,     1,     2,     1,     2,
00344      3,     3,     3,     0,     0,     0,     8,     0,     0,     0,
00345     10,     1,     2,     1,     0,     6,     0,     6,     0,     6,
00346      0,     6,     0,     5,     0,     1,     3,     3,     1,     3,
00347      1,     2,     6,     6,     1,     2,     1,     1,     3,     1,
00348      2,     1,     2,     2,     2,     1,     3,     1,     3,     4,
00349      0,     1,     1,     3,     1,     3,     0,     0,     0,    10,
00350      1,     2,     1,     1,     0,     0,     0,     0,     0,     0,
00351     16,     0,     0,     4,     0,     1,     1,     3,     1,     2,
00352      7,     0,     1,     0,     4,     1,     1,     1,     3,     3,
00353      3,     5,     1,     2,     2,     2,     0,     5,     2,     0,
00354      4,     3,     0,     3,     0,     1,     1,     2,     0,     0,
00355      6,     0,     0,     3,     0,     1,     0,     3
00356 };
00357 
00358 static const short yydefact[] = {     3,
00359      0,     1,     4,     0,   125,     6,     0,     0,     7,     9,
00360    127,   125,    14,   126,     0,     5,     8,    10,     0,   125,
00361     18,     0,    11,    12,    13,   128,     2,    67,     0,     0,
00362      0,     0,    15,     0,    19,   122,    68,   122,   123,    16,
00363    122,    20,     0,     0,    69,     0,   124,    17,     0,    35,
00364      0,    33,     0,    35,    22,     0,    36,    24,    75,     0,
00365     71,    74,    73,     0,     0,    39,     0,    21,    23,    31,
00366     25,    27,    29,     0,    70,    72,     0,    38,    37,     0,
00367      0,     0,     0,     0,    76,    45,     0,    40,     0,     0,
00368      0,     0,     0,    34,    46,     0,     0,    41,     0,     0,
00369      0,     0,     0,     0,    32,    42,    26,    28,    30,    77,
00370      0,    61,     0,    61,    61,     0,    62,    56,     0,    47,
00371     48,    50,    52,    58,     0,    78,     0,     0,     0,   125,
00372     61,    51,    53,    54,    55,     0,    82,    43,    59,    57,
00373     44,    49,    65,     0,    63,     0,    79,     0,     0,    60,
00374     83,     0,    66,    64,     0,   125,    84,    80,    94,     0,
00375      0,    86,    94,    89,   125,    94,    81,    94,    90,    92,
00376     96,    97,     0,    98,    88,    93,     0,    94,     0,    95,
00377     94,     0,   107,   115,   103,    99,   100,   101,     0,     0,
00378    113,     0,   109,     0,   125,   116,   117,   106,   104,   105,
00379      0,   112,   110,     0,     0,   119,    92,   118,   102,   111,
00380    114,     0,     0,    91,   108,   120,     0,   121,     0,     0,
00381      0
00382 };
00383 
00384 static const short yydefgoto[] = {   219,
00385      5,     2,     3,     8,     9,    10,    12,    22,    36,    44,
00386     20,    29,    38,    46,    54,    55,    82,    83,    84,    81,
00387     64,    56,    57,    67,    97,    98,    87,   119,   120,   121,
00388    122,   123,   124,   125,   144,   145,    27,    31,    41,    49,
00389     60,    61,    62,    74,    93,   113,   137,   152,   159,   147,
00390    155,   161,   162,   163,   164,   177,   165,   173,   184,   185,
00391    192,   210,   193,   204,   195,   196,   197,   213,   217,    40,
00392     43,    13,    14,    19
00393 };
00394 
00395 static const short yypact[] = {     9,
00396     37,-32768,-32768,   -10,    48,-32768,    43,     2,-32768,    55,
00397 -32768,    48,-32768,-32768,    36,-32768,-32768,-32768,    60,    48,
00398 -32768,    97,-32768,-32768,-32768,-32768,-32768,-32768,    98,    69,
00399     91,    70,-32768,    71,-32768,    83,-32768,    83,-32768,-32768,
00400     83,-32768,    73,    48,-32768,    93,-32768,-32768,    94,    42,
00401     12,-32768,   -14,    39,-32768,    58,-32768,-32768,-32768,    79,
00402 -32768,-32768,-32768,    95,    92,-32768,   -15,-32768,-32768,-32768,
00403 -32768,-32768,-32768,    74,-32768,-32768,    76,-32768,-32768,    80,
00404    101,   102,   104,   105,-32768,-32768,     4,-32768,   103,   103,
00405    103,   103,    86,-32768,-32768,    24,    66,-32768,    67,    68,
00406     72,   106,    89,   107,-32768,-32768,-32768,-32768,-32768,-32768,
00407    108,    -2,    87,    -2,    -2,    99,-32768,-32768,   109,   112,
00408     -3,-32768,    40,-32768,   110,-32768,   113,    33,   115,    48,
00409     -2,-32768,-32768,-32768,-32768,   111,   117,-32768,-32768,-32768,
00410 -32768,    -3,   114,    13,-32768,   119,-32768,   116,   111,-32768,
00411 -32768,   125,-32768,-32768,    88,    48,-32768,-32768,    32,   126,
00412    129,-32768,    20,-32768,    48,   -11,-32768,   130,-32768,   118,
00413    127,   132,   133,-32768,-32768,-32768,     5,    77,    48,-32768,
00414    130,   121,   135,   143,    46,   136,-32768,-32768,   141,   142,
00415 -32768,   140,-32768,   146,    48,   143,-32768,-32768,-32768,-32768,
00416     48,-32768,-32768,   124,   131,-32768,   118,-32768,-32768,-32768,
00417 -32768,   135,   128,-32768,-32768,-32768,    48,-32768,   147,   165,
00418 -32768
00419 };
00420 
00421 static const short yypgoto[] = {-32768,
00422 -32768,-32768,-32768,-32768,   159,-32768,-32768,-32768,-32768,-32768,
00423 -32768,-32768,-32768,-32768,-32768,   120,-32768,-32768,-32768,-32768,
00424 -32768,-32768,-32768,-32768,     7,   -20,-32768,    56,    11,    38,
00425   -119,-32768,-32768,-32768,-32768,    22,-32768,-32768,-32768,-32768,
00426 -32768,   122,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
00427 -32768,-32768,  -125,-32768,    10,   -35,-32768,-32768,-32768,-32768,
00428 -32768,-32768,   -37,-32768,-32768,-32768,   -19,-32768,-32768,    52,
00429 -32768,   -12,   -41,-32768
00430 };
00431 
00432 
00433 #define YYLAST    183
00434 
00435 
00436 static const short yytable[] = {    21,
00437    160,   132,    48,    11,    79,     6,    80,    28,    58,    63,
00438     65,     1,    58,   115,   115,   116,   116,    16,    63,    94,
00439     66,   181,   132,   182,     7,   171,    11,   -61,    59,   117,
00440    117,   160,   118,   118,   149,   -87,     7,   -87,    95,   183,
00441    172,   -87,   175,   160,   150,    52,   168,   -85,    52,   103,
00442    139,     4,   186,    11,    68,   189,    11,    53,   104,   131,
00443     53,    70,    11,    15,   133,    71,    72,    73,   134,   135,
00444    198,    23,    24,    25,   199,   200,   106,    18,   106,   106,
00445    106,   105,   107,   108,    96,    96,    96,   109,   160,    42,
00446     96,    11,    45,    11,    75,    59,    99,   100,   101,    26,
00447     30,    34,    32,    33,    35,    37,    39,    50,    51,    77,
00448     86,    78,    47,    85,    88,    89,    90,   141,    91,    92,
00449    102,    96,   110,   111,   174,   128,   126,   157,   130,   146,
00450    112,   114,   138,   129,   140,   151,   187,   188,   131,   156,
00451    136,   160,   166,   158,   167,   176,   220,   148,   178,   143,
00452    180,   191,   170,   179,   153,   190,   194,   201,   202,   209,
00453    205,   203,   206,   211,   221,   212,    17,   216,   142,   127,
00454    154,   214,   169,    69,   215,   218,   208,     0,     0,     0,
00455      0,    76,   207
00456 };
00457 
00458 static const short yycheck[] = {    12,
00459     12,   121,    44,    15,    20,    16,    22,    20,    50,    51,
00460     25,     3,    54,    17,    17,    19,    19,    16,    60,    16,
00461     35,    17,   142,    19,    35,    37,    15,    31,    17,    33,
00462     33,    12,    36,    36,    22,    16,    35,    18,    35,    35,
00463    166,    22,   168,    12,    32,     7,    27,    16,     7,    26,
00464     18,    15,   178,    15,    16,   181,    15,    19,    35,    27,
00465     19,     4,    15,    21,    25,     8,     9,    10,    29,    30,
00466     25,    36,    37,    38,    29,    30,    97,    23,    99,   100,
00467    101,    16,    16,    16,    19,    19,    19,    16,    12,    38,
00468     19,    15,    41,    15,    16,    17,    90,    91,    92,    40,
00469      4,    11,     5,    35,    35,    35,    24,    15,    15,    15,
00470     35,    20,    40,    40,    35,    15,    15,   130,    15,    15,
00471     35,    19,    17,    35,   166,   115,    40,    40,    20,    13,
00472     24,    24,    20,    35,    20,    17,   178,   179,    27,    15,
00473     31,    12,    17,   156,    16,    28,     0,    34,    22,    39,
00474     18,    17,   165,    22,    39,    35,    14,    22,    18,   201,
00475     21,    20,    17,    40,     0,    35,     8,    40,   131,   114,
00476    149,   207,   163,    54,   212,   217,   196,    -1,    -1,    -1,
00477     -1,    60,   195
00478 };
00479 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
00480 #line 3 "/usr/lib/bison.simple"
00481 /* This file comes from bison-1.28.  */
00482 
00483 /* Skeleton output parser for bison,
00484    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
00485 
00486    This program is free software; you can redistribute it and/or modify
00487    it under the terms of the GNU General Public License as published by
00488    the Free Software Foundation; either version 2, or (at your option)
00489    any later version.
00490 
00491    This program is distributed in the hope that it will be useful,
00492    but WITHOUT ANY WARRANTY; without even the implied warranty of
00493    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00494    GNU General Public License for more details.
00495 
00496    You should have received a copy of the GNU General Public License
00497    along with this program; if not, write to the Free Software
00498    Foundation, Inc., 59 Temple Place - Suite 330,
00499    Boston, MA 02111-1307, USA.  */
00500 
00501 /* As a special exception, when this file is copied by Bison into a
00502    Bison output file, you may use that output file without restriction.
00503    This special exception was added by the Free Software Foundation
00504    in version 1.24 of Bison.  */
00505 
00506 /* This is the parser code that is written into each bison parser
00507   when the %semantic_parser declaration is not specified in the grammar.
00508   It was written by Richard Stallman by simplifying the hairy parser
00509   used when %semantic_parser is specified.  */
00510 
00511 #ifndef YYSTACK_USE_ALLOCA
00512 #ifdef alloca
00513 #define YYSTACK_USE_ALLOCA
00514 #else /* alloca not defined */
00515 #ifdef __GNUC__
00516 #define YYSTACK_USE_ALLOCA
00517 #define alloca __builtin_alloca
00518 #else /* not GNU C.  */
00519 #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
00520 #define YYSTACK_USE_ALLOCA
00521 #include <alloca.h>
00522 #else /* not sparc */
00523 /* We think this test detects Watcom and Microsoft C.  */
00524 /* This used to test MSDOS, but that is a bad idea
00525    since that symbol is in the user namespace.  */
00526 #if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
00527 #if 0 /* No need for malloc.h, which pollutes the namespace;
00528    instead, just don't use alloca.  */
00529 #include <malloc.h>
00530 #endif
00531 #else /* not MSDOS, or __TURBOC__ */
00532 #if defined(_AIX)
00533 /* I don't know what this was needed for, but it pollutes the namespace.
00534    So I turned it off.   rms, 2 May 1997.  */
00535 /* #include <malloc.h>  */
00536  #pragma alloca
00537 #define YYSTACK_USE_ALLOCA
00538 #else /* not MSDOS, or __TURBOC__, or _AIX */
00539 #if 0
00540 #ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
00541      and on HPUX 10.  Eventually we can turn this on.  */
00542 #define YYSTACK_USE_ALLOCA
00543 #define alloca __builtin_alloca
00544 #endif /* __hpux */
00545 #endif
00546 #endif /* not _AIX */
00547 #endif /* not MSDOS, or __TURBOC__ */
00548 #endif /* not sparc */
00549 #endif /* not GNU C */
00550 #endif /* alloca not defined */
00551 #endif /* YYSTACK_USE_ALLOCA not defined */
00552 
00553 #ifdef YYSTACK_USE_ALLOCA
00554 #define YYSTACK_ALLOC alloca
00555 #else
00556 #define YYSTACK_ALLOC malloc
00557 #endif
00558 
00559 /* Note: there must be only one dollar sign in this file.
00560    It is replaced by the list of actions, each action
00561    as one case of the switch.  */
00562 
00563 #define yyerrok   (yyerrstatus = 0)
00564 #define yyclearin (yychar = YYEMPTY)
00565 #define YYEMPTY   -2
00566 #define YYEOF   0
00567 #define YYACCEPT  goto yyacceptlab
00568 #define YYABORT   goto yyabortlab
00569 #define YYERROR   goto yyerrlab1
00570 /* Like YYERROR except do call yyerror.
00571    This remains here temporarily to ease the
00572    transition to the new meaning of YYERROR, for GCC.
00573    Once GCC version 2 has supplanted version 1, this can go.  */
00574 #define YYFAIL    goto yyerrlab
00575 #define YYRECOVERING()  (!!yyerrstatus)
00576 #define YYBACKUP(token, value) \
00577 do                \
00578   if (yychar == YYEMPTY && yylen == 1)        \
00579     { yychar = (token), yylval = (value);     \
00580       yychar1 = YYTRANSLATE (yychar);       \
00581       YYPOPSTACK;           \
00582       goto yybackup;            \
00583     }               \
00584   else                \
00585     { yyerror ("syntax error: cannot back up"); YYERROR; }  \
00586 while (0)
00587 
00588 #define YYTERROR  1
00589 #define YYERRCODE 256
00590 
00591 #ifndef YYPURE
00592 #define YYLEX   yylex()
00593 #endif
00594 
00595 #ifdef YYPURE
00596 #ifdef YYLSP_NEEDED
00597 #ifdef YYLEX_PARAM
00598 #define YYLEX   yylex(&yylval, &yylloc, YYLEX_PARAM)
00599 #else
00600 #define YYLEX   yylex(&yylval, &yylloc)
00601 #endif
00602 #else /* not YYLSP_NEEDED */
00603 #ifdef YYLEX_PARAM
00604 #define YYLEX   yylex(&yylval, YYLEX_PARAM)
00605 #else
00606 #define YYLEX   yylex(&yylval)
00607 #endif
00608 #endif /* not YYLSP_NEEDED */
00609 #endif
00610 
00611 /* If nonreentrant, generate the variables here */
00612 
00613 #ifndef YYPURE
00614 
00615 int yychar;     /*  the lookahead symbol    */
00616 YYSTYPE yylval;     /*  the semantic value of the   */
00617         /*  lookahead symbol      */
00618 
00619 #ifdef YYLSP_NEEDED
00620 YYLTYPE yylloc;     /*  location data for the lookahead */
00621         /*  symbol        */
00622 #endif
00623 
00624 int yynerrs;      /*  number of parse errors so far       */
00625 #endif  /* not YYPURE */
00626 
00627 #if YYDEBUG != 0
00628 int yydebug;      /*  nonzero means print parse trace */
00629 /* Since this is uninitialized, it does not stop multiple parsers
00630    from coexisting.  */
00631 #endif
00632 
00633 /*  YYINITDEPTH indicates the initial size of the parser's stacks */
00634 
00635 #ifndef YYINITDEPTH
00636 #define YYINITDEPTH 200
00637 #endif
00638 
00639 /*  YYMAXDEPTH is the maximum size the stacks can grow to
00640     (effective only if the built-in stack extension method is used).  */
00641 
00642 #if YYMAXDEPTH == 0
00643 #undef YYMAXDEPTH
00644 #endif
00645 
00646 #ifndef YYMAXDEPTH
00647 #define YYMAXDEPTH 10000
00648 #endif
00649 
00650 /* Define __yy_memcpy.  Note that the size argument
00651    should be passed with type unsigned int, because that is what the non-GCC
00652    definitions require.  With GCC, __builtin_memcpy takes an arg
00653    of type size_t, but it can handle unsigned int.  */
00654 
00655 #if __GNUC__ > 1    /* GNU C and GNU C++ define this.  */
00656 #define __yy_memcpy(TO,FROM,COUNT)  __builtin_memcpy(TO,FROM,COUNT)
00657 #else       /* not GNU C or C++ */
00658 #ifndef __cplusplus
00659 
00660 /* This is the most reliable way to avoid incompatibilities
00661    in available built-in functions on various systems.  */
00662 static void
00663 __yy_memcpy (to, from, count)
00664      char *to;
00665      char *from;
00666      unsigned int count;
00667 {
00668   register char *f = from;
00669   register char *t = to;
00670   register int i = count;
00671 
00672   while (i-- > 0)
00673     *t++ = *f++;
00674 }
00675 
00676 #else /* __cplusplus */
00677 
00678 /* This is the most reliable way to avoid incompatibilities
00679    in available built-in functions on various systems.  */
00680 static void
00681 __yy_memcpy (char *to, char *from, unsigned int count)
00682 {
00683   register char *t = to;
00684   register char *f = from;
00685   register int i = count;
00686 
00687   while (i-- > 0)
00688     *t++ = *f++;
00689 }
00690 
00691 #endif
00692 #endif
00693 
00694 #line 217 "/usr/lib/bison.simple"
00695 
00696 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
00697    into yyparse.  The argument should have type void *.
00698    It should actually point to an object.
00699    Grammar actions can access the variable by casting it
00700    to the proper pointer type.  */
00701 
00702 #ifdef YYPARSE_PARAM
00703 #ifdef __cplusplus
00704 #define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
00705 #define YYPARSE_PARAM_DECL
00706 #else /* not __cplusplus */
00707 #define YYPARSE_PARAM_ARG YYPARSE_PARAM
00708 #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
00709 #endif /* not __cplusplus */
00710 #else /* not YYPARSE_PARAM */
00711 #define YYPARSE_PARAM_ARG
00712 #define YYPARSE_PARAM_DECL
00713 #endif /* not YYPARSE_PARAM */
00714 
00715 /* Prevent warning if -Wstrict-prototypes.  */
00716 #ifdef __GNUC__
00717 #ifdef YYPARSE_PARAM
00718 int yyparse (void *);
00719 #else
00720 int yyparse (void);
00721 #endif
00722 #endif
00723 
00724 int
00725 yyparse(YYPARSE_PARAM_ARG)
00726      YYPARSE_PARAM_DECL
00727 {
00728   register int yystate;
00729   register int yyn;
00730   register short *yyssp;
00731   register YYSTYPE *yyvsp;
00732   int yyerrstatus;  /*  number of tokens to shift before error messages enabled */
00733   int yychar1 = 0;    /*  lookahead token as an internal (translated) token number */
00734 
00735   short yyssa[YYINITDEPTH]; /*  the state stack     */
00736   YYSTYPE yyvsa[YYINITDEPTH]; /*  the semantic value stack    */
00737 
00738   short *yyss = yyssa;    /*  refer to the stacks thru separate pointers */
00739   YYSTYPE *yyvs = yyvsa;  /*  to allow yyoverflow to reallocate them elsewhere */
00740 
00741 #ifdef YYLSP_NEEDED
00742   YYLTYPE yylsa[YYINITDEPTH]; /*  the location stack      */
00743   YYLTYPE *yyls = yylsa;
00744   YYLTYPE *yylsp;
00745 
00746 #define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
00747 #else
00748 #define YYPOPSTACK   (yyvsp--, yyssp--)
00749 #endif
00750 
00751   int yystacksize = YYINITDEPTH;
00752   int yyfree_stacks = 0;
00753 
00754 #ifdef YYPURE
00755   int yychar;
00756   YYSTYPE yylval;
00757   int yynerrs;
00758 #ifdef YYLSP_NEEDED
00759   YYLTYPE yylloc;
00760 #endif
00761 #endif
00762 
00763   YYSTYPE yyval;    /*  the variable used to return   */
00764         /*  semantic values from the action */
00765         /*  routines        */
00766 
00767   int yylen;
00768 
00769 #if YYDEBUG != 0
00770   if (yydebug)
00771     fprintf(stderr, "Starting parse\n");
00772 #endif
00773 
00774   yystate = 0;
00775   yyerrstatus = 0;
00776   yynerrs = 0;
00777   yychar = YYEMPTY;   /* Cause a token to be read.  */
00778 
00779   /* Initialize stack pointers.
00780      Waste one element of value and location stack
00781      so that they stay on the same level as the state stack.
00782      The wasted elements are never initialized.  */
00783 
00784   yyssp = yyss - 1;
00785   yyvsp = yyvs;
00786 #ifdef YYLSP_NEEDED
00787   yylsp = yyls;
00788 #endif
00789 
00790 /* Push a new state, which is found in  yystate  .  */
00791 /* In all cases, when you get here, the value and location stacks
00792    have just been pushed. so pushing a state here evens the stacks.  */
00793 yynewstate:
00794 
00795   *++yyssp = yystate;
00796 
00797   if (yyssp >= yyss + yystacksize - 1)
00798     {
00799       /* Give user a chance to reallocate the stack */
00800       /* Use copies of these so that the &'s don't force the real ones into memory. */
00801       YYSTYPE *yyvs1 = yyvs;
00802       short *yyss1 = yyss;
00803 #ifdef YYLSP_NEEDED
00804       YYLTYPE *yyls1 = yyls;
00805 #endif
00806 
00807       /* Get the current used size of the three stacks, in elements.  */
00808       int size = yyssp - yyss + 1;
00809 
00810 #ifdef yyoverflow
00811       /* Each stack pointer address is followed by the size of
00812    the data in use in that stack, in bytes.  */
00813 #ifdef YYLSP_NEEDED
00814       /* This used to be a conditional around just the two extra args,
00815    but that might be undefined if yyoverflow is a macro.  */
00816       yyoverflow("parser stack overflow",
00817      &yyss1, size * sizeof (*yyssp),
00818      &yyvs1, size * sizeof (*yyvsp),
00819      &yyls1, size * sizeof (*yylsp),
00820      &yystacksize);
00821 #else
00822       yyoverflow("parser stack overflow",
00823      &yyss1, size * sizeof (*yyssp),
00824      &yyvs1, size * sizeof (*yyvsp),
00825      &yystacksize);
00826 #endif
00827 
00828       yyss = yyss1; yyvs = yyvs1;
00829 #ifdef YYLSP_NEEDED
00830       yyls = yyls1;
00831 #endif
00832 #else /* no yyoverflow */
00833       /* Extend the stack our own way.  */
00834       if (yystacksize >= YYMAXDEPTH)
00835   {
00836     yyerror("parser stack overflow");
00837     if (yyfree_stacks)
00838       {
00839         free (yyss);
00840         free (yyvs);
00841 #ifdef YYLSP_NEEDED
00842         free (yyls);
00843 #endif
00844       }
00845     return 2;
00846   }
00847       yystacksize *= 2;
00848       if (yystacksize > YYMAXDEPTH)
00849   yystacksize = YYMAXDEPTH;
00850 #ifndef YYSTACK_USE_ALLOCA
00851       yyfree_stacks = 1;
00852 #endif
00853       yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
00854       __yy_memcpy ((char *)yyss, (char *)yyss1,
00855        size * (unsigned int) sizeof (*yyssp));
00856       yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
00857       __yy_memcpy ((char *)yyvs, (char *)yyvs1,
00858        size * (unsigned int) sizeof (*yyvsp));
00859 #ifdef YYLSP_NEEDED
00860       yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
00861       __yy_memcpy ((char *)yyls, (char *)yyls1,
00862        size * (unsigned int) sizeof (*yylsp));
00863 #endif
00864 #endif /* no yyoverflow */
00865 
00866       yyssp = yyss + size - 1;
00867       yyvsp = yyvs + size - 1;
00868 #ifdef YYLSP_NEEDED
00869       yylsp = yyls + size - 1;
00870 #endif
00871 
00872 #if YYDEBUG != 0
00873       if (yydebug)
00874   fprintf(stderr, "Stack size increased to %d\n", yystacksize);
00875 #endif
00876 
00877       if (yyssp >= yyss + yystacksize - 1)
00878   YYABORT;
00879     }
00880 
00881 #if YYDEBUG != 0
00882   if (yydebug)
00883     fprintf(stderr, "Entering state %d\n", yystate);
00884 #endif
00885 
00886   goto yybackup;
00887  yybackup:
00888 
00889 /* Do appropriate processing given the current state.  */
00890 /* Read a lookahead token if we need one and don't already have one.  */
00891 /* yyresume: */
00892 
00893   /* First try to decide what to do without reference to lookahead token.  */
00894 
00895   yyn = yypact[yystate];
00896   if (yyn == YYFLAG)
00897     goto yydefault;
00898 
00899   /* Not known => get a lookahead token if don't already have one.  */
00900 
00901   /* yychar is either YYEMPTY or YYEOF
00902      or a valid token in external form.  */
00903 
00904   if (yychar == YYEMPTY)
00905     {
00906 #if YYDEBUG != 0
00907       if (yydebug)
00908   fprintf(stderr, "Reading a token: ");
00909 #endif
00910       yychar = YYLEX;
00911     }
00912 
00913   /* Convert token to internal form (in yychar1) for indexing tables with */
00914 
00915   if (yychar <= 0)    /* This means end of input. */
00916     {
00917       yychar1 = 0;
00918       yychar = YYEOF;   /* Don't call YYLEX any more */
00919 
00920 #if YYDEBUG != 0
00921       if (yydebug)
00922   fprintf(stderr, "Now at end of input.\n");
00923 #endif
00924     }
00925   else
00926     {
00927       yychar1 = YYTRANSLATE(yychar);
00928 
00929 #if YYDEBUG != 0
00930       if (yydebug)
00931   {
00932     fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
00933     /* Give the individual parser a way to print the precise meaning
00934        of a token, for further debugging info.  */
00935 #ifdef YYPRINT
00936     YYPRINT (stderr, yychar, yylval);
00937 #endif
00938     fprintf (stderr, ")\n");
00939   }
00940 #endif
00941     }
00942 
00943   yyn += yychar1;
00944   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
00945     goto yydefault;
00946 
00947   yyn = yytable[yyn];
00948 
00949   /* yyn is what to do for this token type in this state.
00950      Negative => reduce, -yyn is rule number.
00951      Positive => shift, yyn is new state.
00952        New state is final state => don't bother to shift,
00953        just return success.
00954      0, or most negative number => error.  */
00955 
00956   if (yyn < 0)
00957     {
00958       if (yyn == YYFLAG)
00959   goto yyerrlab;
00960       yyn = -yyn;
00961       goto yyreduce;
00962     }
00963   else if (yyn == 0)
00964     goto yyerrlab;
00965 
00966   if (yyn == YYFINAL)
00967     YYACCEPT;
00968 
00969   /* Shift the lookahead token.  */
00970 
00971 #if YYDEBUG != 0
00972   if (yydebug)
00973     fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
00974 #endif
00975 
00976   /* Discard the token being shifted unless it is eof.  */
00977   if (yychar != YYEOF)
00978     yychar = YYEMPTY;
00979 
00980   *++yyvsp = yylval;
00981 #ifdef YYLSP_NEEDED
00982   *++yylsp = yylloc;
00983 #endif
00984 
00985   /* count tokens shifted since error; after three, turn off error status.  */
00986   if (yyerrstatus) yyerrstatus--;
00987 
00988   yystate = yyn;
00989   goto yynewstate;
00990 
00991 /* Do the default action for the current state.  */
00992 yydefault:
00993 
00994   yyn = yydefact[yystate];
00995   if (yyn == 0)
00996     goto yyerrlab;
00997 
00998 /* Do a reduction.  yyn is the number of a rule to reduce with.  */
00999 yyreduce:
01000   yylen = yyr2[yyn];
01001   if (yylen > 0)
01002     yyval = yyvsp[1-yylen]; /* implement default value of the action */
01003 
01004 #if YYDEBUG != 0
01005   if (yydebug)
01006     {
01007       int i;
01008 
01009       fprintf (stderr, "Reducing via rule %d (line %d), ",
01010          yyn, yyrline[yyn]);
01011 
01012       /* Print the symbols being reduced, and their result.  */
01013       for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
01014   fprintf (stderr, "%s ", yytname[yyrhs[i]]);
01015       fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
01016     }
01017 #endif
01018 
01019 
01020   switch (yyn) {
01021 
01022 case 1:
01023 #line 225 "parser.y"
01024 {
01025 #ifdef DEBUG
01026   OptionsRecorder_dumpOptions();
01027 #endif  
01028 ;
01029     break;}
01030 case 3:
01031 #line 235 "parser.y"
01032 { yyval.foo = 0; ;
01033     break;}
01034 case 4:
01035 #line 236 "parser.y"
01036 { yyval.foo = 0; ;
01037     break;}
01038 case 7:
01039 #line 247 "parser.y"
01040 {yyval.foo=0;;
01041     break;}
01042 case 8:
01043 #line 248 "parser.y"
01044 {yyval.foo=0;;
01045     break;}
01046 case 9:
01047 #line 251 "parser.y"
01048 {yyval.foo=0;;
01049     break;}
01050 case 10:
01051 #line 252 "parser.y"
01052 {yyval.foo=0;;
01053     break;}
01054 case 11:
01055 #line 256 "parser.y"
01056 {yyval.foo=0; OptionsRecorder_setStringOption(yyvsp[-2].strVal, yyvsp[0].strVal); ;
01057     break;}
01058 case 12:
01059 #line 258 "parser.y"
01060 {yyval.foo=0; OptionsRecorder_setIntOption(yyvsp[-2].strVal, yyvsp[0].intVal); ;
01061     break;}
01062 case 13:
01063 #line 260 "parser.y"
01064 {yyval.foo=0; OptionsRecorder_setBoolOption(yyvsp[-2].strVal, yyvsp[0].intVal); ;
01065     break;}
01066 case 14:
01067 #line 268 "parser.y"
01068 {
01069   if (yyvsp[0].strVal != NULL) {
01070     ITokenSpec_setPreambleCode(yyvsp[0].strVal);
01071     free(yyvsp[0].strVal);
01072   }
01073 ;
01074     break;}
01075 case 15:
01076 #line 275 "parser.y"
01077 {
01078   ITokenSpec_setClassName(yyvsp[0].strVal);
01079   free(yyvsp[0].strVal);
01080 ;
01081     break;}
01082 case 16:
01083 #line 280 "parser.y"
01084 {
01085   if (yyvsp[0].strVal != NULL) {
01086     ITokenSpec_setInheritance(yyvsp[0].strVal);
01087     free(yyvsp[0].strVal);
01088   }
01089 ;
01090     break;}
01091 case 17:
01092 #line 287 "parser.y"
01093 {
01094   ITokenSpec_addCodeBlock(yyvsp[0].strVal);
01095   free(yyvsp[0].strVal);
01096 ;
01097     break;}
01098 case 18:
01099 #line 298 "parser.y"
01100 {
01101   if (yyvsp[0].strVal != NULL) {
01102     IScannerSpec_setPreambleCode(yyvsp[0].strVal);
01103     free(yyvsp[0].strVal);
01104   }
01105 ;
01106     break;}
01107 case 19:
01108 #line 305 "parser.y"
01109 {
01110   IScannerSpec_setClassName(yyvsp[0].strVal);
01111   free(yyvsp[0].strVal);
01112 ;
01113     break;}
01114 case 20:
01115 #line 310 "parser.y"
01116 {
01117   if (yyvsp[0].strVal != NULL) {
01118     IScannerSpec_setInheritance(yyvsp[0].strVal);
01119     free(yyvsp[0].strVal);
01120   }
01121 ;
01122     break;}
01123 case 22:
01124 #line 319 "parser.y"
01125 {yyval.foo=0;;
01126     break;}
01127 case 23:
01128 #line 320 "parser.y"
01129 {yyval.foo=0;;
01130     break;}
01131 case 24:
01132 #line 324 "parser.y"
01133 {
01134                  IScannerSpec_addCodeBlock(yyvsp[0].strVal);
01135                  free(yyvsp[0].strVal);
01136                ;
01137     break;}
01138 case 25:
01139 #line 330 "parser.y"
01140 { scannerDecl_tokenStates = yyvsp[-1].strListVal; scannerDecl_tokenKind = TKIND_SKIP; ;
01141     break;}
01142 case 26:
01143 #line 332 "parser.y"
01144 {
01145                  deleteCstringList(scannerDecl_tokenStates, 1);
01146                ;
01147     break;}
01148 case 27:
01149 #line 337 "parser.y"
01150 { scannerDecl_tokenStates = yyvsp[-1].strListVal; scannerDecl_tokenKind = TKIND_MORE; ;
01151     break;}
01152 case 28:
01153 #line 339 "parser.y"
01154 {
01155                  deleteCstringList(scannerDecl_tokenStates, 1);
01156                ;
01157     break;}
01158 case 29:
01159 #line 344 "parser.y"
01160 { scannerDecl_tokenStates = yyvsp[-1].strListVal; scannerDecl_tokenKind = TKIND_KEYWORD; ;
01161     break;}
01162 case 30:
01163 #line 346 "parser.y"
01164 {
01165                  deleteCstringList(scannerDecl_tokenStates, 1);
01166                ;
01167     break;}
01168 case 31:
01169 #line 351 "parser.y"
01170 { scannerDecl_tokenStates = yyvsp[-1].strListVal; scannerDecl_tokenKind = TKIND_REG; ;
01171     break;}
01172 case 32:
01173 #line 353 "parser.y"
01174 {
01175                  deleteCstringList(scannerDecl_tokenStates, 1);
01176                ;
01177     break;}
01178 case 33:
01179 #line 356 "parser.y"
01180 {scannerDecl_tokenKind = TKIND_SPECIAL; ;
01181     break;}
01182 case 34:
01183 #line 358 "parser.y"
01184 {
01185                  yyval.foo=0;
01186                ;
01187     break;}
01188 case 35:
01189 #line 364 "parser.y"
01190 {
01191                                  yyval.strListVal = NULL;
01192                                ;
01193     break;}
01194 case 36:
01195 #line 368 "parser.y"
01196 {
01197                                  yyval.strListVal = yyvsp[0].strListVal;
01198                                ;
01199     break;}
01200 case 37:
01201 #line 374 "parser.y"
01202 {
01203                         yyval.strListVal = yyvsp[-1].strListVal;
01204                       ;
01205     break;}
01206 case 38:
01207 #line 378 "parser.y"
01208 {
01209                         yyval.strListVal = appendToCstringList(NULL, xstrdup("*"));
01210                       ;
01211     break;}
01212 case 39:
01213 #line 384 "parser.y"
01214 {
01215                     yyval.strListVal = appendToCstringList (NULL, yyvsp[0].strVal);
01216                   ;
01217     break;}
01218 case 40:
01219 #line 388 "parser.y"
01220 {
01221                     yyval.strListVal = appendToCstringList(yyvsp[-2].strListVal, yyvsp[0].strVal);
01222                   ;
01223     break;}
01224 case 41:
01225 #line 393 "parser.y"
01226 {yyval.foo=0;;
01227     break;}
01228 case 42:
01229 #line 394 "parser.y"
01230 {yyval.foo=0;;
01231     break;}
01232 case 43:
01233 #line 399 "parser.y"
01234 {
01235                MacroTokenExpander_addMacro(yyvsp[-3].strVal, yyvsp[-1].objVal);
01236                free(yyvsp[-3].strVal);
01237              ;
01238     break;}
01239 case 44:
01240 #line 405 "parser.y"
01241 {
01242                switch (scannerDecl_tokenKind)
01243                {
01244                case TKIND_REG:
01245                  MacroTokenExpander_addMacro(yyvsp[-4].strVal, yyvsp[-2].objVal);
01246                  IScannerSpec_addRegToken(scannerDecl_tokenStates, yyvsp[-4].strVal, yyvsp[-2].objVal, yyvsp[0].strVal);
01247                  break;
01248                case TKIND_SKIP:
01249                  MacroTokenExpander_addMacro(yyvsp[-4].strVal, yyvsp[-2].objVal);
01250                  IScannerSpec_addSkipToken(scannerDecl_tokenStates, yyvsp[-4].strVal, yyvsp[-2].objVal, yyvsp[0].strVal);
01251                  break;
01252                case TKIND_MORE:
01253                  MacroTokenExpander_addMacro(yyvsp[-4].strVal, yyvsp[-2].objVal);
01254                  IScannerSpec_addMoreToken(scannerDecl_tokenStates, yyvsp[-4].strVal, yyvsp[-2].objVal, yyvsp[0].strVal);
01255                  break;
01256                case TKIND_KEYWORD:
01257                  MacroTokenExpander_addMacro(yyvsp[-4].strVal, yyvsp[-2].objVal);
01258                  IScannerSpec_addKeywordToken(scannerDecl_tokenStates, yyvsp[-4].strVal, yyvsp[-2].objVal, yyvsp[0].strVal);
01259                  break;
01260                }
01261                free(yyvsp[-4].strVal);
01262                if (yyvsp[0].strVal != NULL)
01263                  free(yyvsp[0].strVal);
01264              ;
01265     break;}
01266 case 45:
01267 #line 432 "parser.y"
01268 {
01269                             IScannerSpec_addSpecialToken(yyvsp[0].strVal);
01270                             free(yyvsp[0].strVal);
01271                           ;
01272     break;}
01273 case 46:
01274 #line 437 "parser.y"
01275 {
01276                             IScannerSpec_addSpecialToken(yyvsp[0].strVal);
01277                             free(yyvsp[0].strVal);
01278                           ;
01279     break;}
01280 case 47:
01281 #line 443 "parser.y"
01282 {yyval.objVal = yyvsp[0].objVal;;
01283     break;}
01284 case 48:
01285 #line 447 "parser.y"
01286 {
01287                    yyval.objVal = yyvsp[0].objVal;
01288                  ;
01289     break;}
01290 case 49:
01291 #line 451 "parser.y"
01292 {
01293                    yyval.objVal = IReNodeBuilder_createOrNode(yyvsp[-2].objVal, yyvsp[0].objVal);
01294                  ;
01295     break;}
01296 case 50:
01297 #line 457 "parser.y"
01298 {
01299                     yyval.objVal = yyvsp[0].objVal;
01300                   ;
01301     break;}
01302 case 51:
01303 #line 461 "parser.y"
01304 {
01305                     yyval.objVal = IReNodeBuilder_createCatNode(yyvsp[-1].objVal, yyvsp[0].objVal);
01306                   ;
01307     break;}
01308 case 52:
01309 #line 467 "parser.y"
01310 {
01311                 yyval.objVal = yyvsp[0].objVal;
01312               ;
01313     break;}
01314 case 53:
01315 #line 471 "parser.y"
01316 {
01317                 yyval.objVal = IReNodeBuilder_createStarNode(yyvsp[-1].objVal);
01318               ;
01319     break;}
01320 case 54:
01321 #line 475 "parser.y"
01322 {
01323                 yyval.objVal = IReNodeBuilder_createPlusNode(yyvsp[-1].objVal);;
01324               ;
01325     break;}
01326 case 55:
01327 #line 479 "parser.y"
01328 {
01329                 yyval.objVal = IReNodeBuilder_createOptionalNode(yyvsp[-1].objVal);
01330               ;
01331     break;}
01332 case 56:
01333 #line 485 "parser.y"
01334 {
01335                 yyval.objVal = IReNodeBuilder_createStringLiteralNode(yyvsp[0].strVal);
01336                 free(yyvsp[0].strVal);
01337               ;
01338     break;}
01339 case 57:
01340 #line 490 "parser.y"
01341 {
01342                 yyval.objVal = MacroTokenExpander_getMacro(yyvsp[-1].strVal);
01343               ;
01344     break;}
01345 case 58:
01346 #line 494 "parser.y"
01347 {
01348                 yyval.objVal = yyvsp[0].objVal;
01349               ;
01350     break;}
01351 case 59:
01352 #line 498 "parser.y"
01353 {
01354                 yyval.objVal = yyvsp[-1].objVal;
01355               ;
01356     break;}
01357 case 60:
01358 #line 504 "parser.y"
01359 {
01360                   yyval.objVal = IReNodeBuilder_createCharListNode(yyvsp[-3].intVal, yyvsp[-1].charClassListVal);
01361                   deleteCwCharClassList(yyvsp[-1].charClassListVal, 1);
01362                 ;
01363     break;}
01364 case 61:
01365 #line 510 "parser.y"
01366 { yyval.intVal = 0; ;
01367     break;}
01368 case 62:
01369 #line 511 "parser.y"
01370 { yyval.intVal = 1; ;
01371     break;}
01372 case 63:
01373 #line 515 "parser.y"
01374 {
01375                               yyval.charClassListVal = appendToCwCharClassList(NULL, yyvsp[0].charClassVal);
01376                             ;
01377     break;}
01378 case 64:
01379 #line 520 "parser.y"
01380 {
01381                               yyval.charClassListVal = appendToCwCharClassList(yyvsp[-2].charClassListVal, yyvsp[0].charClassVal);;
01382                             ;
01383     break;}
01384 case 65:
01385 #line 526 "parser.y"
01386 {
01387                          yyval.charClassVal = (CwCharClass*) malloc(sizeof(CwCharClass));
01388                          yyval.charClassVal->first = yyval.charClassVal->last = yyvsp[0].chrVal;
01389                        ;
01390     break;}
01391 case 66:
01392 #line 531 "parser.y"
01393 {
01394                          yyval.charClassVal = (CwCharClass*) malloc(sizeof(CwCharClass));
01395                          yyval.charClassVal->first = yyvsp[-2].chrVal;
01396                          yyval.charClassVal->last = yyvsp[0].chrVal;
01397                        ;
01398     break;}
01399 case 67:
01400 #line 542 "parser.y"
01401 {
01402   if (yyvsp[0].strVal != NULL) {
01403     IParserSpec_setPreambleCode(yyvsp[0].strVal);
01404     free(yyvsp[0].strVal);
01405   }
01406 ;
01407     break;}
01408 case 68:
01409 #line 549 "parser.y"
01410 {
01411   IParserSpec_setClassName(yyvsp[0].strVal);
01412   free(yyvsp[0].strVal);
01413 ;
01414     break;}
01415 case 69:
01416 #line 554 "parser.y"
01417 {
01418   if (yyvsp[0].strVal != NULL) {
01419     IParserSpec_setInheritance(yyvsp[0].strVal);
01420     free(yyvsp[0].strVal);
01421   }
01422 ;
01423     break;}
01424 case 71:
01425 #line 563 "parser.y"
01426 {yyval.foo=0;;
01427     break;}
01428 case 72:
01429 #line 564 "parser.y"
01430 {yyval.foo=0;;
01431     break;}
01432 case 73:
01433 #line 568 "parser.y"
01434 {
01435                 IParserSpec_addCodeBlock(yyvsp[0].strVal);
01436                 free(yyvsp[0].strVal);
01437               ;
01438     break;}
01439 case 74:
01440 #line 572 "parser.y"
01441 {yyval.foo=0;;
01442     break;}
01443 case 75:
01444 #line 575 "parser.y"
01445 { enterDumbMode('(',')', 0); ;
01446     break;}
01447 case 76:
01448 #line 576 "parser.y"
01449 { yyval.intVal = yylineno; ;
01450     break;}
01451 case 77:
01452 #line 577 "parser.y"
01453 { enterDumbMode('(',')', 0); ;
01454     break;}
01455 case 78:
01456 #line 578 "parser.y"
01457 { yyval.intVal = yylineno; ;
01458     break;}
01459 case 79:
01460 #line 580 "parser.y"
01461 { yyval.intVal = yylineno; ;
01462     break;}
01463 case 80:
01464 #line 582 "parser.y"
01465 { yyval.intVal = yylineno; ;
01466     break;}
01467 case 81:
01468 #line 584 "parser.y"
01469 {
01470   IParserSpec_addProduction(yyvsp[-11].strVal, yyvsp[-13].strVal, yyvsp[-12].intVal, yyvsp[-8].strVal, yyvsp[-7].intVal,
01471                             yyvsp[-6].strVal, yyvsp[-5].intVal, yyvsp[-3].strVal, yyvsp[-2].intVal, yyvsp[-1].objVal);
01472   free(yyvsp[-13].strVal);
01473   free(yyvsp[-8].strVal);
01474   if (yyvsp[-6].strVal != NULL) free(yyvsp[-6].strVal);
01475   if (yyvsp[-3].strVal != NULL) free(yyvsp[-3].strVal);
01476 ;
01477     break;}
01478 case 82:
01479 #line 594 "parser.y"
01480 { yyval.strVal = NULL; ;
01481     break;}
01482 case 83:
01483 #line 595 "parser.y"
01484 {enterDumbMode('(',')', 0); ;
01485     break;}
01486 case 84:
01487 #line 597 "parser.y"
01488 { yyval.strVal = yyvsp[0].strVal; ;
01489     break;}
01490 case 85:
01491 #line 600 "parser.y"
01492 { yyval.objVal = NULL;;
01493     break;}
01494 case 86:
01495 #line 601 "parser.y"
01496 { yyval.objVal = yyvsp[0].objVal;;
01497     break;}
01498 case 87:
01499 #line 605 "parser.y"
01500 { yyval.objVal = yyvsp[0].objVal; ;
01501     break;}
01502 case 88:
01503 #line 607 "parser.y"
01504 {yyval.objVal = IEbnfNodeBuilder_createOrNode(yyvsp[-2].objVal, yyvsp[0].objVal); ;
01505     break;}
01506 case 89:
01507 #line 611 "parser.y"
01508 { yyval.objVal = yyvsp[0].objVal; ;
01509     break;}
01510 case 90:
01511 #line 613 "parser.y"
01512 { yyval.objVal = IEbnfNodeBuilder_createCatNode(yyvsp[-1].objVal, yyvsp[0].objVal); ;
01513     break;}
01514 case 91:
01515 #line 619 "parser.y"
01516 {
01517   yyval.objVal = yyvsp[-3].objVal;
01518   if (yyvsp[-6].objVal != NULL)
01519     IEbnfNodeBuilder_setLookahead(yyval.objVal, yyvsp[-6].objVal);
01520   if (yyvsp[-5].strVal != NULL) {
01521     IEbnfNodeBuilder_setStartCode(yyval.objVal, yyvsp[-5].strVal, yyvsp[-4].intVal);
01522     free(yyvsp[-5].strVal);
01523   }
01524   if (yyvsp[-2].catchClauseListVal != NULL) {
01525     IEbnfNodeBuilder_setCatchClauses(yyval.objVal, yyvsp[-2].catchClauseListVal);
01526     deleteCwCatchClauseList(yyvsp[-2].catchClauseListVal, 1);
01527   }
01528   if (yyvsp[-1].strVal != NULL) {
01529     IEbnfNodeBuilder_setEndCode(yyval.objVal, yyvsp[-1].strVal, yyvsp[0].intVal);
01530     free(yyvsp[-1].strVal);
01531   }
01532 ;
01533     break;}
01534 case 92:
01535 #line 638 "parser.y"
01536 { yyval.intVal = 0; ;
01537     break;}
01538 case 93:
01539 #line 639 "parser.y"
01540 { yyval.intVal = 1; ;
01541     break;}
01542 case 94:
01543 #line 643 "parser.y"
01544 { yyval.objVal = NULL; ;
01545     break;}
01546 case 95:
01547 #line 645 "parser.y"
01548 { yyval.objVal = yyvsp[-1].objVal; ;
01549     break;}
01550 case 96:
01551 #line 649 "parser.y"
01552 { yyval.objVal = IEbnfNodeBuilder_createLaSpec(yyvsp[0].intVal, NULL, NULL); ;
01553     break;}
01554 case 97:
01555 #line 651 "parser.y"
01556 { yyval.objVal = IEbnfNodeBuilder_createLaSpec(0, yyvsp[0].objVal, NULL); ;
01557     break;}
01558 case 98:
01559 #line 653 "parser.y"
01560 {
01561                    yyval.objVal = IEbnfNodeBuilder_createLaSpec(0, NULL, yyvsp[0].strVal);
01562                    free(yyvsp[0].strVal);
01563                  ;
01564     break;}
01565 case 99:
01566 #line 658 "parser.y"
01567 { yyval.objVal = IEbnfNodeBuilder_createLaSpec(yyvsp[-2].intVal, yyvsp[0].objVal, NULL); ;
01568     break;}
01569 case 100:
01570 #line 660 "parser.y"
01571 {
01572                    yyval.objVal = IEbnfNodeBuilder_createLaSpec(yyvsp[-2].intVal, NULL, yyvsp[0].strVal);
01573                    free(yyvsp[0].strVal);
01574                  ;
01575     break;}
01576 case 101:
01577 #line 665 "parser.y"
01578 {
01579                    yyval.objVal = IEbnfNodeBuilder_createLaSpec(0, yyvsp[-2].objVal, yyvsp[0].strVal);
01580                    free(yyvsp[0].strVal);
01581                  ;
01582     break;}
01583 case 102:
01584 #line 670 "parser.y"
01585 {
01586                    yyval.objVal = IEbnfNodeBuilder_createLaSpec(yyvsp[-4].intVal, yyvsp[-2].objVal, yyvsp[0].strVal);
01587                    free(yyvsp[-2].objVal);
01588                  ;
01589     break;}
01590 case 103:
01591 #line 677 "parser.y"
01592 { yyval.objVal = yyvsp[0].objVal; ;
01593     break;}
01594 case 104:
01595 #line 679 "parser.y"
01596 { yyval.objVal = IEbnfNodeBuilder_createPlusNode(yyvsp[-1].objVal); ;
01597     break;}
01598 case 105:
01599 #line 681 "parser.y"
01600 { yyval.objVal = IEbnfNodeBuilder_createOptionalNode(yyvsp[-1].objVal); ;
01601     break;}
01602 case 106:
01603 #line 683 "parser.y"
01604 { yyval.objVal = IEbnfNodeBuilder_createStarNode(yyvsp[-1].objVal); ;
01605     break;}
01606 case 107:
01607 #line 686 "parser.y"
01608 {yyval.intVal = yylineno; ;
01609     break;}
01610 case 108:
01611 #line 687 "parser.y"
01612 {
01613          yyval.objVal = IEbnfNodeBuilder_createNonterminalNode(yyvsp[-4].strVal, yyvsp[-3].intVal,
01614                                                      yyvsp[-1].strVal, yyvsp[0].strVal, yylineno);
01615          free(yyvsp[-4].strVal);
01616          free(yyvsp[-1].strVal);
01617          free(yyvsp[0].strVal);
01618        ;
01619     break;}
01620 case 109:
01621 #line 695 "parser.y"
01622 {
01623          yyval.objVal = IEbnfNodeBuilder_createNonterminalNode(NULL, 0, yyvsp[-1].strVal, yyvsp[0].strVal, yylineno);
01624          free(yyvsp[-1].strVal);
01625          free(yyvsp[0].strVal);
01626        ;
01627     break;}
01628 case 110:
01629 #line 700 "parser.y"
01630 {yyval.objVal=0;;
01631     break;}
01632 case 111:
01633 #line 701 "parser.y"
01634 {
01635          yyval.objVal = IEbnfNodeBuilder_createTerminalNode(yyvsp[-2].strVal);
01636          free(yyvsp[-2].strVal);
01637        ;
01638     break;}
01639 case 112:
01640 #line 706 "parser.y"
01641 { yyval.objVal = yyvsp[-1].objVal; ;
01642     break;}
01643 case 113:
01644 #line 709 "parser.y"
01645 { enterDumbMode('(',')', 0); ;
01646     break;}
01647 case 114:
01648 #line 710 "parser.y"
01649 { yyval.strVal = yyvsp[0].strVal; ;
01650     break;}
01651 case 115:
01652 #line 713 "parser.y"
01653 { yyval.catchClauseListVal = NULL; ;
01654     break;}
01655 case 116:
01656 #line 714 "parser.y"
01657 { yyval.catchClauseListVal = yyvsp[0].catchClauseListVal; ;
01658     break;}
01659 case 117:
01660 #line 718 "parser.y"
01661 {
01662                        yyval.catchClauseListVal = appendToCwCatchClauseList (NULL, yyvsp[0].catchClauseVal);
01663                      ;
01664     break;}
01665 case 118:
01666 #line 722 "parser.y"
01667 {
01668                        yyval.catchClauseListVal = appendToCwCatchClauseList (yyvsp[-1].catchClauseListVal, yyvsp[0].catchClauseVal);
01669                      ;
01670     break;}
01671 case 119:
01672 #line 727 "parser.y"
01673 { enterDumbMode('(',')', 0); ;
01674     break;}
01675 case 120:
01676 #line 728 "parser.y"
01677 { yyvsp[1].intVal = yylineno; ;
01678     break;}
01679 case 121:
01680 #line 730 "parser.y"
01681 {
01682   yyval.catchClauseVal = IEbnfNodeBuilder_createCatchClause(yyvsp[-2].strVal, yyvsp[-1].intVal, yyvsp[0].strVal);
01683   free(yyvsp[-2].strVal);
01684   free(yyvsp[0].strVal);
01685 ;
01686     break;}
01687 case 122:
01688 #line 747 "parser.y"
01689 { yyval.strVal = NULL; ;
01690     break;}
01691 case 123:
01692 #line 748 "parser.y"
01693 { enterDumbMode('}','{', 1); ;
01694     break;}
01695 case 124:
01696 #line 749 "parser.y"
01697 {
01698   yyval.strVal = yyvsp[0].strVal;
01699 ;
01700     break;}
01701 case 125:
01702 #line 754 "parser.y"
01703 { yyval.strVal = NULL; ;
01704     break;}
01705 case 126:
01706 #line 755 "parser.y"
01707 { yyval.strVal = yyvsp[0].strVal; ;
01708     break;}
01709 case 127:
01710 #line 758 "parser.y"
01711 { enterDumbMode('{', '}', 0); ;
01712     break;}
01713 case 128:
01714 #line 759 "parser.y"
01715 {
01716   yyval.strVal = yyvsp[0].strVal;
01717 ;
01718     break;}
01719 }
01720    /* the action file gets copied in in place of this dollarsign */
01721 #line 543 "/usr/lib/bison.simple"
01722 
01723   yyvsp -= yylen;
01724   yyssp -= yylen;
01725 #ifdef YYLSP_NEEDED
01726   yylsp -= yylen;
01727 #endif
01728 
01729 #if YYDEBUG != 0
01730   if (yydebug)
01731     {
01732       short *ssp1 = yyss - 1;
01733       fprintf (stderr, "state stack now");
01734       while (ssp1 != yyssp)
01735   fprintf (stderr, " %d", *++ssp1);
01736       fprintf (stderr, "\n");
01737     }
01738 #endif
01739 
01740   *++yyvsp = yyval;
01741 
01742 #ifdef YYLSP_NEEDED
01743   yylsp++;
01744   if (yylen == 0)
01745     {
01746       yylsp->first_line = yylloc.first_line;
01747       yylsp->first_column = yylloc.first_column;
01748       yylsp->last_line = (yylsp-1)->last_line;
01749       yylsp->last_column = (yylsp-1)->last_column;
01750       yylsp->text = 0;
01751     }
01752   else
01753     {
01754       yylsp->last_line = (yylsp+yylen-1)->last_line;
01755       yylsp->last_column = (yylsp+yylen-1)->last_column;
01756     }
01757 #endif
01758 
01759   /* Now "shift" the result of the reduction.
01760      Determine what state that goes to,
01761      based on the state we popped back to
01762      and the rule number reduced by.  */
01763 
01764   yyn = yyr1[yyn];
01765 
01766   yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
01767   if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
01768     yystate = yytable[yystate];
01769   else
01770     yystate = yydefgoto[yyn - YYNTBASE];
01771 
01772   goto yynewstate;
01773 
01774 yyerrlab:   /* here on detecting error */
01775 
01776   if (! yyerrstatus)
01777     /* If not already recovering from an error, report this error.  */
01778     {
01779       ++yynerrs;
01780 
01781 #ifdef YYERROR_VERBOSE
01782       yyn = yypact[yystate];
01783 
01784       if (yyn > YYFLAG && yyn < YYLAST)
01785   {
01786     int size = 0;
01787     char *msg;
01788     int x, count;
01789 
01790     count = 0;
01791     /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
01792     for (x = (yyn < 0 ? -yyn : 0);
01793          x < (sizeof(yytname) / sizeof(char *)); x++)
01794       if (yycheck[x + yyn] == x)
01795         size += strlen(yytname[x]) + 15, count++;
01796     msg = (char *) malloc(size + 15);
01797     if (msg != 0)
01798       {
01799         strcpy(msg, "parse error");
01800 
01801         if (count < 5)
01802     {
01803       count = 0;
01804       for (x = (yyn < 0 ? -yyn : 0);
01805            x < (sizeof(yytname) / sizeof(char *)); x++)
01806         if (yycheck[x + yyn] == x)
01807           {
01808       strcat(msg, count == 0 ? ", expecting `" : " or `");
01809       strcat(msg, yytname[x]);
01810       strcat(msg, "'");
01811       count++;
01812           }
01813     }
01814         yyerror(msg);
01815         free(msg);
01816       }
01817     else
01818       yyerror ("parse error; also virtual memory exceeded");
01819   }
01820       else
01821 #endif /* YYERROR_VERBOSE */
01822   yyerror("parse error");
01823     }
01824 
01825   goto yyerrlab1;
01826 yyerrlab1:   /* here on error raised explicitly by an action */
01827 
01828   if (yyerrstatus == 3)
01829     {
01830       /* if just tried and failed to reuse lookahead token after an error, discard it.  */
01831 
01832       /* return failure if at end of input */
01833       if (yychar == YYEOF)
01834   YYABORT;
01835 
01836 #if YYDEBUG != 0
01837       if (yydebug)
01838   fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
01839 #endif
01840 
01841       yychar = YYEMPTY;
01842     }
01843 
01844   /* Else will try to reuse lookahead token
01845      after shifting the error token.  */
01846 
01847   yyerrstatus = 3;    /* Each real token shifted decrements this */
01848 
01849   goto yyerrhandle;
01850 
01851 yyerrdefault:  /* current state does not do anything special for the error token. */
01852 
01853 #if 0
01854   /* This is wrong; only states that explicitly want error tokens
01855      should shift them.  */
01856   yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
01857   if (yyn) goto yydefault;
01858 #endif
01859 
01860 yyerrpop:   /* pop the current state because it cannot handle the error token */
01861 
01862   if (yyssp == yyss) YYABORT;
01863   yyvsp--;
01864   yystate = *--yyssp;
01865 #ifdef YYLSP_NEEDED
01866   yylsp--;
01867 #endif
01868 
01869 #if YYDEBUG != 0
01870   if (yydebug)
01871     {
01872       short *ssp1 = yyss - 1;
01873       fprintf (stderr, "Error: state stack now");
01874       while (ssp1 != yyssp)
01875   fprintf (stderr, " %d", *++ssp1);
01876       fprintf (stderr, "\n");
01877     }
01878 #endif
01879 
01880 yyerrhandle:
01881 
01882   yyn = yypact[yystate];
01883   if (yyn == YYFLAG)
01884     goto yyerrdefault;
01885 
01886   yyn += YYTERROR;
01887   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
01888     goto yyerrdefault;
01889 
01890   yyn = yytable[yyn];
01891   if (yyn < 0)
01892     {
01893       if (yyn == YYFLAG)
01894   goto yyerrpop;
01895       yyn = -yyn;
01896       goto yyreduce;
01897     }
01898   else if (yyn == 0)
01899     goto yyerrpop;
01900 
01901   if (yyn == YYFINAL)
01902     YYACCEPT;
01903 
01904 #if YYDEBUG != 0
01905   if (yydebug)
01906     fprintf(stderr, "Shifting error token, ");
01907 #endif
01908 
01909   *++yyvsp = yylval;
01910 #ifdef YYLSP_NEEDED
01911   *++yylsp = yylloc;
01912 #endif
01913 
01914   yystate = yyn;
01915   goto yynewstate;
01916 
01917  yyacceptlab:
01918   /* YYACCEPT comes here.  */
01919   if (yyfree_stacks)
01920     {
01921       free (yyss);
01922       free (yyvs);
01923 #ifdef YYLSP_NEEDED
01924       free (yyls);
01925 #endif
01926     }
01927   return 0;
01928 
01929  yyabortlab:
01930   /* YYABORT comes here.  */
01931   if (yyfree_stacks)
01932     {
01933       free (yyss);
01934       free (yyvs);
01935 #ifdef YYLSP_NEEDED
01936       free (yyls);
01937 #endif
01938     }
01939   return 1;
01940 }
01941 #line 763 "parser.y"
01942 
01943 

Generated at Tue Jul 9 21:05:45 2002 for CppCC by doxygen1.2.8.1 written by Dimitri van Heesch, © 1997-2001