home *** CD-ROM | disk | FTP | other *** search
/ ftptest.leeds.ac.uk / 2015.02.ftptest.leeds.ac.uk.tar / ftptest.leeds.ac.uk / bionet / CAE-GROUP / SCL-WIN3x / FED_PLUS.EXE / EXPPARSE.C < prev    next >
C/C++ Source or Header  |  1994-07-23  |  119KB  |  3,032 lines

  1. /*extern char *malloc(), *realloc();*/
  2.  
  3. # line 2 "expparse.y"
  4.  
  5. static char rcsid[] = "$Id: expparse.y,v 1.13 1994/05/11 19:50:00 libes Exp $";
  6.  
  7. /*
  8.  * YACC grammar for Express parser.
  9.  *
  10.  * This software was developed by U.S. Government employees as part of
  11.  * their official duties and is not subject to copyright.
  12.  *
  13.  * $Log: expparse.y,v $
  14.  * Revision 1.13  1994/05/11  19:50:00  libes
  15.  * numerous fixes
  16.  *
  17.  * Revision 1.12  1993/10/15  18:47:26  libes
  18.  * CADDETC certified
  19.  *
  20.  * Revision 1.10  1993/03/19  20:53:57  libes
  21.  * one more, with feeling
  22.  *
  23.  * Revision 1.9  1993/03/19  20:39:51  libes
  24.  * added unique to parameter types
  25.  *
  26.  * Revision 1.8  1993/02/16  03:17:22  libes
  27.  * reorg'd alg bodies to not force artificial begin/ends
  28.  * added flag to differentiate parameters in scopes
  29.  * rewrote query to fix scope handling
  30.  * added support for Where type
  31.  *
  32.  * Revision 1.7  1993/01/19  22:44:17  libes
  33.  * *** empty log message ***
  34.  *
  35.  * Revision 1.6  1992/08/27  23:36:35  libes
  36.  * created fifo for new schemas that are parsed
  37.  * connected entity list to create of oneof
  38.  *
  39.  * Revision 1.5  1992/08/18  17:11:36  libes
  40.  * rm'd extraneous error messages
  41.  *
  42.  * Revision 1.4  1992/06/08  18:05:20  libes
  43.  * prettied up interface to print_objects_when_running
  44.  *
  45.  * Revision 1.3  1992/05/31  23:31:13  libes
  46.  * implemented ALIAS resolution
  47.  *
  48.  * Revision 1.2  1992/05/31  08:30:54  libes
  49.  * multiple files
  50.  *
  51.  * Revision 1.1  1992/05/28  03:52:25  libes
  52.  * Initial revision
  53.  */
  54.  
  55.  
  56. #include "linklist.h"
  57. #include "stack.h"
  58. #include "express.h"
  59. #include "schema.h"
  60. #include "entity.h"
  61. #include "resolve.h"
  62.  
  63. extern int print_objects_while_running;
  64.  
  65. int tag_count;    /* use this to count tagged GENERIC types in the formal */
  66.         /* argument lists.  Gross, but much easier to do it this */
  67.         /* way then with the 'help' of yacc. */
  68.  
  69. /*SUPPRESS 61*/
  70. Type current_type;    /* pass type placeholder down */
  71.         /* this allows us to attach a dictionary to it only when */
  72.         /* we decide we absolutely need one */
  73.  
  74. Express yyresult;    /* hook to everything built by parser */
  75.  
  76. Symbol *interface_schema;    /* schema of interest in use/ref clauses */
  77. void (*interface_func)();    /* func to attach rename clauses */
  78.  
  79. /* record schemas found in a single parse here, allowing them to be */
  80. /* differentiated from other schemas parsed earlier */
  81. Linked_List PARSEnew_schemas;
  82.  
  83. extern int    yylineno;
  84.  
  85. static void    yyerror PROTO((char*));
  86. static void    yyerror2 PROTO((char CONST *));
  87.  
  88. Boolean        yyeof = false;
  89.  
  90. #ifdef FLEX
  91. extern char    *exp_yytext;
  92. #else /* LEX */
  93. extern char    exp_yytext[];
  94. #endif /*FLEX*/
  95.  
  96. #define MAX_SCOPE_DEPTH    20    /* max number of scopes that can be nested */
  97.  
  98. static struct scope {
  99.     struct Scope *this;
  100.     char type;    /* one of OBJ_XXX */
  101.     struct scope *pscope;    /* pointer back to most recent scope */
  102.                 /* that has a printable name - for better */
  103.                 /* error messages */
  104. } scopes[MAX_SCOPE_DEPTH], *scope;
  105. #define CURRENT_SCOPE (scope->this)
  106. #define PREVIOUS_SCOPE ((scope-1)->this)
  107. #define CURRENT_SCHEMA (scope->this->u.schema)
  108. #define CURRENT_SCOPE_NAME        (OBJget_symbol(scope->pscope->this,scope->pscope->type)->name)
  109. #define CURRENT_SCOPE_TYPE_PRINTABLE    (OBJget_type(scope->pscope->type))
  110.  
  111. /* ths = new scope to enter */
  112. /* sym = name of scope to enter into parent.  Some scopes (i.e., increment) */
  113. /*       are not named, in which case sym should be 0 */
  114. /*     This is useful for when a diagnostic is printed, an earlier named */
  115. /*      scoped can be used */
  116. /* typ = type of scope */
  117. #define PUSH_SCOPE(ths,sym,typ) \
  118.     if (sym) DICTdefine(scope->this->symbol_table,(sym)->name,(Generic)ths,sym,typ);\
  119.     ths->superscope = scope->this; \
  120.     scope++;        \
  121.     scope->type = typ;    \
  122.     scope->pscope = (sym?scope:(scope-1)->pscope); \
  123.     scope->this = ths; \
  124.     if (sym) { \
  125.         ths->symbol = *(sym); \
  126.     }
  127. #define POP_SCOPE() scope--
  128.  
  129. /* PUSH_SCOPE_DUMMY just pushes the scope stack with nothing actually on it */
  130. /* Necessary for situations when a POP_SCOPE is unnecessary but inevitable */
  131. #define PUSH_SCOPE_DUMMY() scope++
  132.  
  133. /* normally the superscope is added by PUSH_SCOPE, but some things (types) */
  134. /* bother to get pushed so fix them this way */
  135. #define SCOPEadd_super(ths) ths->superscope = scope->this;
  136.  
  137. #define ERROR(code)    ERRORreport(code, yylineno)
  138.  
  139. /* structured types for parse node decorations */
  140.  
  141.  
  142. # line 296 "expparse.y"
  143. typedef union  {
  144.     /* simple (single-valued) node types */
  145.  
  146.     Binary        binary;
  147.     Case_Item        case_item;
  148.     Expression    expression;
  149.     Integer        iVal;
  150.     Linked_List        list;
  151.     Logical        logical;
  152.     Op_Code        op_code;
  153.     Qualified_Attr *    qualified_attr;
  154.     Real        rVal;
  155.     Statement        statement;
  156.     Symbol *        symbol;
  157.     char *        string;
  158.     Type        type;
  159.     TypeBody        typebody;
  160.     Variable        variable;
  161.     Where        where;
  162.  
  163.     struct type_either {
  164.         Type     type;
  165.         TypeBody body;
  166.     } type_either;    /* either one of these can be returned */
  167.  
  168.     struct {
  169.         unsigned optional:1;
  170.         unsigned unique:1;
  171.         unsigned fixed:1;
  172.         unsigned var:1;        /* when formal is "VAR" */
  173.     } type_flags;
  174.  
  175.     struct {
  176.     Linked_List    attributes;
  177.     Linked_List    unique;
  178.     Linked_List    where;
  179.     } entity_body;
  180.  
  181.     struct {
  182.     Expression    subtypes;
  183.     Linked_List    supertypes;
  184.     Boolean        abstract;
  185.     } subsuper_decl;
  186.  
  187.     struct {
  188.     Expression    subtypes;
  189.     Boolean        abstract;
  190.     } subtypes;
  191.  
  192.     struct {
  193.     Expression    lower_limit;
  194.     Expression    upper_limit;
  195.     } upper_lower;
  196. } exp_YYSTYPE;
  197. # define TOK_OR 257
  198. # define TOK_XOR 258
  199. # define TOK_AND 259
  200. # define TOK_ANDOR 260
  201. # define TOK_EQUAL 261
  202. # define TOK_GREATER_EQUAL 262
  203. # define TOK_GREATER_THAN 263
  204. # define TOK_IN 264
  205. # define TOK_INST_EQUAL 265
  206. # define TOK_INST_NOT_EQUAL 266
  207. # define TOK_LESS_EQUAL 267
  208. # define TOK_LESS_THAN 268
  209. # define TOK_LIKE 269
  210. # define TOK_NOT_EQUAL 270
  211. # define TOK_MINUS 271
  212. # define TOK_PLUS 272
  213. # define TOK_DIV 273
  214. # define TOK_MOD 274
  215. # define TOK_REAL_DIV 275
  216. # define TOK_TIMES 276
  217. # define TOK_CONCAT_OP 277
  218. # define TOK_EXP 278
  219. # define TOK_NOT 279
  220. # define TOK_DOT 280
  221. # define TOK_BACKSLASH 281
  222. # define TOK_LEFT_BRACKET 282
  223. # define TOK_ABSTRACT 283
  224. # define TOK_AGGREGATE 284
  225. # define TOK_ALIAS 285
  226. # define TOK_ALL_IN 286
  227. # define TOK_ARRAY 287
  228. # define TOK_AS 288
  229. # define TOK_ASSIGNMENT 289
  230. # define TOK_BAG 290
  231. # define TOK_BEGIN 291
  232. # define TOK_BINARY 292
  233. # define TOK_BOOLEAN 293
  234. # define TOK_BY 294
  235. # define TOK_CASE 295
  236. # define TOK_COLON 296
  237. # define TOK_COMMA 297
  238. # define TOK_CONSTANT 298
  239. # define TOK_CONTEXT 299
  240. # define TOK_E 300
  241. # define TOK_DERIVE 301
  242. # define TOK_ELSE 302
  243. # define TOK_END 303
  244. # define TOK_END_ALIAS 304
  245. # define TOK_END_CASE 305
  246. # define TOK_END_CONSTANT 306
  247. # define TOK_END_CONTEXT 307
  248. # define TOK_END_ENTITY 308
  249. # define TOK_END_FUNCTION 309
  250. # define TOK_END_IF 310
  251. # define TOK_END_LOCAL 311
  252. # define TOK_END_MODEL 312
  253. # define TOK_END_PROCEDURE 313
  254. # define TOK_END_REPEAT 314
  255. # define TOK_END_RULE 315
  256. # define TOK_END_SCHEMA 316
  257. # define TOK_END_TYPE 317
  258. # define TOK_ENTITY 318
  259. # define TOK_ENUMERATION 319
  260. # define TOK_ESCAPE 320
  261. # define TOK_FIXED 321
  262. # define TOK_FOR 322
  263. # define TOK_FROM 323
  264. # define TOK_FUNCTION 324
  265. # define TOK_GENERIC 325
  266. # define TOK_IF 326
  267. # define TOK_INCLUDE 327
  268. # define TOK_INTEGER 328
  269. # define TOK_INVERSE 329
  270. # define TOK_LEFT_CURL 330
  271. # define TOK_LEFT_PAREN 331
  272. # define TOK_LIST 332
  273. # define TOK_LOCAL 333
  274. # define TOK_LOGICAL 334
  275. # define TOK_MODEL 335
  276. # define TOK_NUMBER 336
  277. # define TOK_OF 337
  278. # define TOK_ONEOF 338
  279. # define TOK_OPTIONAL 339
  280. # define TOK_OTHERWISE 340
  281. # define TOK_PI 341
  282. # define TOK_PROCEDURE 342
  283. # define TOK_QUERY 343
  284. # define TOK_QUESTION_MARK 344
  285. # define TOK_REAL 345
  286. # define TOK_REFERENCE 346
  287. # define TOK_REPEAT 347
  288. # define TOK_RETURN 348
  289. # define TOK_RIGHT_BRACKET 349
  290. # define TOK_RIGHT_CURL 350
  291. # define TOK_RIGHT_PAREN 351
  292. # define TOK_RULE 352
  293. # define TOK_SCHEMA 353
  294. # define TOK_SELECT 354
  295. # define TOK_SEMICOLON 355
  296. # define TOK_SET 356
  297. # define TOK_SKIP 357
  298. # define TOK_STRING 358
  299. # define TOK_SUBTYPE 359
  300. # define TOK_SUCH_THAT 360
  301. # define TOK_SUPERTYPE 361
  302. # define TOK_THEN 362
  303. # define TOK_TO 363
  304. # define TOK_TYPE 364
  305. # define TOK_UNIQUE 365
  306. # define TOK_UNTIL 366
  307. # define TOK_USE 367
  308. # define TOK_VAR 368
  309. # define TOK_WHERE 369
  310. # define TOK_WHILE 370
  311. # define TOK_STRING_LITERAL 371
  312. # define TOK_STRING_LITERAL_ENCODED 372
  313. # define TOK_BUILTIN_FUNCTION 373
  314. # define TOK_BUILTIN_PROCEDURE 374
  315. # define TOK_IDENTIFIER 375
  316. # define TOK_SELF 376
  317. # define TOK_INTEGER_LITERAL 377
  318. # define TOK_REAL_LITERAL 378
  319. # define TOK_LOGICAL_LITERAL 379
  320. # define TOK_BINARY_LITERAL 380
  321. #define yyclearin exp_yychar = -1
  322. #define yyerrok exp_yyerrflag = 0
  323. extern int exp_yychar;
  324. extern int exp_yyerrflag;
  325. #ifndef YYMAXDEPTH
  326. #define YYMAXDEPTH 150
  327. #endif
  328. exp_YYSTYPE exp_yylval, exp_yyval;
  329. # define YYERRCODE 256
  330.  
  331. # line 1878 "expparse.y"
  332.  
  333. static void
  334. yyerror(string)
  335. char* string;
  336. {
  337.     char buf[200];
  338.     Symbol sym;
  339.  
  340.     strcpy (buf, string);
  341.  
  342.     if (yyeof) strcat(buf, " at end of input");
  343.     else if (exp_yytext[0] == 0) strcat(buf, " at null character");
  344.     else if (exp_yytext[0] < 040 || exp_yytext[0] >= 0177)
  345.         sprintf(buf + strlen(buf), " before character 0%o", exp_yytext[0]);
  346.     else    sprintf(buf + strlen(buf), " before `%s'", exp_yytext);
  347.  
  348.     sym.line = yylineno;
  349.     sym.filename = current_filename;
  350.     ERRORreport_with_symbol(ERROR_syntax, &sym, buf, CURRENT_SCOPE_TYPE_PRINTABLE,CURRENT_SCOPE_NAME);
  351.   }
  352.  
  353. static void
  354. yyerror2(t)
  355. char CONST * t;    /* token or 0 to indicate no more tokens */
  356. {
  357.     char buf[200];
  358.     Symbol sym;
  359.     static int first = 1;    /* true if first suggested replacement */
  360.     static char tokens[4000] = "";/* error message, saying */
  361.                     /* "expecting <token types>" */
  362.  
  363.     if (t) {    /* subsequent token? */
  364.         if (first) first = 0;
  365.         else strcat (tokens," or ");
  366.         strcat(tokens,t);
  367.     } else {
  368.       strcpy(buf,"syntax error");
  369.       if (yyeof)
  370.         strcat(buf, " at end of input");
  371.       else if (exp_yytext[0] == 0)
  372.         strcat(buf, " at null character");
  373.       else if (exp_yytext[0] < 040 || exp_yytext[0] >= 0177)
  374.         sprintf(buf + strlen(buf), " near character 0%o", exp_yytext[0]);
  375.       else
  376.         sprintf(buf + strlen(buf), " near `%s'", exp_yytext);
  377.  
  378.       if (0 == strlen(tokens)) yyerror("syntax error");
  379.       sym.line = yylineno - (exp_yytext[0] == '\n');
  380.       sym.filename = current_filename;
  381.       ERRORreport_with_symbol(ERROR_syntax_expecting,&sym,buf,tokens
  382.             ,CURRENT_SCOPE_TYPE_PRINTABLE,CURRENT_SCOPE_NAME);
  383.     }
  384. }
  385. int exp_yyexca[] ={
  386. -1, 1,
  387.     0, -1,
  388.     -2, 0,
  389. -1, 104,
  390.     331, 215,
  391.     355, 215,
  392.     -2, 147,
  393. -1, 153,
  394.     331, 130,
  395.     -2, 147,
  396. -1, 189,
  397.     331, 130,
  398.     -2, 147,
  399.     };
  400. # define YYNPROD 329
  401. # define YYLAST 1200
  402. int exp_yyact[]={
  403.  
  404.     81,   229,   568,   570,   319,   301,   567,   298,    80,    82,
  405.    454,   109,    22,    24,    25,   511,   152,   462,    78,   362,
  406.    393,   356,   341,   325,   438,   320,   266,   273,   625,   571,
  407.    140,   323,    48,   569,   571,   439,   316,   317,   324,   314,
  408.    610,   159,   645,   199,    48,   242,   243,   241,   198,   246,
  409.    248,   245,   252,   250,   251,   247,   244,   253,   249,   639,
  410.    111,    46,   627,    49,    47,   614,   455,   110,   512,   542,
  411.    363,   518,   507,   505,   124,    49,    47,   145,   147,   402,
  412.    297,   128,   281,   299,   280,   182,   119,    46,    77,    76,
  413.    180,   181,    72,    71,    70,   103,    69,    68,   191,    11,
  414.    194,    93,   200,   202,    12,   190,   609,    96,   125,   199,
  415.    154,    95,   188,   316,   317,   192,    79,   212,   213,    19,
  416.    343,   184,   463,   103,   103,   140,   165,   164,   292,   357,
  417.    536,   509,    62,   113,   163,    64,    97,   166,   103,   185,
  418.    186,   187,    98,   603,   201,   232,   234,   420,   464,    23,
  419.    239,   493,   457,   254,     8,   178,    23,   195,    19,   127,
  420.     48,   537,   515,   100,   101,   443,   444,    21,    23,   205,
  421.    431,    23,   642,   102,   641,   447,   564,   267,    40,   504,
  422.      7,    23,   502,   274,    41,   175,   160,   500,    20,   498,
  423.    105,   104,    47,    58,   286,   486,   177,   577,   176,    48,
  424.    279,    23,    42,   451,   296,   443,   444,   358,    64,   434,
  425.     63,   430,   289,    23,    23,   327,   294,   326,   295,   530,
  426.    471,   344,   335,   616,    38,   447,   169,   170,   179,   580,
  427.    189,    47,   167,   168,   171,   172,   128,   360,   345,   364,
  428.    346,   128,   412,    93,   315,   351,   443,   444,   354,    96,
  429.    355,   578,   321,    95,   352,   350,   391,   524,   365,   366,
  430.    367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
  431.    377,   231,   378,   531,   472,   231,   228,   209,    97,   448,
  432.    404,   228,   388,    51,    98,   409,   276,   228,   228,   115,
  433.    231,   114,   414,   231,   410,   231,   411,   519,   282,   418,
  434.    334,   528,    48,   452,   445,   100,   101,   318,   390,   415,
  435.    416,   432,   277,   195,   127,   102,   237,   223,    50,   127,
  436.    103,   219,   217,   441,   628,   278,   632,   103,   446,   449,
  437.    629,   427,   105,   104,    47,   211,   425,   121,   442,   353,
  438.    210,   458,   423,   421,   359,   235,   460,   456,   233,   348,
  439.    230,   328,   214,    13,   459,   149,   595,   556,   128,   117,
  440.    321,   203,   128,   594,   128,   321,   116,   379,   380,   381,
  441.    382,   383,   384,   385,   386,   387,   310,   468,   489,   474,
  442.     73,   284,   482,   242,   243,   241,   488,   246,   248,   245,
  443.    252,   250,   251,   247,   244,   253,   249,   620,   550,   551,
  444.    534,   205,   436,   435,   480,   206,   205,   227,   274,   477,
  445.    605,   573,   552,   544,   491,   517,   429,   392,   494,   476,
  446.    495,   339,   613,   492,   255,   487,    75,   293,   221,   490,
  447.    184,   499,   185,   186,   187,   503,   127,   496,   506,   497,
  448.    127,   183,   127,   473,   479,   291,   228,   501,   606,   440,
  449.    523,   526,   638,   525,   576,   258,   103,   532,   326,   257,
  450.    258,   466,   516,   443,   444,   469,   120,   470,   128,   520,
  451.    521,   513,    94,   151,   128,   347,   529,   185,   186,   187,
  452.    193,   533,   538,   549,   539,   321,   321,   321,   285,   553,
  453.    236,   541,   543,   107,   197,    53,   546,    61,   554,   545,
  454.    555,    52,    44,   126,   478,   558,   215,   218,   560,   561,
  455.    557,    15,   563,    40,   222,   118,   559,   481,    56,    41,
  456.    128,    28,     8,   128,   562,     6,   572,   565,    43,    16,
  457.    155,   103,   582,   103,   450,   216,    67,    42,    65,    66,
  458.    579,   581,   583,   329,     5,     9,   127,    39,    74,    55,
  459.    106,   338,   127,    34,   619,   123,   590,   596,   112,    38,
  460.    591,   587,   593,    37,   322,    27,   108,   599,   592,   604,
  461.    600,   535,   601,   602,   617,   611,    10,   540,    14,   608,
  462.    146,    17,   615,   260,   262,   261,   259,   257,   258,   103,
  463.    148,    18,   103,    27,   103,   621,   622,   361,   127,   196,
  464.    122,   127,   204,    36,     4,     3,     2,   624,   626,   330,
  465.     35,   630,   631,   633,    33,   623,    32,   165,   164,   321,
  466.     31,   636,    30,   574,   240,   163,   575,   637,   166,    45,
  467.    634,   220,    29,   165,   164,   640,   635,    26,   643,   238,
  468.    646,   163,   547,    57,   166,    54,   178,   647,   648,     1,
  469.    224,   256,   331,   225,   226,   275,   588,   607,   132,   242,
  470.    243,   241,   178,   246,   248,   245,   252,   250,   251,   247,
  471.    244,   253,   249,   131,   300,   130,   175,   160,   264,   263,
  472.    260,   262,   261,   259,   257,   258,   129,   177,   303,   176,
  473.     48,   290,   175,   160,   268,   269,   270,   288,   336,   165,
  474.    164,   302,   349,   177,    99,   176,    48,   163,   174,    60,
  475.    166,   271,   422,   424,   426,   428,    59,   169,   170,   179,
  476.    333,   189,    47,   167,   168,   171,   172,    92,   178,    91,
  477.     90,    89,    88,   169,   170,   179,   413,   189,    47,   167,
  478.    168,   171,   172,   264,   263,   260,   262,   261,   259,   257,
  479.    258,   403,   165,   164,    87,    86,    85,   618,   175,   160,
  480.    163,    84,   589,   166,    83,   342,   514,   453,   406,   177,
  481.    508,   176,    48,   437,   313,   433,   510,   566,   242,   243,
  482.    241,   178,   246,   248,   245,   252,   250,   251,   247,   244,
  483.    253,   249,   522,   527,   340,   287,   311,   312,   150,   169,
  484.    170,   179,   485,   189,    47,   167,   168,   171,   172,   407,
  485.    408,   175,   160,   264,   263,   260,   262,   261,   259,   257,
  486.    258,   405,   177,   309,   176,    48,   304,   208,   272,   305,
  487.    162,   138,   133,   141,   419,   157,   142,   161,   138,   133,
  488.    141,   612,   158,   142,   173,   138,   133,   597,   156,   207,
  489.    484,   483,   169,   170,   179,     0,   153,    47,   167,   168,
  490.    171,   172,     0,     0,   308,   332,     0,   134,     0,     0,
  491.      0,   306,   265,   137,   134,   136,    23,     0,   143,     0,
  492.    137,   134,   136,     0,   135,   143,     0,   137,     0,   136,
  493.      0,   135,     0,     0,     0,   307,     0,   139,   135,     0,
  494.    337,     0,   144,     0,   139,     0,     0,     0,     0,   144,
  495.      0,   139,     0,     0,   140,     0,     0,     0,     0,     0,
  496.      0,   140,     0,     0,     0,   242,   243,   241,   140,   246,
  497.    248,   245,   252,   250,   251,   247,   244,   253,   249,   242,
  498.    243,   241,     0,   246,   248,   245,   252,   250,   251,   247,
  499.    244,   253,   249,   242,   243,   241,     0,   246,   248,   245,
  500.    252,   250,   251,   247,   244,   253,   249,   242,   243,   241,
  501.      0,   246,   248,   245,   252,   250,   251,   247,   244,   253,
  502.    249,   242,   243,   241,     0,   246,   248,   245,   252,   250,
  503.    251,   247,   244,   253,   249,   242,   243,   241,     0,   246,
  504.    248,   245,   252,   250,   251,   247,   244,   253,   249,     0,
  505.      0,     0,     0,     0,     0,     0,   242,   243,   241,   644,
  506.    246,   248,   245,   252,   250,   251,   247,   244,   253,   249,
  507.      0,     0,     0,   461,   264,   263,   260,   262,   261,   259,
  508.    257,   258,     0,     0,   242,   243,   241,   417,   246,   248,
  509.    245,   252,   250,   251,   247,   244,   253,   249,   242,   243,
  510.    241,   389,   246,   248,   245,   252,   250,   251,   247,   244,
  511.    253,   249,     0,     0,   586,   264,   263,   260,   262,   261,
  512.    259,   257,   258,     0,     0,     0,     0,   585,     0,     0,
  513.      0,     0,     0,     0,   242,   243,   241,   475,   246,   248,
  514.    245,   252,   250,   251,   247,   244,   253,   249,   584,   242,
  515.    243,   241,   548,   246,   248,   245,   252,   250,   251,   247,
  516.    244,   253,   249,     0,   283,     0,     0,     0,     0,     0,
  517.    242,   243,   241,   467,   246,   248,   245,   252,   250,   251,
  518.    247,   244,   253,   249,     0,   396,   398,   395,   465,   400,
  519.    401,   397,   394,     0,   399,   264,   263,   260,   262,   261,
  520.    259,   257,   258,     0,   242,   243,   241,   598,   246,   248,
  521.    245,   252,   250,   251,   247,   244,   253,   249,   241,     0,
  522.    246,   248,   245,   252,   250,   251,   247,   244,   253,   249,
  523.    246,   248,   245,   252,   250,   251,   247,   244,   253,   249 };
  524. int exp_yypact[]={
  525.  
  526.  -1000, -1000, -1000,  -173, -1000, -1000, -1000,  -276,  -267,    37,
  527.   -179,  -206,  -206,  -206, -1000,   195, -1000, -1000, -1000,  -312,
  528.     -5,   -40, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
  529.  -1000, -1000, -1000, -1000,  -140,  -151,  -140,  -140,  -278,  -279,
  530.   -281,  -282,  -283,   195,    74,  -312,   130, -1000, -1000, -1000,
  531.   -286,  -287,  -253,  -184,  -140, -1000, -1000, -1000,  -308,  -206,
  532.   -224, -1000,  -228,   -46,   -48,    57,    46,  -253,   205,    15,
  533.  -1000, -1000, -1000,  -206, -1000,   553,  -206,  -206,    40,   481,
  534.  -1000,  -184,  -184, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
  535.  -1000, -1000, -1000,  -290,   152,   428,  -184,  -206,   428,  -174,
  536.   -327,  -187,  -206, -1000, -1000, -1000, -1000,    50,  -308,   109,
  537.  -1000, -1000, -1000,   -60,     9,     4,  -206,  -206,    35, -1000,
  538.  -1000,    -9,   -10,   -10, -1000,   139, -1000, -1000, -1000, -1000,
  539.  -1000, -1000, -1000, -1000,   -14,   -14, -1000, -1000,   -14,   -14,
  540.  -1000,   164,    13,    11,     8, -1000,   -15, -1000,   -15,  -206,
  541.    481, -1000,   521,   128,   542,   197, -1000, -1000, -1000, -1000,
  542.    428, -1000, -1000,   428,   428,   428,   362, -1000, -1000, -1000,
  543.  -1000, -1000, -1000, -1000,   -18,   428,   -19, -1000, -1000, -1000,
  544.  -1000, -1000,     3,   428, -1000,  -291,  -293,   428,   787, -1000,
  545.     78, -1000,   126,  -206, -1000,   346,  -261,  -238,   138,   428,
  546.  -1000,   428, -1000,  -206, -1000,  -295,   539,    68,  -262,   -24,
  547.   -300,  -345, -1000, -1000,  -206,    34,   546, -1000,   125,  -248,
  548.   -206,   428, -1000,   428, -1000,    28,    28,   -82,   428,   -83,
  549.    553,   428,   -87,  -236,  -130,   553,  -206,  -305,  -206, -1000,
  550.  -1000,   428,   428,   428,   428,   428,   428,   428,   428,   428,
  551.    428,   428,   428,   428, -1000,   428,   428,   428,   428,   428,
  552.    428,   428,   428,   428,   428,   428, -1000,   710,   197,   197,
  553.    197, -1000,   -41,   121,   907, -1000,   884,  -296,  -312,   521,
  554.  -1000, -1000,   472, -1000,  -206,  -184, -1000,   -55, -1000,   907,
  555.   -238,  -206,   428,   428,   907,   696, -1000, -1000,  -142, -1000,
  556.  -1000, -1000, -1000, -1000,     6,     5,    -1,    -6,   120,  -126,
  557.   -206, -1000,  -120,   106,  -339, -1000, -1000,   168,  -300,   -13,
  558.  -1000, -1000,   -27,  -300, -1000,   -72, -1000, -1000,  -206, -1000,
  559.  -1000, -1000,  -134, -1000, -1000, -1000, -1000,   -28,  -309,   539,
  560.   -199, -1000,  -308, -1000, -1000,   521,   682, -1000, -1000, -1000,
  561.   -217,   852,   553, -1000,   837,  -236,   553, -1000,   553, -1000,
  562.  -1000,   -77, -1000,   155, -1000,   929,   919,   919, -1000, -1000,
  563.  -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,   521,   804,
  564.    177,   177,   182,   182,   182,   182,   310,   310,   801, -1000,
  565.  -1000,   428,   428,   428, -1000, -1000, -1000, -1000, -1000, -1000,
  566.  -1000, -1000,   158,  -141, -1000, -1000,   428,    77,  -145, -1000,
  567.     76, -1000,   428,  -206,  -184,   907,  -212,  -206, -1000,  -206,
  568.    428,  -217,  -148,   539,  -150,  -236,  -155,   539,  -158,  -302,
  569.    539,  -303, -1000,  -234,  -307,  -339,  -177,  -339, -1000,   119,
  570.   -304,   -54, -1000,  -300,  -300,  -300,   -94,  -345, -1000, -1000,
  571.   -206,   -30,  -345,   -78, -1000, -1000,  -206, -1000,  -248,   104,
  572.  -1000, -1000,   553,  -235,  -178,   428, -1000,   428,   553, -1000,
  573.  -1000,  -305, -1000,  -306, -1000,   428,   117,   907,   884,   428,
  574.  -1000,   763,  -206, -1000, -1000,   102,   116,   907,  -206,  -184,
  575.    907,  -184,    43,   428, -1000, -1000,   907,   539,  -217, -1000,
  576.    539,   539,  -236, -1000,   539, -1000, -1000,  -161,  -253,  -342,
  577.   -307, -1000,   115, -1000,   553, -1000, -1000,   553,   174, -1000,
  578.  -1000, -1000,  -100,   204, -1000, -1000, -1000, -1000,  -308,  -122,
  579.   -309,  -206, -1000, -1000,   539, -1000, -1000, -1000,   759,   738,
  580.  -1000, -1000, -1000,   724,   428,   428,   402,  -184, -1000, -1000,
  581.    -42,   428,   -42, -1000,    53,    42,  -206,   873, -1000,   539,
  582.  -1000, -1000,   539, -1000,   539, -1000,  -342, -1000,  -154,   114,
  583.  -1000,   167, -1000,  -250,  -206,   133,  -310,  -300, -1000,  -128,
  584.  -1000, -1000, -1000, -1000, -1000, -1000, -1000,   907,   407, -1000,
  585.     93, -1000,   907, -1000,  -206,  -206, -1000, -1000,   428, -1000,
  586.  -1000, -1000, -1000,  -347, -1000,  -347,  -313,     2, -1000,    -7,
  587.    -11, -1000,  -206,   428, -1000,   204, -1000, -1000, -1000,   428,
  588.   -206, -1000, -1000,   907, -1000, -1000,  -154,   172,  -316,  -345,
  589.   -163,  -165,  -345, -1000,   907,   668, -1000, -1000,  -333,  -206,
  590.  -1000,  -345,  -345, -1000, -1000, -1000, -1000, -1000, -1000 };
  591. int exp_yypgo[]={
  592.  
  593.      0,   851,   850,   849,    27,   848,    35,   847,   844,    16,
  594.    842,   472,    41,   841,   837,   835,   834,   514,   830,   110,
  595.    530,    26,     4,   445,   494,   501,   480,   828,   827,   810,
  596.    809,   802,   798,   797,   796,   795,    22,   507,   794,    11,
  597.     23,   793,     8,   497,    18,   792,   777,     6,   776,   775,
  598.    774,   773,   770,   767,     2,    20,    17,   475,   766,   765,
  599.     21,     3,   764,   761,   756,   755,   754,   732,   731,   730,
  600.    729,   727,     9,   716,   709,    25,   708,   704,   108,     5,
  601.      7,   701,    83,   698,   688,   503,   686,   675,   674,   673,
  602.    658,   657,   652,   651,   407,     1,    15,    24,    10,   473,
  603.    649,   495,   645,   549,   518,   643,     0,   642,   511,   637,
  604.    521,   632,   629,   502,   622,   620,   616,   614,   610,   609,
  605.    606,   605,   604,   603,   600,   599,    19,   597,   490,   591,
  606.    590,   581,   580,   578,   576,   574,   566,   493,   564,   563,
  607.    555,   554,   553,   551,   545,   544,   543,   536,   535,   534,
  608.    515,   506 };
  609. int exp_yyr1[]={
  610.  
  611.      0,    25,   102,   102,   102,   101,   101,    26,    26,     5,
  612.      5,     4,    27,    27,    27,    27,    84,    84,    85,    85,
  613.     85,    85,   107,    62,    86,    63,    78,    78,    78,    28,
  614.     28,    87,    87,    82,    82,    82,    82,    82,    82,    82,
  615.    108,   108,   109,   109,   109,     7,     7,    93,     1,    29,
  616.     29,    30,    31,    31,     2,     2,    64,    65,     8,     8,
  617.    112,   113,   113,   104,   103,   103,   103,   103,    33,    33,
  618.     97,    51,    51,     3,   114,   118,   119,    66,     6,     6,
  619.     50,    50,    58,    58,    34,   120,   100,   121,   121,     9,
  620.      9,     9,     9,     9,     9,     9,     9,     9,     9,     9,
  621.      9,     9,     9,     9,    19,    19,    19,    19,    19,    19,
  622.     19,    19,    19,    35,    35,    59,    59,    36,    37,    37,
  623.     38,    38,    80,    80,    80,    80,    10,   115,   124,   123,
  624.     76,    76,    88,    88,    88,    88,    88,    88,    88,    88,
  625.     88,    81,    81,    39,    39,    12,    12,    12,    67,    67,
  626.    110,   125,    94,    13,   126,   126,   127,   127,   128,   129,
  627.    130,   129,   131,   132,   131,   133,   133,   134,   134,    14,
  628.     91,    91,    91,    91,    91,    48,    48,    96,    49,    49,
  629.     95,    89,    89,    15,    15,    15,    15,    15,    15,    15,
  630.     16,   136,   136,   137,   137,   105,    79,    40,    40,    41,
  631.    138,    56,    56,    56,    56,    56,    57,    57,    17,    17,
  632.     68,    68,   116,   140,   139,    77,    77,    21,    21,    21,
  633.     21,   141,    18,    55,    55,    55,    55,    55,    55,    55,
  634.     55,    69,    69,    70,    70,   135,   111,    98,    53,    53,
  635.    143,   142,   144,   144,   122,   122,   145,    83,   106,    90,
  636.     90,    71,    72,    72,    72,    72,    72,    72,    72,    72,
  637.     72,    72,    42,    42,    42,    73,    73,    73,    73,    43,
  638.     74,    74,    74,    22,    22,    22,    45,    45,    75,    75,
  639.     75,    92,    92,    92,    92,   146,   146,   148,   149,   147,
  640.    150,   117,   151,   117,    11,    11,    20,    20,    20,    20,
  641.     20,    20,    20,    20,    20,    20,    20,    60,    60,    61,
  642.     61,    54,    54,    47,    47,    46,    46,    52,    52,    23,
  643.     23,    99,    99,    32,    32,    44,    44,    24,    24 };
  644. int exp_yyr2[]={
  645.  
  646.      0,     5,     2,     2,     2,     0,     4,     7,     5,     5,
  647.      7,     3,     3,     7,     7,    11,     7,    11,     3,     3,
  648.      3,     3,     1,    19,    11,     9,     3,     3,     3,     1,
  649.      5,     9,     7,     3,     5,     5,     3,     3,     7,     7,
  650.      0,     4,     2,     2,     2,     1,     5,    11,     7,     1,
  651.      5,     5,     3,     7,     1,     7,    13,     9,     3,     3,
  652.     13,     0,     4,     8,     2,     2,     2,     2,     1,     5,
  653.     11,     3,     5,    11,    13,     5,     7,     5,     3,    11,
  654.      3,     7,     1,     3,    11,     1,     4,     0,     4,     3,
  655.      7,     7,     7,     7,     7,     7,     7,     7,     7,     7,
  656.      7,     7,     7,     7,     3,     7,     7,     7,     7,     7,
  657.      7,     7,     7,     3,     7,     1,     3,     9,     1,     7,
  658.      3,     7,     3,     3,     3,     3,     5,     9,     1,    15,
  659.      3,     3,     3,     9,    11,     7,     9,     9,    11,     7,
  660.      9,     3,     7,     3,     7,     3,     3,     3,    13,    17,
  661.      7,    13,    11,     5,     3,     7,     2,     6,     6,     9,
  662.      1,    12,     9,     1,    12,     2,     2,     0,     4,    15,
  663.      3,     7,     9,     9,     7,     3,     5,    13,     1,     5,
  664.     11,    11,     9,     3,     3,     3,     3,     3,     3,     3,
  665.      5,     9,    11,     0,     4,     9,     3,     3,     7,     7,
  666.      2,     1,     3,     3,     5,     5,     1,     3,     1,     7,
  667.      7,     5,     9,     1,    11,     3,     3,     5,     5,     7,
  668.     11,     1,    19,     3,     3,     3,     3,     3,     3,     3,
  669.      3,    17,    15,     5,    11,     3,    11,     3,     3,     7,
  670.      1,    17,     4,     6,     9,     2,     7,     9,     3,     9,
  671.      7,     5,     3,     3,     3,     3,     3,     3,     3,     3,
  672.      3,     3,     1,     5,     5,     1,     3,     3,     5,    11,
  673.      5,    11,    13,     3,     7,     7,     3,     7,     3,     9,
  674.      7,     3,     3,     3,     3,     2,     3,     1,     1,    12,
  675.      1,    10,     1,    12,     5,     3,     3,     5,     3,     3,
  676.      3,     7,     3,     3,     5,     5,     5,     1,     3,     3,
  677.     11,     3,     7,     5,     9,     3,     5,     1,     5,     1,
  678.      5,     5,     9,     3,     5,     1,     5,     1,     5 };
  679. int exp_yychk[]={
  680.  
  681.  -1000,  -100,  -120,  -121,  -122,  -145,  -110,   353,   327,  -144,
  682.   -134,   375,   371,   316,  -133,  -108,  -104,  -131,  -129,   298,
  683.    367,   346,  -106,   355,  -106,  -106,  -109,  -103,  -110,  -111,
  684.   -114,  -115,  -116,  -117,  -142,  -118,  -123,  -139,   364,   352,
  685.    318,   324,   342,  -108,  -113,  -112,   -12,   376,   344,   375,
  686.    323,   323,   -25,  -101,  -102,  -103,  -104,  -105,   333,   -73,
  687.    -74,   -43,   283,   361,   359,   -25,   -25,  -147,   375,   375,
  688.    375,   375,   375,   306,  -113,   296,   375,   375,   -44,   369,
  689.    -42,  -106,   -72,   -62,   -63,   -64,   -65,   -66,   -67,   -68,
  690.    -69,   -70,   -71,   285,   -11,   295,   291,   320,   326,   -77,
  691.    347,   348,   357,   -12,   375,   374,  -101,  -137,  -136,   -39,
  692.    375,  -106,   -43,   361,   337,   337,   309,   313,  -150,   -44,
  693.    261,   322,  -124,  -140,  -106,   -78,   -85,   -82,   -79,   -86,
  694.    -87,   -89,   -90,   293,   328,   345,   336,   334,   292,   358,
  695.    375,   287,   290,   332,   356,  -106,  -132,  -106,  -130,   315,
  696.    -32,   -99,    -9,   375,   -19,   -20,    -5,   -15,   -10,   -12,
  697.    331,   -14,   -18,   279,   272,   271,   282,   377,   378,   371,
  698.    372,   379,   380,    -8,   -76,   330,   343,   341,   300,   373,
  699.    -42,   -42,   375,   289,   -21,   280,   281,   282,    -9,   375,
  700.    -42,  -106,    -9,   -26,  -106,   331,  -125,   -24,   375,   370,
  701.   -106,   331,  -106,   311,  -137,   297,   296,    -3,   -28,   337,
  702.    331,   331,  -106,  -106,   317,  -151,  -148,   331,   -37,   331,
  703.    -37,   289,   -17,   331,   -17,   -17,   -17,   -94,   282,   -95,
  704.    337,   282,   -95,   337,   -95,   337,  -128,   331,  -128,  -106,
  705.    -99,   259,   257,   258,   268,   263,   261,   267,   262,   270,
  706.    265,   266,   264,   269,  -106,   296,   -93,   277,   278,   276,
  707.    273,   275,   274,   272,   271,   330,   -21,    -9,   -20,   -20,
  708.    -20,   349,   -27,    -4,    -9,   -26,   -19,   331,   322,    -9,
  709.    375,   375,   -19,   337,   303,   362,  -106,   -35,   351,    -9,
  710.    -24,   -23,   366,   289,    -9,    -9,  -106,   375,   -80,   -82,
  711.    -88,   -79,   -81,   -84,   287,   290,   332,   356,   325,   284,
  712.    308,   -34,   -33,   -50,   301,    -6,   375,   376,   331,   -22,
  713.    -75,   -12,  -138,   331,   338,   -40,   -79,  -106,   317,  -146,
  714.   -119,   -92,   319,   -85,   -82,   -79,   -83,   354,  -143,   296,
  715.    -38,   -36,   -59,   368,  -106,    -9,    -9,   -57,   321,   -57,
  716.    337,    -9,   337,   -78,    -9,   337,   -60,   365,   337,   -78,
  717.   -106,  -127,  -126,   375,  -106,    -9,    -9,    -9,    -9,    -9,
  718.     -9,    -9,    -9,    -9,    -9,    -9,    -9,    -9,    -9,   -19,
  719.    -19,   -19,   -19,   -19,   -19,   -19,   -19,   -19,    -9,   351,
  720.    349,   297,   296,   -55,   268,   263,   261,   267,   262,   270,
  721.    265,   266,   375,   -11,  -106,   349,   296,   -30,   -29,  -106,
  722.    -42,   351,   297,   -23,  -106,    -9,    -9,   351,  -106,   -16,
  723.    289,   337,   -94,   337,   -94,   337,   -94,   337,   -94,   296,
  724.    337,   296,  -106,   -49,   329,   297,   296,   -51,   -97,    -6,
  725.    281,   -22,   351,   259,   260,   331,   -22,   297,   351,  -106,
  726.   -149,   337,   331,   -53,   -98,   375,   -80,   351,  -106,   -39,
  727.   -106,   351,   -56,   339,   365,   296,   -78,   296,   -60,   -78,
  728.    -78,   297,   351,   288,  -106,   296,    -4,    -9,   -19,   286,
  729.   -106,   -19,   305,    -1,    -2,   -31,   340,    -9,   310,   302,
  730.     -9,  -106,   -42,   363,  -106,  -106,    -9,   -56,   337,   -80,
  731.    337,   -60,   337,   -80,   337,   375,   -80,   375,   -52,   365,
  732.    -48,   -96,   375,    -6,   -58,   339,   -97,   296,   375,   351,
  733.    -75,   -75,   -45,   -22,   351,   -79,  -106,   -41,   331,   -40,
  734.    297,   351,  -106,   -36,   296,   -78,   365,   339,    -9,    -9,
  735.    -78,  -126,   375,    -9,   296,   -55,    -9,  -107,   349,  -106,
  736.    296,   297,   296,  -106,   -42,   -42,   314,    -9,   -80,   -56,
  737.    -80,   -80,   -60,   -80,   337,   -44,   -46,   -47,   -54,   375,
  738.    -61,   376,   -96,   296,   -78,   -78,   280,   297,   351,   -39,
  739.    351,   -98,  -106,   -80,   349,   349,   350,    -9,   -19,   360,
  740.    -42,   -72,    -9,   -72,   310,   314,  -106,    -7,   294,   -80,
  741.    -80,   -80,   -47,   297,  -106,   296,   281,   -91,   -79,   356,
  742.    290,  -106,   -13,   289,   375,   -22,   351,  -135,   350,  -141,
  743.    304,  -106,  -106,    -9,   -61,   375,   -54,   375,   322,   337,
  744.    -95,   -95,   337,  -106,    -9,    -9,  -106,  -106,   280,   375,
  745.    -79,   337,   337,   -79,   351,   375,  -106,   -79,   -79 };
  746. int exp_yydef[]={
  747.  
  748.     85,    -2,    87,    86,    88,   167,   245,     0,     0,     0,
  749.     40,     0,     0,     0,   168,   242,    40,   165,   166,    61,
  750.      0,     0,   246,   248,   150,   244,    41,    42,    43,    44,
  751.     64,    65,    66,    67,     5,   265,     5,     5,     0,     0,
  752.      0,     0,     0,   243,     0,    61,     0,   145,   146,   147,
  753.      0,     0,   325,   262,     5,     2,     3,     4,   193,     0,
  754.    266,   267,     0,     0,     0,     0,     0,   290,     0,     0,
  755.     75,   128,   213,     0,    62,     0,   163,   160,     0,     0,
  756.      1,   262,   262,   252,   253,   254,   255,   256,   257,   258,
  757.    259,   260,   261,     0,     0,     0,   262,     0,     0,     0,
  758.    327,     0,     0,   295,    -2,   216,     6,     0,   193,     0,
  759.    143,    29,   268,   270,     0,     0,     0,     0,     0,   292,
  760.    287,     0,   118,   118,    63,     0,    26,    27,    28,    18,
  761.     19,    20,    21,    33,   208,   208,    36,    37,   208,   208,
  762.    196,     0,     0,     0,     0,   162,     0,   159,     0,     0,
  763.    326,   323,     0,    -2,    89,   104,   296,   298,   299,   300,
  764.      0,   302,   303,     0,     0,     0,     0,   183,   184,   185,
  765.    186,   187,   188,   189,     0,     0,     0,    58,    59,   131,
  766.    263,   264,     0,     0,   294,     0,     0,     0,     0,    -2,
  767.      0,    77,     0,     0,   211,     0,   327,   319,     0,     0,
  768.    233,     0,   251,     0,   194,     0,     0,     0,    68,     0,
  769.      0,     0,   127,   212,     0,     0,     0,   240,     0,   115,
  770.      0,     0,    34,     0,    35,   206,   206,     0,     0,     0,
  771.      0,     0,     0,   307,     0,     0,     0,     0,     0,   236,
  772.    324,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  773.      0,     0,     0,     0,   321,     0,     0,     0,     0,     0,
  774.      0,     0,     0,     0,     0,     0,   297,     0,   304,   305,
  775.    306,     9,     0,    12,    11,   126,     0,     0,     0,     0,
  776.    217,   218,     0,    49,     0,   262,   210,     0,     8,   113,
  777.    319,     0,     0,     0,   328,     0,   195,   144,     0,   122,
  778.    123,   124,   125,   132,     0,     0,     0,     0,   141,     0,
  779.      0,    30,   178,     0,     0,    80,    78,     0,     0,     0,
  780.    273,   278,     0,     0,   200,     0,   197,   291,     0,   288,
  781.    285,   286,     0,   281,   282,   283,   284,     0,     0,     0,
  782.      0,   120,     0,   116,   214,     0,     0,    38,   207,    39,
  783.    201,     0,     0,    32,     0,   307,     0,   308,     0,   250,
  784.    164,     0,   156,   154,   161,    90,    91,    92,    93,    94,
  785.     95,    96,    97,    98,    99,   100,   101,   102,     0,   103,
  786.    105,   106,   107,   108,   109,   110,   111,   112,     0,   301,
  787.     10,     0,     0,     0,   223,   224,   225,   226,   227,   228,
  788.    229,   230,     0,     0,    25,   219,     0,     0,    54,    57,
  789.      0,     7,     0,     0,   262,   320,     0,     0,   191,     0,
  790.      0,   201,     0,     0,     0,   307,     0,     0,     0,     0,
  791.      0,     0,    74,   317,     0,     0,    82,    69,    71,     0,
  792.      0,     0,   271,     0,     0,     0,     0,     0,   269,   293,
  793.      0,     0,     0,     0,   238,   237,     0,   119,   115,     0,
  794.     60,   209,     0,   202,   203,     0,    31,     0,     0,   182,
  795.    249,     0,   158,     0,   322,     0,    14,    13,     0,     0,
  796.     22,     0,     0,    50,    51,     0,     0,    52,     0,   262,
  797.    114,   262,     0,     0,   234,   192,   190,     0,   201,   135,
  798.      0,     0,   307,   139,     0,   142,    16,     0,   325,     0,
  799.    179,   175,     0,    81,     0,    83,    72,     0,     0,   272,
  800.    274,   275,     0,   276,   280,   198,   289,    76,     0,     0,
  801.      0,     0,   129,   121,     0,    24,   204,   205,     0,     0,
  802.    181,   157,   155,     0,     0,     0,     0,   262,   220,    56,
  803.      0,     0,     0,   148,     0,     0,     0,    45,   133,     0,
  804.    136,   137,     0,   140,     0,    73,   318,   315,     0,   309,
  805.    311,     0,   176,     0,     0,     0,     0,     0,   279,     0,
  806.    247,   239,   241,   117,   152,   180,    47,    15,     0,   221,
  807.      0,    48,    53,    55,     0,     0,   232,   151,     0,   134,
  808.    138,    17,   316,     0,   313,     0,     0,     0,   170,     0,
  809.      0,    84,     0,     0,    79,   277,   199,   169,   235,     0,
  810.      0,   149,   231,    46,   312,   309,     0,     0,     0,     0,
  811.      0,     0,     0,    70,   153,     0,    23,   314,     0,     0,
  812.    171,     0,     0,   174,   222,   310,   177,   172,   173 };
  813. typedef struct { char *t_name; int t_val; } yytoktype;
  814. #ifndef YYDEBUG
  815. #    define YYDEBUG    0    /* don't allow debugging */
  816. #endif
  817.  
  818. #if YYDEBUG
  819.  
  820. yytoktype yytoks[] =
  821. {
  822.     "TOK_OR",    257,
  823.     "TOK_XOR",    258,
  824.     "TOK_AND",    259,
  825.     "TOK_ANDOR",    260,
  826.     "TOK_EQUAL",    261,
  827.     "TOK_GREATER_EQUAL",    262,
  828.     "TOK_GREATER_THAN",    263,
  829.     "TOK_IN",    264,
  830.     "TOK_INST_EQUAL",    265,
  831.     "TOK_INST_NOT_EQUAL",    266,
  832.     "TOK_LESS_EQUAL",    267,
  833.     "TOK_LESS_THAN",    268,
  834.     "TOK_LIKE",    269,
  835.     "TOK_NOT_EQUAL",    270,
  836.     "TOK_MINUS",    271,
  837.     "TOK_PLUS",    272,
  838.     "TOK_DIV",    273,
  839.     "TOK_MOD",    274,
  840.     "TOK_REAL_DIV",    275,
  841.     "TOK_TIMES",    276,
  842.     "TOK_CONCAT_OP",    277,
  843.     "TOK_EXP",    278,
  844.     "TOK_NOT",    279,
  845.     "TOK_DOT",    280,
  846.     "TOK_BACKSLASH",    281,
  847.     "TOK_LEFT_BRACKET",    282,
  848.     "TOK_ABSTRACT",    283,
  849.     "TOK_AGGREGATE",    284,
  850.     "TOK_ALIAS",    285,
  851.     "TOK_ALL_IN",    286,
  852.     "TOK_ARRAY",    287,
  853.     "TOK_AS",    288,
  854.     "TOK_ASSIGNMENT",    289,
  855.     "TOK_BAG",    290,
  856.     "TOK_BEGIN",    291,
  857.     "TOK_BINARY",    292,
  858.     "TOK_BOOLEAN",    293,
  859.     "TOK_BY",    294,
  860.     "TOK_CASE",    295,
  861.     "TOK_COLON",    296,
  862.     "TOK_COMMA",    297,
  863.     "TOK_CONSTANT",    298,
  864.     "TOK_CONTEXT",    299,
  865.     "TOK_E",    300,
  866.     "TOK_DERIVE",    301,
  867.     "TOK_ELSE",    302,
  868.     "TOK_END",    303,
  869.     "TOK_END_ALIAS",    304,
  870.     "TOK_END_CASE",    305,
  871.     "TOK_END_CONSTANT",    306,
  872.     "TOK_END_CONTEXT",    307,
  873.     "TOK_END_ENTITY",    308,
  874.     "TOK_END_FUNCTION",    309,
  875.     "TOK_END_IF",    310,
  876.     "TOK_END_LOCAL",    311,
  877.     "TOK_END_MODEL",    312,
  878.     "TOK_END_PROCEDURE",    313,
  879.     "TOK_END_REPEAT",    314,
  880.     "TOK_END_RULE",    315,
  881.     "TOK_END_SCHEMA",    316,
  882.     "TOK_END_TYPE",    317,
  883.     "TOK_ENTITY",    318,
  884.     "TOK_ENUMERATION",    319,
  885.     "TOK_ESCAPE",    320,
  886.     "TOK_FIXED",    321,
  887.     "TOK_FOR",    322,
  888.     "TOK_FROM",    323,
  889.     "TOK_FUNCTION",    324,
  890.     "TOK_GENERIC",    325,
  891.     "TOK_IF",    326,
  892.     "TOK_INCLUDE",    327,
  893.     "TOK_INTEGER",    328,
  894.     "TOK_INVERSE",    329,
  895.     "TOK_LEFT_CURL",    330,
  896.     "TOK_LEFT_PAREN",    331,
  897.     "TOK_LIST",    332,
  898.     "TOK_LOCAL",    333,
  899.     "TOK_LOGICAL",    334,
  900.     "TOK_MODEL",    335,
  901.     "TOK_NUMBER",    336,
  902.     "TOK_OF",    337,
  903.     "TOK_ONEOF",    338,
  904.     "TOK_OPTIONAL",    339,
  905.     "TOK_OTHERWISE",    340,
  906.     "TOK_PI",    341,
  907.     "TOK_PROCEDURE",    342,
  908.     "TOK_QUERY",    343,
  909.     "TOK_QUESTION_MARK",    344,
  910.     "TOK_REAL",    345,
  911.     "TOK_REFERENCE",    346,
  912.     "TOK_REPEAT",    347,
  913.     "TOK_RETURN",    348,
  914.     "TOK_RIGHT_BRACKET",    349,
  915.     "TOK_RIGHT_CURL",    350,
  916.     "TOK_RIGHT_PAREN",    351,
  917.     "TOK_RULE",    352,
  918.     "TOK_SCHEMA",    353,
  919.     "TOK_SELECT",    354,
  920.     "TOK_SEMICOLON",    355,
  921.     "TOK_SET",    356,
  922.     "TOK_SKIP",    357,
  923.     "TOK_STRING",    358,
  924.     "TOK_SUBTYPE",    359,
  925.     "TOK_SUCH_THAT",    360,
  926.     "TOK_SUPERTYPE",    361,
  927.     "TOK_THEN",    362,
  928.     "TOK_TO",    363,
  929.     "TOK_TYPE",    364,
  930.     "TOK_UNIQUE",    365,
  931.     "TOK_UNTIL",    366,
  932.     "TOK_USE",    367,
  933.     "TOK_VAR",    368,
  934.     "TOK_WHERE",    369,
  935.     "TOK_WHILE",    370,
  936.     "TOK_STRING_LITERAL",    371,
  937.     "TOK_STRING_LITERAL_ENCODED",    372,
  938.     "TOK_BUILTIN_FUNCTION",    373,
  939.     "TOK_BUILTIN_PROCEDURE",    374,
  940.     "TOK_IDENTIFIER",    375,
  941.     "TOK_SELF",    376,
  942.     "TOK_INTEGER_LITERAL",    377,
  943.     "TOK_REAL_LITERAL",    378,
  944.     "TOK_LOGICAL_LITERAL",    379,
  945.     "TOK_BINARY_LITERAL",    380,
  946.     "-unknown-",    -1    /* ends search */
  947. };
  948.  
  949. char * yyreds[] =
  950. {
  951.     "-no such reduction-",
  952.     "action_body : action_body_item_rep statement_rep",
  953.     "action_body_item : declaration",
  954.     "action_body_item : constant_decl",
  955.     "action_body_item : local_decl",
  956.     "action_body_item_rep : /* empty */",
  957.     "action_body_item_rep : action_body_item action_body_item_rep",
  958.     "actual_parameters : TOK_LEFT_PAREN expression_list TOK_RIGHT_PAREN",
  959.     "actual_parameters : TOK_LEFT_PAREN TOK_RIGHT_PAREN",
  960.     "aggregate_initializer : TOK_LEFT_BRACKET TOK_RIGHT_BRACKET",
  961.     "aggregate_initializer : TOK_LEFT_BRACKET aggregate_init_body TOK_RIGHT_BRACKET",
  962.     "aggregate_init_element : expression",
  963.     "aggregate_init_body : aggregate_init_element",
  964.     "aggregate_init_body : aggregate_init_element TOK_COLON expression",
  965.     "aggregate_init_body : aggregate_init_body TOK_COMMA aggregate_init_element",
  966.     "aggregate_init_body : aggregate_init_body TOK_COMMA aggregate_init_element TOK_COLON expression",
  967.     "aggregate_type : TOK_AGGREGATE TOK_OF parameter_type",
  968.     "aggregate_type : TOK_AGGREGATE TOK_COLON TOK_IDENTIFIER TOK_OF parameter_type",
  969.     "aggregation_type : array_type",
  970.     "aggregation_type : bag_type",
  971.     "aggregation_type : list_type",
  972.     "aggregation_type : set_type",
  973.     "alias_statement : TOK_ALIAS TOK_IDENTIFIER TOK_FOR general_ref semicolon",
  974.     "alias_statement : TOK_ALIAS TOK_IDENTIFIER TOK_FOR general_ref semicolon statement_rep TOK_END_ALIAS semicolon",
  975.     "array_type : TOK_ARRAY index_spec TOK_OF optional_or_unique attribute_type",
  976.     "assignment_statement : general_ref TOK_ASSIGNMENT expression semicolon",
  977.     "attribute_type : aggregation_type",
  978.     "attribute_type : basic_type",
  979.     "attribute_type : defined_type",
  980.     "explicit_attr_list : /* empty */",
  981.     "explicit_attr_list : explicit_attr_list explicit_attribute",
  982.     "bag_type : TOK_BAG limit_spec TOK_OF attribute_type",
  983.     "bag_type : TOK_BAG TOK_OF attribute_type",
  984.     "basic_type : TOK_BOOLEAN",
  985.     "basic_type : TOK_INTEGER precision_spec",
  986.     "basic_type : TOK_REAL precision_spec",
  987.     "basic_type : TOK_NUMBER",
  988.     "basic_type : TOK_LOGICAL",
  989.     "basic_type : TOK_BINARY precision_spec optional_fixed",
  990.     "basic_type : TOK_STRING precision_spec optional_fixed",
  991.     "block_list : /* empty */",
  992.     "block_list : block_list block_member",
  993.     "block_member : declaration",
  994.     "block_member : include_directive",
  995.     "block_member : rule_decl",
  996.     "by_expression : /* empty */",
  997.     "by_expression : TOK_BY expression",
  998.     "cardinality_op : TOK_LEFT_CURL expression TOK_COLON expression TOK_RIGHT_CURL",
  999.     "case_action : case_labels TOK_COLON statement",
  1000.     "case_action_list : /* empty */",
  1001.     "case_action_list : case_action_list case_action",
  1002.     "case_block : case_action_list case_otherwise",
  1003.     "case_labels : expression",
  1004.     "case_labels : case_labels TOK_COMMA expression",
  1005.     "case_otherwise : /* empty */",
  1006.     "case_otherwise : TOK_OTHERWISE TOK_COLON statement",
  1007.     "case_statement : TOK_CASE expression TOK_OF case_block TOK_END_CASE semicolon",
  1008.     "compound_statement : TOK_BEGIN statement_rep TOK_END semicolon",
  1009.     "constant : TOK_PI",
  1010.     "constant : TOK_E",
  1011.     "constant_body : identifier TOK_COLON attribute_type TOK_ASSIGNMENT expression semicolon",
  1012.     "constant_body_list : /* empty */",
  1013.     "constant_body_list : constant_body constant_body_list",
  1014.     "constant_decl : TOK_CONSTANT constant_body_list TOK_END_CONSTANT semicolon",
  1015.     "declaration : entity_decl",
  1016.     "declaration : function_decl",
  1017.     "declaration : procedure_decl",
  1018.     "declaration : type_decl",
  1019.     "derive_decl : /* empty */",
  1020.     "derive_decl : TOK_DERIVE derived_attribute_rep",
  1021.     "derived_attribute : attribute_decl TOK_COLON attribute_type initializer semicolon",
  1022.     "derived_attribute_rep : derived_attribute",
  1023.     "derived_attribute_rep : derived_attribute_rep derived_attribute",
  1024.     "entity_body : explicit_attr_list derive_decl inverse_clause unique_clause where_rule",
  1025.     "entity_decl : entity_header subsuper_decl semicolon entity_body TOK_END_ENTITY semicolon",
  1026.     "entity_header : TOK_ENTITY TOK_IDENTIFIER",
  1027.     "enumeration_type : TOK_ENUMERATION TOK_OF nested_id_list",
  1028.     "escape_statement : TOK_ESCAPE semicolon",
  1029.     "attribute_decl : TOK_IDENTIFIER",
  1030.     "attribute_decl : TOK_SELF TOK_BACKSLASH TOK_IDENTIFIER TOK_DOT TOK_IDENTIFIER",
  1031.     "attribute_decl_list : attribute_decl",
  1032.     "attribute_decl_list : attribute_decl_list TOK_COMMA attribute_decl",
  1033.     "optional : /* empty */",
  1034.     "optional : TOK_OPTIONAL",
  1035.     "explicit_attribute : attribute_decl_list TOK_COLON optional attribute_type semicolon",
  1036.     "express_file : /* empty */",
  1037.     "express_file : schema_decl_list",
  1038.     "schema_decl_list : /* empty */",
  1039.     "schema_decl_list : schema_decl_list schema_decl",
  1040.     "expression : simple_expression",
  1041.     "expression : expression TOK_AND expression",
  1042.     "expression : expression TOK_OR expression",
  1043.     "expression : expression TOK_XOR expression",
  1044.     "expression : expression TOK_LESS_THAN expression",
  1045.     "expression : expression TOK_GREATER_THAN expression",
  1046.     "expression : expression TOK_EQUAL expression",
  1047.     "expression : expression TOK_LESS_EQUAL expression",
  1048.     "expression : expression TOK_GREATER_EQUAL expression",
  1049.     "expression : expression TOK_NOT_EQUAL expression",
  1050.     "expression : expression TOK_INST_EQUAL expression",
  1051.     "expression : expression TOK_INST_NOT_EQUAL expression",
  1052.     "expression : expression TOK_IN expression",
  1053.     "expression : expression TOK_LIKE expression",
  1054.     "expression : simple_expression cardinality_op simple_expression",
  1055.     "simple_expression : unary_expression",
  1056.     "simple_expression : simple_expression TOK_CONCAT_OP simple_expression",
  1057.     "simple_expression : simple_expression TOK_EXP simple_expression",
  1058.     "simple_expression : simple_expression TOK_TIMES simple_expression",
  1059.     "simple_expression : simple_expression TOK_DIV simple_expression",
  1060.     "simple_expression : simple_expression TOK_REAL_DIV simple_expression",
  1061.     "simple_expression : simple_expression TOK_MOD simple_expression",
  1062.     "simple_expression : simple_expression TOK_PLUS simple_expression",
  1063.     "simple_expression : simple_expression TOK_MINUS simple_expression",
  1064.     "expression_list : expression",
  1065.     "expression_list : expression_list TOK_COMMA expression",
  1066.     "var : /* empty */",
  1067.     "var : TOK_VAR",
  1068.     "formal_parameter : var id_list TOK_COLON parameter_type",
  1069.     "formal_parameter_list : /* empty */",
  1070.     "formal_parameter_list : TOK_LEFT_PAREN formal_parameter_rep TOK_RIGHT_PAREN",
  1071.     "formal_parameter_rep : formal_parameter",
  1072.     "formal_parameter_rep : formal_parameter_rep semicolon formal_parameter",
  1073.     "parameter_type : basic_type",
  1074.     "parameter_type : conformant_aggregation",
  1075.     "parameter_type : defined_type",
  1076.     "parameter_type : generic_type",
  1077.     "function_call : function_id actual_parameters",
  1078.     "function_decl : function_header action_body TOK_END_FUNCTION semicolon",
  1079.     "function_header : TOK_FUNCTION TOK_IDENTIFIER",
  1080.     "function_header : TOK_FUNCTION TOK_IDENTIFIER formal_parameter_list TOK_COLON parameter_type semicolon",
  1081.     "function_id : TOK_IDENTIFIER",
  1082.     "function_id : TOK_BUILTIN_FUNCTION",
  1083.     "conformant_aggregation : aggregate_type",
  1084.     "conformant_aggregation : TOK_ARRAY TOK_OF optional_or_unique parameter_type",
  1085.     "conformant_aggregation : TOK_ARRAY index_spec TOK_OF optional_or_unique parameter_type",
  1086.     "conformant_aggregation : TOK_BAG TOK_OF parameter_type",
  1087.     "conformant_aggregation : TOK_BAG index_spec TOK_OF parameter_type",
  1088.     "conformant_aggregation : TOK_LIST TOK_OF unique parameter_type",
  1089.     "conformant_aggregation : TOK_LIST index_spec TOK_OF unique parameter_type",
  1090.     "conformant_aggregation : TOK_SET TOK_OF parameter_type",
  1091.     "conformant_aggregation : TOK_SET index_spec TOK_OF parameter_type",
  1092.     "generic_type : TOK_GENERIC",
  1093.     "generic_type : TOK_GENERIC TOK_COLON TOK_IDENTIFIER",
  1094.     "id_list : TOK_IDENTIFIER",
  1095.     "id_list : id_list TOK_COMMA TOK_IDENTIFIER",
  1096.     "identifier : TOK_SELF",
  1097.     "identifier : TOK_QUESTION_MARK",
  1098.     "identifier : TOK_IDENTIFIER",
  1099.     "if_statement : TOK_IF expression TOK_THEN statement_rep TOK_END_IF semicolon",
  1100.     "if_statement : TOK_IF expression TOK_THEN statement_rep TOK_ELSE statement_rep TOK_END_IF semicolon",
  1101.     "include_directive : TOK_INCLUDE TOK_STRING_LITERAL semicolon",
  1102.     "increment_control : TOK_IDENTIFIER TOK_ASSIGNMENT expression TOK_TO expression by_expression",
  1103.     "index_spec : TOK_LEFT_BRACKET expression TOK_COLON expression TOK_RIGHT_BRACKET",
  1104.     "initializer : TOK_ASSIGNMENT expression",
  1105.     "rename : TOK_IDENTIFIER",
  1106.     "rename : TOK_IDENTIFIER TOK_AS TOK_IDENTIFIER",
  1107.     "rename_list : rename",
  1108.     "rename_list : rename_list TOK_COMMA rename",
  1109.     "parened_rename_list : TOK_LEFT_PAREN rename_list TOK_RIGHT_PAREN",
  1110.     "reference_clause : TOK_REFERENCE TOK_FROM TOK_IDENTIFIER semicolon",
  1111.     "reference_clause : TOK_REFERENCE TOK_FROM TOK_IDENTIFIER",
  1112.     "reference_clause : TOK_REFERENCE TOK_FROM TOK_IDENTIFIER parened_rename_list semicolon",
  1113.     "use_clause : TOK_USE TOK_FROM TOK_IDENTIFIER semicolon",
  1114.     "use_clause : TOK_USE TOK_FROM TOK_IDENTIFIER",
  1115.     "use_clause : TOK_USE TOK_FROM TOK_IDENTIFIER parened_rename_list semicolon",
  1116.     "interface_specification : use_clause",
  1117.     "interface_specification : reference_clause",
  1118.     "interface_specification_list : /* empty */",
  1119.     "interface_specification_list : interface_specification_list interface_specification",
  1120.     "interval : TOK_LEFT_CURL simple_expression rel_op simple_expression rel_op simple_expression right_curl",
  1121.     "set_or_bag_of_entity : defined_type",
  1122.     "set_or_bag_of_entity : TOK_SET TOK_OF defined_type",
  1123.     "set_or_bag_of_entity : TOK_SET limit_spec TOK_OF defined_type",
  1124.     "set_or_bag_of_entity : TOK_BAG limit_spec TOK_OF defined_type",
  1125.     "set_or_bag_of_entity : TOK_BAG TOK_OF defined_type",
  1126.     "inverse_attr_list : inverse_attr",
  1127.     "inverse_attr_list : inverse_attr_list inverse_attr",
  1128.     "inverse_attr : TOK_IDENTIFIER TOK_COLON set_or_bag_of_entity TOK_FOR TOK_IDENTIFIER semicolon",
  1129.     "inverse_clause : /* empty */",
  1130.     "inverse_clause : TOK_INVERSE inverse_attr_list",
  1131.     "limit_spec : TOK_LEFT_BRACKET expression TOK_COLON expression TOK_RIGHT_BRACKET",
  1132.     "list_type : TOK_LIST limit_spec TOK_OF unique attribute_type",
  1133.     "list_type : TOK_LIST TOK_OF unique attribute_type",
  1134.     "literal : TOK_INTEGER_LITERAL",
  1135.     "literal : TOK_REAL_LITERAL",
  1136.     "literal : TOK_STRING_LITERAL",
  1137.     "literal : TOK_STRING_LITERAL_ENCODED",
  1138.     "literal : TOK_LOGICAL_LITERAL",
  1139.     "literal : TOK_BINARY_LITERAL",
  1140.     "literal : constant",
  1141.     "local_initializer : TOK_ASSIGNMENT expression",
  1142.     "local_variable : id_list TOK_COLON parameter_type semicolon",
  1143.     "local_variable : id_list TOK_COLON parameter_type local_initializer semicolon",
  1144.     "local_body : /* empty */",
  1145.     "local_body : local_variable local_body",
  1146.     "local_decl : TOK_LOCAL local_body TOK_END_LOCAL semicolon",
  1147.     "defined_type : TOK_IDENTIFIER",
  1148.     "defined_type_list : defined_type",
  1149.     "defined_type_list : defined_type_list TOK_COMMA defined_type",
  1150.     "nested_id_list : TOK_LEFT_PAREN id_list TOK_RIGHT_PAREN",
  1151.     "oneof_op : TOK_ONEOF",
  1152.     "optional_or_unique : /* empty */",
  1153.     "optional_or_unique : TOK_OPTIONAL",
  1154.     "optional_or_unique : TOK_UNIQUE",
  1155.     "optional_or_unique : TOK_OPTIONAL TOK_UNIQUE",
  1156.     "optional_or_unique : TOK_UNIQUE TOK_OPTIONAL",
  1157.     "optional_fixed : /* empty */",
  1158.     "optional_fixed : TOK_FIXED",
  1159.     "precision_spec : /* empty */",
  1160.     "precision_spec : TOK_LEFT_PAREN expression TOK_RIGHT_PAREN",
  1161.     "proc_call_statement : procedure_id actual_parameters semicolon",
  1162.     "proc_call_statement : procedure_id semicolon",
  1163.     "procedure_decl : procedure_header action_body TOK_END_PROCEDURE semicolon",
  1164.     "procedure_header : TOK_PROCEDURE TOK_IDENTIFIER",
  1165.     "procedure_header : TOK_PROCEDURE TOK_IDENTIFIER formal_parameter_list semicolon",
  1166.     "procedure_id : TOK_IDENTIFIER",
  1167.     "procedure_id : TOK_BUILTIN_PROCEDURE",
  1168.     "qualifier : TOK_DOT TOK_IDENTIFIER",
  1169.     "qualifier : TOK_BACKSLASH TOK_IDENTIFIER",
  1170.     "qualifier : TOK_LEFT_BRACKET simple_expression TOK_RIGHT_BRACKET",
  1171.     "qualifier : TOK_LEFT_BRACKET simple_expression TOK_COLON simple_expression TOK_RIGHT_BRACKET",
  1172.     "query_expression : TOK_QUERY TOK_LEFT_PAREN TOK_IDENTIFIER TOK_ALL_IN expression TOK_SUCH_THAT",
  1173.     "query_expression : TOK_QUERY TOK_LEFT_PAREN TOK_IDENTIFIER TOK_ALL_IN expression TOK_SUCH_THAT expression TOK_RIGHT_PAREN",
  1174.     "rel_op : TOK_LESS_THAN",
  1175.     "rel_op : TOK_GREATER_THAN",
  1176.     "rel_op : TOK_EQUAL",
  1177.     "rel_op : TOK_LESS_EQUAL",
  1178.     "rel_op : TOK_GREATER_EQUAL",
  1179.     "rel_op : TOK_NOT_EQUAL",
  1180.     "rel_op : TOK_INST_EQUAL",
  1181.     "rel_op : TOK_INST_NOT_EQUAL",
  1182.     "repeat_statement : TOK_REPEAT increment_control while_control until_control semicolon statement_rep TOK_END_REPEAT semicolon",
  1183.     "repeat_statement : TOK_REPEAT while_control until_control semicolon statement_rep TOK_END_REPEAT semicolon",
  1184.     "return_statement : TOK_RETURN semicolon",
  1185.     "return_statement : TOK_RETURN TOK_LEFT_PAREN expression TOK_RIGHT_PAREN semicolon",
  1186.     "right_curl : TOK_RIGHT_CURL",
  1187.     "rule_decl : rule_header action_body where_rule TOK_END_RULE semicolon",
  1188.     "rule_formal_parameter : TOK_IDENTIFIER",
  1189.     "rule_formal_parameter_list : rule_formal_parameter",
  1190.     "rule_formal_parameter_list : rule_formal_parameter_list TOK_COMMA rule_formal_parameter",
  1191.     "rule_header : TOK_RULE TOK_IDENTIFIER TOK_FOR TOK_LEFT_PAREN",
  1192.     "rule_header : TOK_RULE TOK_IDENTIFIER TOK_FOR TOK_LEFT_PAREN rule_formal_parameter_list TOK_RIGHT_PAREN semicolon",
  1193.     "schema_body : interface_specification_list block_list",
  1194.     "schema_body : interface_specification_list constant_decl block_list",
  1195.     "schema_decl : schema_header schema_body TOK_END_SCHEMA semicolon",
  1196.     "schema_decl : include_directive",
  1197.     "schema_header : TOK_SCHEMA TOK_IDENTIFIER semicolon",
  1198.     "select_type : TOK_SELECT TOK_LEFT_PAREN defined_type_list TOK_RIGHT_PAREN",
  1199.     "semicolon : TOK_SEMICOLON",
  1200.     "set_type : TOK_SET limit_spec TOK_OF attribute_type",
  1201.     "set_type : TOK_SET TOK_OF attribute_type",
  1202.     "skip_statement : TOK_SKIP semicolon",
  1203.     "statement : alias_statement",
  1204.     "statement : assignment_statement",
  1205.     "statement : case_statement",
  1206.     "statement : compound_statement",
  1207.     "statement : escape_statement",
  1208.     "statement : if_statement",
  1209.     "statement : proc_call_statement",
  1210.     "statement : repeat_statement",
  1211.     "statement : return_statement",
  1212.     "statement : skip_statement",
  1213.     "statement_rep : /* empty */",
  1214.     "statement_rep : semicolon statement_rep",
  1215.     "statement_rep : statement statement_rep",
  1216.     "subsuper_decl : /* empty */",
  1217.     "subsuper_decl : supertype_decl",
  1218.     "subsuper_decl : subtype_decl",
  1219.     "subsuper_decl : supertype_decl subtype_decl",
  1220.     "subtype_decl : TOK_SUBTYPE TOK_OF TOK_LEFT_PAREN defined_type_list TOK_RIGHT_PAREN",
  1221.     "supertype_decl : TOK_ABSTRACT TOK_SUPERTYPE",
  1222.     "supertype_decl : TOK_SUPERTYPE TOK_OF TOK_LEFT_PAREN supertype_expression TOK_RIGHT_PAREN",
  1223.     "supertype_decl : TOK_ABSTRACT TOK_SUPERTYPE TOK_OF TOK_LEFT_PAREN supertype_expression TOK_RIGHT_PAREN",
  1224.     "supertype_expression : supertype_factor",
  1225.     "supertype_expression : supertype_expression TOK_AND supertype_factor",
  1226.     "supertype_expression : supertype_expression TOK_ANDOR supertype_factor",
  1227.     "supertype_expression_list : supertype_expression",
  1228.     "supertype_expression_list : supertype_expression_list TOK_COMMA supertype_expression",
  1229.     "supertype_factor : identifier",
  1230.     "supertype_factor : oneof_op TOK_LEFT_PAREN supertype_expression_list TOK_RIGHT_PAREN",
  1231.     "supertype_factor : TOK_LEFT_PAREN supertype_expression TOK_RIGHT_PAREN",
  1232.     "type : aggregation_type",
  1233.     "type : basic_type",
  1234.     "type : defined_type",
  1235.     "type : select_type",
  1236.     "type_item_body : enumeration_type",
  1237.     "type_item_body : type",
  1238.     "type_item : TOK_IDENTIFIER TOK_EQUAL",
  1239.     "type_item : TOK_IDENTIFIER TOK_EQUAL type_item_body",
  1240.     "type_item : TOK_IDENTIFIER TOK_EQUAL type_item_body semicolon",
  1241.     "type_decl : TOK_TYPE type_item",
  1242.     "type_decl : TOK_TYPE type_item TOK_END_TYPE semicolon",
  1243.     "type_decl : TOK_TYPE type_item where_rule",
  1244.     "type_decl : TOK_TYPE type_item where_rule TOK_END_TYPE semicolon",
  1245.     "general_ref : general_ref qualifier",
  1246.     "general_ref : identifier",
  1247.     "unary_expression : aggregate_initializer",
  1248.     "unary_expression : unary_expression qualifier",
  1249.     "unary_expression : literal",
  1250.     "unary_expression : function_call",
  1251.     "unary_expression : identifier",
  1252.     "unary_expression : TOK_LEFT_PAREN expression TOK_RIGHT_PAREN",
  1253.     "unary_expression : interval",
  1254.     "unary_expression : query_expression",
  1255.     "unary_expression : TOK_NOT unary_expression",
  1256.     "unary_expression : TOK_PLUS unary_expression",
  1257.     "unary_expression : TOK_MINUS unary_expression",
  1258.     "unique : /* empty */",
  1259.     "unique : TOK_UNIQUE",
  1260.     "qualified_attr : TOK_IDENTIFIER",
  1261.     "qualified_attr : TOK_SELF TOK_BACKSLASH TOK_IDENTIFIER TOK_DOT TOK_IDENTIFIER",
  1262.     "qualified_attr_list : qualified_attr",
  1263.     "qualified_attr_list : qualified_attr_list TOK_COMMA qualified_attr",
  1264.     "labelled_attrib_list : qualified_attr_list semicolon",
  1265.     "labelled_attrib_list : TOK_IDENTIFIER TOK_COLON qualified_attr_list semicolon",
  1266.     "labelled_attrib_list_list : labelled_attrib_list",
  1267.     "labelled_attrib_list_list : labelled_attrib_list_list labelled_attrib_list",
  1268.     "unique_clause : /* empty */",
  1269.     "unique_clause : TOK_UNIQUE labelled_attrib_list_list",
  1270.     "until_control : /* empty */",
  1271.     "until_control : TOK_UNTIL expression",
  1272.     "where_clause : expression semicolon",
  1273.     "where_clause : TOK_IDENTIFIER TOK_COLON expression semicolon",
  1274.     "where_clause_list : where_clause",
  1275.     "where_clause_list : where_clause_list where_clause",
  1276.     "where_rule : /* empty */",
  1277.     "where_rule : TOK_WHERE where_clause_list",
  1278.     "while_control : /* empty */",
  1279.     "while_control : TOK_WHILE expression",
  1280. };
  1281. #endif /* YYDEBUG */
  1282. #line 1 "/usr/lib/yaccpar"
  1283. /*    @(#)yaccpar 1.10 89/04/04 SMI; from S5R3 1.10    */
  1284.  
  1285. /*
  1286. ** Skeleton parser driver for yacc output
  1287. */
  1288.  
  1289. /*
  1290. ** yacc user known macros and defines
  1291. */
  1292. #define YYERROR        goto yyerrlab
  1293. #define YYACCEPT    { free(yys); free(exp_yyv); return(0); }
  1294. #define YYABORT        { free(yys); free(exp_yyv); return(1); }
  1295. #define YYBACKUP( newtoken, newvalue )\
  1296. {\
  1297.     if ( exp_yychar >= 0 || ( exp_yyr2[ yytmp ] >> 1 ) != 1 )\
  1298.     {\
  1299.         yyerror( "syntax error - cannot backup" );\
  1300.         goto yyerrlab;\
  1301.     }\
  1302.     exp_yychar = newtoken;\
  1303.     yystate = *yyps;\
  1304.     exp_yylval = newvalue;\
  1305.     goto yynewstate;\
  1306. }
  1307. #define YYRECOVERING()    (!!exp_yyerrflag)
  1308. #ifndef YYDEBUG
  1309. #    define YYDEBUG    1    /* make debugging available */
  1310. #endif
  1311.  
  1312. /*
  1313. ** user known globals
  1314. */
  1315. int exp_yydebug;            /* set to 1 to get debugging */
  1316.  
  1317. /*
  1318. ** driver internal defines
  1319. */
  1320. #define YYFLAG        (-1000)
  1321.  
  1322. /*
  1323. ** static variables used by the parser
  1324. */
  1325. static exp_YYSTYPE *exp_yyv;            /* value stack */
  1326. static int *yys;            /* state stack */
  1327.  
  1328. static exp_YYSTYPE *yypv;            /* top of value stack */
  1329. static int *yyps;            /* top of state stack */
  1330.  
  1331. static int yystate;            /* current state */
  1332. static int yytmp;            /* extra var (lasts between blocks) */
  1333.  
  1334. int exp_yynerrs;            /* number of errors */
  1335.  
  1336. int exp_yyerrflag;            /* error recovery flag */
  1337. int exp_yychar;            /* current input token number */
  1338.  
  1339.  
  1340. /*
  1341. ** exp_yyparse - return 0 if worked, 1 if syntax error not recovered from
  1342. */
  1343. int
  1344. exp_yyparse()
  1345. {
  1346.     register exp_YYSTYPE *yypvt;    /* top of value stack for $vars */
  1347.     unsigned yymaxdepth = YYMAXDEPTH;
  1348.  
  1349.     /*
  1350.     ** Initialize externals - exp_yyparse may be called more than once
  1351.     */
  1352.     exp_yyv = (exp_YYSTYPE*)malloc(yymaxdepth*sizeof(exp_YYSTYPE));
  1353.     yys = (int*)malloc(yymaxdepth*sizeof(int));
  1354.     if (!exp_yyv || !yys)
  1355.     {
  1356.         yyerror( "out of memory" );
  1357.         return(1);
  1358.     }
  1359.     yypv = &exp_yyv[-1];
  1360.     yyps = &yys[-1];
  1361.     yystate = 0;
  1362.     yytmp = 0;
  1363.     exp_yynerrs = 0;
  1364.     exp_yyerrflag = 0;
  1365.     exp_yychar = -1;
  1366.  
  1367.     goto yystack;
  1368.     {
  1369.         register exp_YYSTYPE *yy_pv;    /* top of value stack */
  1370.         register int *yy_ps;        /* top of state stack */
  1371.         register int yy_state;        /* current state */
  1372.         register int  yy_n;        /* internal state number info */
  1373.  
  1374.         /*
  1375.         ** get globals into registers.
  1376.         ** branch to here only if YYBACKUP was called.
  1377.         */
  1378.     yynewstate:
  1379.         yy_pv = yypv;
  1380.         yy_ps = yyps;
  1381.         yy_state = yystate;
  1382.         goto yy_newstate;
  1383.  
  1384.         /*
  1385.         ** get globals into registers.
  1386.         ** either we just started, or we just finished a reduction
  1387.         */
  1388.     yystack:
  1389.         yy_pv = yypv;
  1390.         yy_ps = yyps;
  1391.         yy_state = yystate;
  1392.  
  1393.         /*
  1394.         ** top of for (;;) loop while no reductions done
  1395.         */
  1396.     yy_stack:
  1397.         /*
  1398.         ** put a state and value onto the stacks
  1399.         */
  1400. #if YYDEBUG
  1401.         /*
  1402.         ** if debugging, look up token value in list of value vs.
  1403.         ** name pairs.  0 and negative (-1) are special values.
  1404.         ** Note: linear search is used since time is not a real
  1405.         ** consideration while debugging.
  1406.         */
  1407.         if ( exp_yydebug )
  1408.         {
  1409.             register int yy_i;
  1410.  
  1411.             (void)printf( "State %d, token ", yy_state );
  1412.             if ( exp_yychar == 0 )
  1413.                 (void)printf( "end-of-file\n" );
  1414.             else if ( exp_yychar < 0 )
  1415.                 (void)printf( "-none-\n" );
  1416.             else
  1417.             {
  1418.                 for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
  1419.                     yy_i++ )
  1420.                 {
  1421.                     if ( yytoks[yy_i].t_val == exp_yychar )
  1422.                         break;
  1423.                 }
  1424.                 (void)printf( "%s\n", yytoks[yy_i].t_name );
  1425.             }
  1426.         }
  1427. #endif /* YYDEBUG */
  1428.         if ( ++yy_ps >= &yys[ yymaxdepth ] )    /* room on stack? */
  1429.         {
  1430.             /*
  1431.             ** reallocate and recover.  Note that pointers
  1432.             ** have to be reset, or bad things will happen
  1433.             */
  1434.             int yyps_index = (yy_ps - yys);
  1435.             int yypv_index = (yy_pv - exp_yyv);
  1436.             int yypvt_index = (yypvt - exp_yyv);
  1437.             yymaxdepth += YYMAXDEPTH;
  1438.             exp_yyv = (exp_YYSTYPE*)realloc((char*)exp_yyv,
  1439.                 yymaxdepth * sizeof(exp_YYSTYPE));
  1440.             yys = (int*)realloc((char*)yys,
  1441.                 yymaxdepth * sizeof(int));
  1442.             if (!exp_yyv || !yys)
  1443.             {
  1444.                 yyerror( "yacc stack overflow" );
  1445.                 return(1);
  1446.             }
  1447.             yy_ps = yys + yyps_index;
  1448.             yy_pv = exp_yyv + yypv_index;
  1449.             yypvt = exp_yyv + yypvt_index;
  1450.         }
  1451.         *yy_ps = yy_state;
  1452.         *++yy_pv = exp_yyval;
  1453.  
  1454.         /*
  1455.         ** we have a new state - find out what to do
  1456.         */
  1457.     yy_newstate:
  1458.         if ( ( yy_n = exp_yypact[ yy_state ] ) <= YYFLAG )
  1459.             goto exp_yydefault;        /* simple state */
  1460. #if YYDEBUG
  1461.         /*
  1462.         ** if debugging, need to mark whether new token grabbed
  1463.         */
  1464.         yytmp = exp_yychar < 0;
  1465. #endif
  1466.         if ( ( exp_yychar < 0 ) && ( ( exp_yychar = exp_yylex() ) < 0 ) )
  1467.             exp_yychar = 0;        /* reached EOF */
  1468. #if YYDEBUG
  1469.         if ( exp_yydebug && yytmp )
  1470.         {
  1471.             register int yy_i;
  1472.  
  1473.             (void)printf( "Received token " );
  1474.             if ( exp_yychar == 0 )
  1475.                 (void)printf( "end-of-file\n" );
  1476.             else if ( exp_yychar < 0 )
  1477.                 (void)printf( "-none-\n" );
  1478.             else
  1479.             {
  1480.                 for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
  1481.                     yy_i++ )
  1482.                 {
  1483.                     if ( yytoks[yy_i].t_val == exp_yychar )
  1484.                         break;
  1485.                 }
  1486.                 (void)printf( "%s\n", yytoks[yy_i].t_name );
  1487.             }
  1488.         }
  1489. #endif /* YYDEBUG */
  1490.         if ( ( ( yy_n += exp_yychar ) < 0 ) || ( yy_n >= YYLAST ) )
  1491.             goto exp_yydefault;
  1492.         if ( exp_yychk[ yy_n = exp_yyact[ yy_n ] ] == exp_yychar )    /*valid shift*/
  1493.         {
  1494.             exp_yychar = -1;
  1495.             exp_yyval = exp_yylval;
  1496.             yy_state = yy_n;
  1497.             if ( exp_yyerrflag > 0 )
  1498.                 exp_yyerrflag--;
  1499.             goto yy_stack;
  1500.         }
  1501.  
  1502.     exp_yydefault:
  1503.         if ( ( yy_n = exp_yydef[ yy_state ] ) == -2 )
  1504.         {
  1505. #if YYDEBUG
  1506.             yytmp = exp_yychar < 0;
  1507. #endif
  1508.             if ( ( exp_yychar < 0 ) && ( ( exp_yychar = exp_yylex() ) < 0 ) )
  1509.                 exp_yychar = 0;        /* reached EOF */
  1510. #if YYDEBUG
  1511.             if ( exp_yydebug && yytmp )
  1512.             {
  1513.                 register int yy_i;
  1514.  
  1515.                 (void)printf( "Received token " );
  1516.                 if ( exp_yychar == 0 )
  1517.                     (void)printf( "end-of-file\n" );
  1518.                 else if ( exp_yychar < 0 )
  1519.                     (void)printf( "-none-\n" );
  1520.                 else
  1521.                 {
  1522.                     for ( yy_i = 0;
  1523.                         yytoks[yy_i].t_val >= 0;
  1524.                         yy_i++ )
  1525.                     {
  1526.                         if ( yytoks[yy_i].t_val
  1527.                             == exp_yychar )
  1528.                         {
  1529.                             break;
  1530.                         }
  1531.                     }
  1532.                     (void)printf( "%s\n", yytoks[yy_i].t_name );
  1533.                 }
  1534.             }
  1535. #endif /* YYDEBUG */
  1536.             /*
  1537.             ** look through exception table
  1538.             */
  1539.             {
  1540.                 register int *yyxi = exp_yyexca;
  1541.  
  1542.                 while ( ( *yyxi != -1 ) ||
  1543.                     ( yyxi[1] != yy_state ) )
  1544.                 {
  1545.                     yyxi += 2;
  1546.                 }
  1547.                 while ( ( *(yyxi += 2) >= 0 ) &&
  1548.                     ( *yyxi != exp_yychar ) )
  1549.                     ;
  1550.                 if ( ( yy_n = yyxi[1] ) < 0 )
  1551.                     YYACCEPT;
  1552.             }
  1553.         }
  1554.  
  1555.         /*
  1556.         ** check for syntax error
  1557.         */
  1558.         if ( yy_n == 0 )    /* have an error */
  1559.         {
  1560.             /* no worry about speed here! */
  1561.             switch ( exp_yyerrflag )
  1562.             {
  1563.             case 0:        /* new error */
  1564.                 yyerror( "syntax error" );
  1565.                 goto skip_init;
  1566.             yyerrlab:
  1567.                 /*
  1568.                 ** get globals into registers.
  1569.                 ** we have a user generated syntax type error
  1570.                 */
  1571.                 yy_pv = yypv;
  1572.                 yy_ps = yyps;
  1573.                 yy_state = yystate;
  1574.                 exp_yynerrs++;
  1575.             skip_init:
  1576.             case 1:
  1577.             case 2:        /* incompletely recovered error */
  1578.                     /* try again... */
  1579.                 exp_yyerrflag = 3;
  1580.                 /*
  1581.                 ** find state where "error" is a legal
  1582.                 ** shift action
  1583.                 */
  1584.                 while ( yy_ps >= yys )
  1585.                 {
  1586.                     yy_n = exp_yypact[ *yy_ps ] + YYERRCODE;
  1587.                     if ( yy_n >= 0 && yy_n < YYLAST &&
  1588.                         exp_yychk[exp_yyact[yy_n]] == YYERRCODE)                    {
  1589.                         /*
  1590.                         ** simulate shift of "error"
  1591.                         */
  1592.                         yy_state = exp_yyact[ yy_n ];
  1593.                         goto yy_stack;
  1594.                     }
  1595.                     /*
  1596.                     ** current state has no shift on
  1597.                     ** "error", pop stack
  1598.                     */
  1599. #if YYDEBUG
  1600. #    define _POP_ "Error recovery pops state %d, uncovers state %d\n"
  1601.                     if ( exp_yydebug )
  1602.                         (void)printf( _POP_, *yy_ps,
  1603.                             yy_ps[-1] );
  1604. #    undef _POP_
  1605. #endif
  1606.                     yy_ps--;
  1607.                     yy_pv--;
  1608.                 }
  1609.                 /*
  1610.                 ** there is no state on stack with "error" as
  1611.                 ** a valid shift.  give up.
  1612.                 */
  1613.                 YYABORT;
  1614.             case 3:        /* no shift yet; eat a token */
  1615. #if YYDEBUG
  1616.                 /*
  1617.                 ** if debugging, look up token in list of
  1618.                 ** pairs.  0 and negative shouldn't occur,
  1619.                 ** but since timing doesn't matter when
  1620.                 ** debugging, it doesn't hurt to leave the
  1621.                 ** tests here.
  1622.                 */
  1623.                 if ( exp_yydebug )
  1624.                 {
  1625.                     register int yy_i;
  1626.  
  1627.                     (void)printf( "Error recovery discards " );
  1628.                     if ( exp_yychar == 0 )
  1629.                         (void)printf( "token end-of-file\n" );
  1630.                     else if ( exp_yychar < 0 )
  1631.                         (void)printf( "token -none-\n" );
  1632.                     else
  1633.                     {
  1634.                         for ( yy_i = 0;
  1635.                             yytoks[yy_i].t_val >= 0;
  1636.                             yy_i++ )
  1637.                         {
  1638.                             if ( yytoks[yy_i].t_val
  1639.                                 == exp_yychar )
  1640.                             {
  1641.                                 break;
  1642.                             }
  1643.                         }
  1644.                         (void)printf( "token %s\n",
  1645.                             yytoks[yy_i].t_name );
  1646.                     }
  1647.                 }
  1648. #endif /* YYDEBUG */
  1649.                 if ( exp_yychar == 0 )    /* reached EOF. quit */
  1650.                     YYABORT;
  1651.                 exp_yychar = -1;
  1652.                 goto yy_newstate;
  1653.             }
  1654.         }/* end if ( yy_n == 0 ) */
  1655.         /*
  1656.         ** reduction by production yy_n
  1657.         ** put stack tops, etc. so things right after switch
  1658.         */
  1659. #if YYDEBUG
  1660.         /*
  1661.         ** if debugging, print the string that is the user's
  1662.         ** specification of the reduction which is just about
  1663.         ** to be done.
  1664.         */
  1665.         if ( exp_yydebug )
  1666.             (void)printf( "Reduce by (%d) \"%s\"\n",
  1667.                 yy_n, yyreds[ yy_n ] );
  1668. #endif
  1669.         yytmp = yy_n;            /* value to switch over */
  1670.         yypvt = yy_pv;            /* $vars top of value stack */
  1671.         /*
  1672.         ** Look in goto table for next state
  1673.         ** Sorry about using yy_state here as temporary
  1674.         ** register variable, but why not, if it works...
  1675.         ** If exp_yyr2[ yy_n ] doesn't have the low order bit
  1676.         ** set, then there is no action to be done for
  1677.         ** this reduction.  So, no saving & unsaving of
  1678.         ** registers done.  The only difference between the
  1679.         ** code just after the if and the body of the if is
  1680.         ** the goto yy_stack in the body.  This way the test
  1681.         ** can be made before the choice of what to do is needed.
  1682.         */
  1683.         {
  1684.             /* length of production doubled with extra bit */
  1685.             register int yy_len = exp_yyr2[ yy_n ];
  1686.  
  1687.             if ( !( yy_len & 01 ) )
  1688.             {
  1689.                 yy_len >>= 1;
  1690.                 exp_yyval = ( yy_pv -= yy_len )[1];    /* $$ = $1 */
  1691.                 yy_state = exp_yypgo[ yy_n = exp_yyr1[ yy_n ] ] +
  1692.                     *( yy_ps -= yy_len ) + 1;
  1693.                 if ( yy_state >= YYLAST ||
  1694.                     exp_yychk[ yy_state =
  1695.                     exp_yyact[ yy_state ] ] != -yy_n )
  1696.                 {
  1697.                     yy_state = exp_yyact[ exp_yypgo[ yy_n ] ];
  1698.                 }
  1699.                 goto yy_stack;
  1700.             }
  1701.             yy_len >>= 1;
  1702.             exp_yyval = ( yy_pv -= yy_len )[1];    /* $$ = $1 */
  1703.             yy_state = exp_yypgo[ yy_n = exp_yyr1[ yy_n ] ] +
  1704.                 *( yy_ps -= yy_len ) + 1;
  1705.             if ( yy_state >= YYLAST ||
  1706.                 exp_yychk[ yy_state = exp_yyact[ yy_state ] ] != -yy_n )
  1707.             {
  1708.                 yy_state = exp_yyact[ exp_yypgo[ yy_n ] ];
  1709.             }
  1710.         }
  1711.                     /* save until reenter driver code */
  1712.         yystate = yy_state;
  1713.         yyps = yy_ps;
  1714.         yypv = yy_pv;
  1715.     }
  1716.     /*
  1717.     ** code supplied by user is placed in this switch
  1718.     */
  1719.     switch( yytmp )
  1720.     {
  1721.         
  1722. case 1:
  1723. # line 354 "expparse.y"
  1724. { exp_yyval.list = yypvt[-0].list; } break;
  1725. case 7:
  1726. # line 385 "expparse.y"
  1727. { exp_yyval.list = yypvt[-1].list; } break;
  1728. case 8:
  1729. # line 387 "expparse.y"
  1730. { exp_yyval.list = 0; /*LISTcreate();*/
  1731.                 /* NULL would do, except that we'll end */
  1732.                 /* up stuff the call name in as the 1st */
  1733.                 /* arg, so we might as well create the */
  1734.                 /* list now */
  1735.                 } break;
  1736. case 9:
  1737. # line 397 "expparse.y"
  1738. {  exp_yyval.expression = EXPcreate(Type_Aggregate);
  1739.                  exp_yyval.expression->u.list = LISTcreate();} break;
  1740. case 10:
  1741. # line 400 "expparse.y"
  1742. {  exp_yyval.expression = EXPcreate(Type_Aggregate);
  1743.                  exp_yyval.expression->u.list = yypvt[-1].list;} break;
  1744. case 11:
  1745. # line 405 "expparse.y"
  1746. { exp_yyval.expression = yypvt[-0].expression; } break;
  1747. case 12:
  1748. # line 417 "expparse.y"
  1749. { exp_yyval.list = LISTcreate();
  1750.                 LISTadd(exp_yyval.list, (Generic)yypvt[-0].expression); } break;
  1751. case 13:
  1752. # line 420 "expparse.y"
  1753. { exp_yyval.list = LISTcreate();
  1754.                 LISTadd(exp_yyval.list, (Generic)yypvt[-2].expression);
  1755.                 LISTadd(exp_yyval.list, (Generic)yypvt[-0].expression);
  1756.                 yypvt[-2].expression->type->u.type->body->flags.repeat = 1; } break;
  1757. case 14:
  1758. # line 425 "expparse.y"
  1759. { exp_yyval.list = yypvt[-2].list;
  1760.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].expression); } break;
  1761. case 15:
  1762. # line 428 "expparse.y"
  1763. { exp_yyval.list = yypvt[-4].list;
  1764.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-2].expression);
  1765.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].expression);
  1766.                 yypvt[-2].expression->type->u.type->body->flags.repeat = 1;} break;
  1767. case 16:
  1768. # line 435 "expparse.y"
  1769. { exp_yyval.typebody = TYPEBODYcreate(aggregate_);
  1770.                 exp_yyval.typebody->base = yypvt[-0].type;} break;
  1771. case 17:
  1772. # line 438 "expparse.y"
  1773. { Type t = TYPEcreate_user_defined_tag(yypvt[-0].type,CURRENT_SCOPE,yypvt[-2].symbol);
  1774.                 SCOPEadd_super(t);
  1775.                 exp_yyval.typebody = TYPEBODYcreate(aggregate_);
  1776.                 exp_yyval.typebody->tag = t;
  1777.                 exp_yyval.typebody->base = yypvt[-0].type;} break;
  1778. case 18:
  1779. # line 446 "expparse.y"
  1780. { exp_yyval.typebody = yypvt[-0].typebody; } break;
  1781. case 19:
  1782. # line 448 "expparse.y"
  1783. { exp_yyval.typebody = yypvt[-0].typebody; } break;
  1784. case 20:
  1785. # line 450 "expparse.y"
  1786. { exp_yyval.typebody = yypvt[-0].typebody; } break;
  1787. case 21:
  1788. # line 452 "expparse.y"
  1789. { exp_yyval.typebody = yypvt[-0].typebody; } break;
  1790. case 22:
  1791. # line 456 "expparse.y"
  1792. { struct Scope *s = SCOPEcreate_tiny(OBJ_ALIAS);
  1793.             /* scope doesn't really have/need a name */
  1794.             /* I suppose that naming it by the alias is fine */
  1795.                 /*SUPPRESS 622*/
  1796.                 PUSH_SCOPE(s,(Symbol *)0,OBJ_ALIAS);} break;
  1797. case 23:
  1798. # line 463 "expparse.y"
  1799. { Expression e = EXPcreate_from_symbol(Type_Attribute,yypvt[-7].symbol);
  1800.                 Variable v = VARcreate(e,Type_Unknown);
  1801.                 v->initializer = yypvt[-5].expression;
  1802.                 DICTdefine(CURRENT_SCOPE->symbol_table,yypvt[-7].symbol->name,
  1803.                       (Generic)v,yypvt[-7].symbol,OBJ_VARIABLE);
  1804.                 exp_yyval.statement = ALIAScreate(CURRENT_SCOPE,v,yypvt[-2].list);
  1805.                 POP_SCOPE(); } break;
  1806. case 24:
  1807. # line 474 "expparse.y"
  1808. { exp_yyval.typebody = TYPEBODYcreate(array_);
  1809.                 exp_yyval.typebody->flags.optional = yypvt[-1].type_flags.optional;
  1810.                 exp_yyval.typebody->flags.unique = yypvt[-1].type_flags.unique;
  1811.                 exp_yyval.typebody->upper = yypvt[-3].upper_lower.upper_limit;
  1812.                 exp_yyval.typebody->lower = yypvt[-3].upper_lower.lower_limit;
  1813.                 exp_yyval.typebody->base = yypvt[-0].type;} break;
  1814. case 25:
  1815. # line 483 "expparse.y"
  1816. { exp_yyval.statement = ASSIGNcreate(yypvt[-3].expression,yypvt[-1].expression);} break;
  1817. case 26:
  1818. # line 487 "expparse.y"
  1819. { exp_yyval.type = TYPEcreate_from_body_anonymously(yypvt[-0].typebody);
  1820.                 SCOPEadd_super(exp_yyval.type);} break;
  1821. case 27:
  1822. # line 490 "expparse.y"
  1823. { exp_yyval.type = TYPEcreate_from_body_anonymously(yypvt[-0].typebody);
  1824.                 SCOPEadd_super(exp_yyval.type);} break;
  1825. case 28:
  1826. # line 493 "expparse.y"
  1827. { exp_yyval.type = yypvt[-0].type; } break;
  1828. case 29:
  1829. # line 497 "expparse.y"
  1830. { exp_yyval.list = LISTcreate();} break;
  1831. case 30:
  1832. # line 499 "expparse.y"
  1833. { exp_yyval.list = yypvt[-1].list;
  1834.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].list); } break;
  1835. case 31:
  1836. # line 504 "expparse.y"
  1837. { exp_yyval.typebody = TYPEBODYcreate(bag_);
  1838.                 exp_yyval.typebody->base = yypvt[-0].type;
  1839.                 exp_yyval.typebody->upper = yypvt[-2].upper_lower.upper_limit;
  1840.                 exp_yyval.typebody->lower = yypvt[-2].upper_lower.lower_limit;} break;
  1841. case 32:
  1842. # line 509 "expparse.y"
  1843. { exp_yyval.typebody = TYPEBODYcreate(bag_);
  1844.                 exp_yyval.typebody->base = yypvt[-0].type; } break;
  1845. case 33:
  1846. # line 514 "expparse.y"
  1847. { exp_yyval.typebody = TYPEBODYcreate(boolean_);} break;
  1848. case 34:
  1849. # line 516 "expparse.y"
  1850. { exp_yyval.typebody = TYPEBODYcreate(integer_);
  1851.                 exp_yyval.typebody->precision = yypvt[-0].expression;} break;
  1852. case 35:
  1853. # line 519 "expparse.y"
  1854. { exp_yyval.typebody = TYPEBODYcreate(real_);
  1855.                 exp_yyval.typebody->precision = yypvt[-0].expression;} break;
  1856. case 36:
  1857. # line 522 "expparse.y"
  1858. { exp_yyval.typebody = TYPEBODYcreate(number_);} break;
  1859. case 37:
  1860. # line 524 "expparse.y"
  1861. { exp_yyval.typebody = TYPEBODYcreate(logical_);} break;
  1862. case 38:
  1863. # line 526 "expparse.y"
  1864. { exp_yyval.typebody = TYPEBODYcreate(binary_);
  1865.                 exp_yyval.typebody->precision = yypvt[-1].expression;
  1866.                 exp_yyval.typebody->flags.fixed = yypvt[-0].type_flags.fixed;} break;
  1867. case 39:
  1868. # line 530 "expparse.y"
  1869. { exp_yyval.typebody = TYPEBODYcreate(string_);
  1870.                 exp_yyval.typebody->precision = yypvt[-1].expression;
  1871.                 exp_yyval.typebody->flags.fixed = yypvt[-0].type_flags.fixed;} break;
  1872. case 45:
  1873. # line 545 "expparse.y"
  1874. { exp_yyval.expression = LITERAL_ONE;} break;
  1875. case 46:
  1876. # line 547 "expparse.y"
  1877. { exp_yyval.expression = yypvt[-0].expression; } break;
  1878. case 47:
  1879. # line 551 "expparse.y"
  1880. { exp_yyval.upper_lower.lower_limit = yypvt[-3].expression;
  1881.                 exp_yyval.upper_lower.upper_limit = yypvt[-1].expression; } break;
  1882. case 48:
  1883. # line 556 "expparse.y"
  1884. { exp_yyval.case_item = CASE_ITcreate(yypvt[-2].list, yypvt[-0].statement);
  1885.                 SYMBOLset(exp_yyval.case_item);} break;
  1886. case 49:
  1887. # line 561 "expparse.y"
  1888. { exp_yyval.list = LISTcreate();} break;
  1889. case 50:
  1890. # line 563 "expparse.y"
  1891. { yyerrok;
  1892.                 exp_yyval.list = yypvt[-1].list;
  1893.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].case_item); } break;
  1894. case 51:
  1895. # line 572 "expparse.y"
  1896. { exp_yyval.list = yypvt[-1].list;
  1897.                 if (yypvt[-0].case_item) LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].case_item); } break;
  1898. case 52:
  1899. # line 577 "expparse.y"
  1900. { exp_yyval.list = LISTcreate();
  1901.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].expression); } break;
  1902. case 53:
  1903. # line 580 "expparse.y"
  1904. { yyerrok;
  1905.                 exp_yyval.list = yypvt[-2].list;
  1906.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].expression); } break;
  1907. case 54:
  1908. # line 597 "expparse.y"
  1909. { exp_yyval.case_item = (Case_Item)0; } break;
  1910. case 55:
  1911. # line 599 "expparse.y"
  1912. { exp_yyval.case_item = CASE_ITcreate(LIST_NULL, yypvt[-0].statement);
  1913.                 SYMBOLset(exp_yyval.case_item);} break;
  1914. case 56:
  1915. # line 605 "expparse.y"
  1916. { exp_yyval.statement = CASEcreate(yypvt[-4].expression, yypvt[-2].list);} break;
  1917. case 57:
  1918. # line 609 "expparse.y"
  1919. { exp_yyval.statement = COMP_STMTcreate(yypvt[-2].list);} break;
  1920. case 58:
  1921. # line 613 "expparse.y"
  1922. { exp_yyval.expression = LITERAL_PI; } break;
  1923. case 59:
  1924. # line 615 "expparse.y"
  1925. { exp_yyval.expression = LITERAL_E; } break;
  1926. case 60:
  1927. # line 621 "expparse.y"
  1928. { Variable v;
  1929.                 yypvt[-5].expression->type = yypvt[-3].type;
  1930.                 v = VARcreate(yypvt[-5].expression,yypvt[-3].type);
  1931.                 v->initializer = yypvt[-1].expression;
  1932.                 v->flags.constant = 1;
  1933.                 DICTdefine(CURRENT_SCOPE->symbol_table,
  1934.                 yypvt[-5].expression->symbol.name,
  1935.                 (Generic)v,&yypvt[-5].expression->symbol,OBJ_VARIABLE);
  1936.             } break;
  1937. case 68:
  1938. # line 648 "expparse.y"
  1939. { exp_yyval.list = LISTcreate(); } break;
  1940. case 69:
  1941. # line 650 "expparse.y"
  1942. { exp_yyval.list = yypvt[-0].list; } break;
  1943. case 70:
  1944. # line 654 "expparse.y"
  1945. { exp_yyval.variable = VARcreate(yypvt[-4].expression,yypvt[-2].type);
  1946.                 exp_yyval.variable->initializer = yypvt[-1].expression;
  1947.               } break;
  1948. case 71:
  1949. # line 660 "expparse.y"
  1950. { exp_yyval.list = LISTcreate();
  1951.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].variable); } break;
  1952. case 72:
  1953. # line 663 "expparse.y"
  1954. { exp_yyval.list = yypvt[-1].list;
  1955.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].variable); } break;
  1956. case 73:
  1957. # line 675 "expparse.y"
  1958. { exp_yyval.entity_body.attributes = yypvt[-4].list;
  1959.                 /* this is flattened out in entity_decl - DEL */
  1960.                 LISTadd_last(exp_yyval.entity_body.attributes, (Generic)yypvt[-3].list);
  1961.                 if (yypvt[-2].list != LIST_NULL) {
  1962.                     LISTadd_last(exp_yyval.entity_body.attributes, (Generic)yypvt[-2].list);
  1963.                 }
  1964.                 exp_yyval.entity_body.unique = yypvt[-1].list;
  1965.                 exp_yyval.entity_body.where = yypvt[-0].list; } break;
  1966. case 74:
  1967. # line 687 "expparse.y"
  1968. { CURRENT_SCOPE->u.entity->subtype_expression = yypvt[-4].subsuper_decl.subtypes;
  1969.                 CURRENT_SCOPE->u.entity->supertype_symbols = yypvt[-4].subsuper_decl.supertypes;
  1970.                 LISTdo (yypvt[-2].entity_body.attributes, l, Linked_List)
  1971.                 LISTdo (l, a, Variable)
  1972.                     ENTITYadd_attribute(CURRENT_SCOPE, a);
  1973.                 LISTod;
  1974.                 LISTod;
  1975.                 CURRENT_SCOPE->u.entity->abstract = yypvt[-4].subsuper_decl.abstract;
  1976.                 CURRENT_SCOPE->u.entity->unique = yypvt[-2].entity_body.unique;
  1977.                 CURRENT_SCOPE->where = yypvt[-2].entity_body.where;
  1978.                 POP_SCOPE();} break;
  1979. case 75:
  1980. # line 704 "expparse.y"
  1981. { Entity e = ENTITYcreate(yypvt[-0].symbol);
  1982.                 if (print_objects_while_running & OBJ_ENTITY_BITS){
  1983.                 fprintf(stdout,"parse: %s (entity)\n",yypvt[-0].symbol->name);
  1984.                 }
  1985.                 PUSH_SCOPE(e,yypvt[-0].symbol,OBJ_ENTITY);} break;
  1986. case 76:
  1987. # line 712 "expparse.y"
  1988. { int value = 0; Expression x; Symbol *tmp;
  1989.                 TypeBody tb;
  1990.                 tb = TYPEBODYcreate(enumeration_);
  1991.                 CURRENT_SCOPE->u.type->head = 0;
  1992.                 CURRENT_SCOPE->u.type->body = tb;
  1993.                 tb->list = yypvt[-0].list;
  1994.                 if (!CURRENT_SCOPE->symbol_table) {
  1995.                 CURRENT_SCOPE->symbol_table = DICTcreate(25);
  1996.                 }
  1997.                 LISTdo_links(yypvt[-0].list, id)
  1998.                 tmp = (Symbol *)id->data;
  1999.                 id->data = (Generic)(x = EXPcreate(CURRENT_SCOPE));
  2000.                 x->symbol = *(tmp);
  2001.                 x->u.integer = ++value;
  2002.                 /* define both in enum scope and scope of */
  2003.                 /* 1st visibility */
  2004.                 DICT_define(CURRENT_SCOPE->symbol_table,
  2005.                     x->symbol.name,
  2006.                     (Generic)x,&x->symbol,OBJ_EXPRESSION);
  2007.                 DICTdefine(PREVIOUS_SCOPE->symbol_table,x->symbol.name,
  2008.                     (Generic)x,&x->symbol,OBJ_EXPRESSION);
  2009.                     SYMBOL_destroy(tmp);
  2010.                 LISTod;
  2011.                   } break;
  2012. case 77:
  2013. # line 739 "expparse.y"
  2014. { exp_yyval.statement = STATEMENT_ESCAPE; } break;
  2015. case 78:
  2016. # line 743 "expparse.y"
  2017. { exp_yyval.expression = EXPcreate(Type_Attribute);
  2018.                 exp_yyval.expression->symbol = *yypvt[-0].symbol;SYMBOL_destroy(yypvt[-0].symbol);
  2019.               } break;
  2020. case 79:
  2021. # line 747 "expparse.y"
  2022. { exp_yyval.expression = EXPcreate(Type_Expression);
  2023.                 exp_yyval.expression->e.op1 = EXPcreate(Type_Expression);
  2024.                 exp_yyval.expression->e.op1->e.op_code = OP_GROUP;
  2025.                 exp_yyval.expression->e.op1->e.op1 = EXPcreate(Type_Self);
  2026.                 exp_yyval.expression->e.op1->e.op2 = EXPcreate_from_symbol(Type_Entity,yypvt[-2].symbol);
  2027.                 SYMBOL_destroy(yypvt[-2].symbol);
  2028.                 exp_yyval.expression->e.op_code = OP_DOT;
  2029.                 exp_yyval.expression->e.op2 = EXPcreate_from_symbol(Type_Attribute,yypvt[-0].symbol);
  2030.                 SYMBOL_destroy(yypvt[-0].symbol);
  2031.               } break;
  2032. case 80:
  2033. # line 760 "expparse.y"
  2034. { exp_yyval.list = LISTcreate();
  2035.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].expression); } break;
  2036. case 81:
  2037. # line 763 "expparse.y"
  2038. { exp_yyval.list = yypvt[-2].list;
  2039.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].expression); } break;
  2040. case 82:
  2041. # line 768 "expparse.y"
  2042. { exp_yyval.type_flags.optional = 0;} break;
  2043. case 83:
  2044. # line 770 "expparse.y"
  2045. { exp_yyval.type_flags.optional = 1;} break;
  2046. case 84:
  2047. # line 775 "expparse.y"
  2048. { Variable v;
  2049.                 LISTdo_links (yypvt[-4].list, attr)
  2050.                 v = VARcreate((Expression)attr->data,yypvt[-1].type);
  2051.                 v->flags.optional = yypvt[-2].type_flags.optional;
  2052.                 attr->data = (Generic)v;
  2053.                 LISTod;
  2054.               } break;
  2055. case 85:
  2056. # line 799 "expparse.y"
  2057. { scope = scopes;
  2058.                 /* no need to define scope->this */
  2059.                 scope->this = yyresult;
  2060.                 scope->pscope = scope;
  2061.                 scope->type = OBJ_EXPRESS;
  2062.                 yyresult->symbol.name = yyresult->u.express->filename;
  2063.                 yyresult->symbol.filename = yyresult->u.express->filename;
  2064.                 yyresult->symbol.line = 1;
  2065.               } break;
  2066. case 89:
  2067. # line 816 "expparse.y"
  2068. { exp_yyval.expression = yypvt[-0].expression; } break;
  2069. case 90:
  2070. # line 818 "expparse.y"
  2071. { yyerrok;
  2072.                 exp_yyval.expression = BIN_EXPcreate(OP_AND, yypvt[-2].expression, yypvt[-0].expression);} break;
  2073. case 91:
  2074. # line 821 "expparse.y"
  2075. { yyerrok;
  2076.                 exp_yyval.expression = BIN_EXPcreate(OP_OR, yypvt[-2].expression, yypvt[-0].expression);} break;
  2077. case 92:
  2078. # line 824 "expparse.y"
  2079. { yyerrok;
  2080.                 exp_yyval.expression = BIN_EXPcreate(OP_XOR, yypvt[-2].expression, yypvt[-0].expression);} break;
  2081. case 93:
  2082. # line 827 "expparse.y"
  2083. { yyerrok;
  2084.                 exp_yyval.expression = BIN_EXPcreate(OP_LESS_THAN, yypvt[-2].expression, yypvt[-0].expression);} break;
  2085. case 94:
  2086. # line 830 "expparse.y"
  2087. { yyerrok;
  2088.                 exp_yyval.expression = BIN_EXPcreate(OP_GREATER_THAN, yypvt[-2].expression, yypvt[-0].expression);} break;
  2089. case 95:
  2090. # line 833 "expparse.y"
  2091. { yyerrok;
  2092.                 exp_yyval.expression = BIN_EXPcreate(OP_EQUAL, yypvt[-2].expression, yypvt[-0].expression);} break;
  2093. case 96:
  2094. # line 836 "expparse.y"
  2095. { yyerrok;
  2096.                 exp_yyval.expression = BIN_EXPcreate(OP_LESS_EQUAL, yypvt[-2].expression, yypvt[-0].expression);} break;
  2097. case 97:
  2098. # line 839 "expparse.y"
  2099. { yyerrok;
  2100.                 exp_yyval.expression = BIN_EXPcreate(OP_GREATER_EQUAL, yypvt[-2].expression, yypvt[-0].expression);} break;
  2101. case 98:
  2102. # line 842 "expparse.y"
  2103. { yyerrok;
  2104.                 exp_yyval.expression = BIN_EXPcreate(OP_NOT_EQUAL, yypvt[-2].expression, yypvt[-0].expression);} break;
  2105. case 99:
  2106. # line 845 "expparse.y"
  2107. { yyerrok;
  2108.                 exp_yyval.expression = BIN_EXPcreate(OP_INST_EQUAL, yypvt[-2].expression, yypvt[-0].expression);} break;
  2109. case 100:
  2110. # line 848 "expparse.y"
  2111. { yyerrok;
  2112.                 exp_yyval.expression = BIN_EXPcreate(OP_INST_NOT_EQUAL, yypvt[-2].expression, yypvt[-0].expression);} break;
  2113. case 101:
  2114. # line 851 "expparse.y"
  2115. { yyerrok;
  2116.                 exp_yyval.expression = BIN_EXPcreate(OP_IN, yypvt[-2].expression, yypvt[-0].expression);} break;
  2117. case 102:
  2118. # line 854 "expparse.y"
  2119. { yyerrok;
  2120.                 exp_yyval.expression = BIN_EXPcreate(OP_LIKE, yypvt[-2].expression, yypvt[-0].expression);} break;
  2121. case 103:
  2122. # line 857 "expparse.y"
  2123. { yyerrok; } break;
  2124. case 104:
  2125. # line 864 "expparse.y"
  2126. { exp_yyval.expression = yypvt[-0].expression; } break;
  2127. case 105:
  2128. # line 866 "expparse.y"
  2129. { yyerrok;
  2130.                 exp_yyval.expression = BIN_EXPcreate(OP_CONCAT, yypvt[-2].expression, yypvt[-0].expression);} break;
  2131. case 106:
  2132. # line 869 "expparse.y"
  2133. { yyerrok;
  2134.                 exp_yyval.expression = BIN_EXPcreate(OP_EXP, yypvt[-2].expression, yypvt[-0].expression);} break;
  2135. case 107:
  2136. # line 872 "expparse.y"
  2137. { yyerrok;
  2138.                 exp_yyval.expression = BIN_EXPcreate(OP_TIMES, yypvt[-2].expression, yypvt[-0].expression);} break;
  2139. case 108:
  2140. # line 875 "expparse.y"
  2141. { yyerrok;
  2142.                 exp_yyval.expression = BIN_EXPcreate(OP_DIV, yypvt[-2].expression, yypvt[-0].expression);} break;
  2143. case 109:
  2144. # line 878 "expparse.y"
  2145. { yyerrok;
  2146.                 exp_yyval.expression = BIN_EXPcreate(OP_REAL_DIV, yypvt[-2].expression, yypvt[-0].expression);} break;
  2147. case 110:
  2148. # line 881 "expparse.y"
  2149. { yyerrok;
  2150.                 exp_yyval.expression = BIN_EXPcreate(OP_MOD, yypvt[-2].expression, yypvt[-0].expression);} break;
  2151. case 111:
  2152. # line 884 "expparse.y"
  2153. { yyerrok;
  2154.                 exp_yyval.expression = BIN_EXPcreate(OP_PLUS, yypvt[-2].expression, yypvt[-0].expression);} break;
  2155. case 112:
  2156. # line 887 "expparse.y"
  2157. { yyerrok;
  2158.                 exp_yyval.expression = BIN_EXPcreate(OP_MINUS, yypvt[-2].expression, yypvt[-0].expression);} break;
  2159. case 113:
  2160. # line 901 "expparse.y"
  2161. { exp_yyval.list = LISTcreate();
  2162.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].expression); } break;
  2163. case 114:
  2164. # line 904 "expparse.y"
  2165. { exp_yyval.list = yypvt[-2].list;
  2166.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].expression); } break;
  2167. case 115:
  2168. # line 909 "expparse.y"
  2169. { exp_yyval.type_flags.var = 1;} break;
  2170. case 116:
  2171. # line 911 "expparse.y"
  2172. { exp_yyval.type_flags.var = 0;} break;
  2173. case 117:
  2174. # line 915 "expparse.y"
  2175. { Symbol *tmp; Expression e; Variable v;
  2176.                 exp_yyval.list = yypvt[-2].list;
  2177.                 LISTdo_links(exp_yyval.list, param)
  2178.                 tmp = (Symbol *)param->data;
  2179. /*                e = EXPcreate_from_symbol($4,tmp);*/
  2180.                 e = EXPcreate_from_symbol(Type_Attribute,tmp);
  2181.                     v = VARcreate(e,yypvt[-0].type);
  2182.                     v->flags.optional = yypvt[-3].type_flags.var;
  2183.                 v->flags.parameter = true;
  2184.                 param->data = (Generic)v;
  2185.  
  2186.                 /* link it in to the current scope's dict */
  2187.                 DICTdefine(CURRENT_SCOPE->symbol_table,
  2188.                     tmp->name,(Generic)v,
  2189.                     tmp,OBJ_VARIABLE);
  2190.  
  2191.                 /* see explanation of this in TYPEresolve func */
  2192.                 /* $4->refcount++; */
  2193.                 LISTod;
  2194.               } break;
  2195. case 118:
  2196. # line 938 "expparse.y"
  2197. { exp_yyval.list = LIST_NULL; } break;
  2198. case 119:
  2199. # line 940 "expparse.y"
  2200. { exp_yyval.list = yypvt[-1].list; } break;
  2201. case 120:
  2202. # line 944 "expparse.y"
  2203. { exp_yyval.list = yypvt[-0].list; } break;
  2204. case 121:
  2205. # line 946 "expparse.y"
  2206. { exp_yyval.list = yypvt[-2].list;
  2207.                 LISTadd_all(exp_yyval.list, yypvt[-0].list); } break;
  2208. case 122:
  2209. # line 951 "expparse.y"
  2210. { exp_yyval.type = TYPEcreate_from_body_anonymously(yypvt[-0].typebody);
  2211.                 SCOPEadd_super(exp_yyval.type);} break;
  2212. case 123:
  2213. # line 954 "expparse.y"
  2214. { exp_yyval.type = TYPEcreate_from_body_anonymously(yypvt[-0].typebody);
  2215.                 SCOPEadd_super(exp_yyval.type);} break;
  2216. case 124:
  2217. # line 957 "expparse.y"
  2218. { exp_yyval.type = yypvt[-0].type; } break;
  2219. case 125:
  2220. # line 959 "expparse.y"
  2221. { exp_yyval.type = yypvt[-0].type; } break;
  2222. case 126:
  2223. # line 963 "expparse.y"
  2224. { exp_yyval.expression = EXPcreate(Type_Funcall);
  2225.                 exp_yyval.expression->symbol = *yypvt[-1].symbol; SYMBOL_destroy(yypvt[-1].symbol);
  2226.                 exp_yyval.expression->u.funcall.list = yypvt[-0].list;} break;
  2227. case 127:
  2228. # line 970 "expparse.y"
  2229. { CURRENT_SCOPE->u.func->body = yypvt[-2].list;
  2230.                 POP_SCOPE();} break;
  2231. case 128:
  2232. # line 977 "expparse.y"
  2233. { Function f = ALGcreate(OBJ_FUNCTION); tag_count = 0;
  2234.                 if (print_objects_while_running & OBJ_FUNCTION_BITS) fprintf(stdout,"parse: %s (function)\n",yypvt[-0].symbol->name);
  2235.  
  2236.                 PUSH_SCOPE(f,yypvt[-0].symbol,OBJ_FUNCTION);} break;
  2237. case 129:
  2238. # line 982 "expparse.y"
  2239. { Function f = CURRENT_SCOPE;
  2240.                 f->u.func->parameters = yypvt[-3].list;
  2241.                 f->u.func->pcount = LISTget_length(yypvt[-3].list);
  2242.                 f->u.func->return_type = yypvt[-1].type;
  2243.                 f->u.func->tag_count = tag_count;
  2244.               } break;
  2245. case 130:
  2246. # line 991 "expparse.y"
  2247. { exp_yyval.symbol = yypvt[-0].symbol; } break;
  2248. case 131:
  2249. # line 993 "expparse.y"
  2250. { exp_yyval.symbol = yypvt[-0].symbol; } break;
  2251. case 132:
  2252. # line 997 "expparse.y"
  2253. { exp_yyval.typebody = yypvt[-0].typebody; } break;
  2254. case 133:
  2255. # line 999 "expparse.y"
  2256. { exp_yyval.typebody = TYPEBODYcreate(array_);
  2257.                 exp_yyval.typebody->flags.optional = yypvt[-1].type_flags.optional;
  2258.                 exp_yyval.typebody->flags.unique = yypvt[-1].type_flags.unique;
  2259.                 exp_yyval.typebody->base = yypvt[-0].type;} break;
  2260. case 134:
  2261. # line 1004 "expparse.y"
  2262. { exp_yyval.typebody = TYPEBODYcreate(array_);
  2263.                 exp_yyval.typebody->flags.optional = yypvt[-1].type_flags.optional;
  2264.                 exp_yyval.typebody->flags.unique = yypvt[-1].type_flags.unique;
  2265.                 exp_yyval.typebody->base = yypvt[-0].type;
  2266.                 exp_yyval.typebody->upper = yypvt[-3].upper_lower.upper_limit;
  2267.                 exp_yyval.typebody->lower = yypvt[-3].upper_lower.lower_limit;} break;
  2268. case 135:
  2269. # line 1011 "expparse.y"
  2270. { exp_yyval.typebody = TYPEBODYcreate(bag_);
  2271.                 exp_yyval.typebody->base = yypvt[-0].type; } break;
  2272. case 136:
  2273. # line 1014 "expparse.y"
  2274. { exp_yyval.typebody = TYPEBODYcreate(bag_);
  2275.                 exp_yyval.typebody->base = yypvt[-0].type;
  2276.                 exp_yyval.typebody->upper = yypvt[-2].upper_lower.upper_limit;
  2277.                 exp_yyval.typebody->lower = yypvt[-2].upper_lower.lower_limit;} break;
  2278. case 137:
  2279. # line 1019 "expparse.y"
  2280. { exp_yyval.typebody = TYPEBODYcreate(list_);
  2281.                 exp_yyval.typebody->flags.unique = yypvt[-1].type_flags.unique;
  2282.                 exp_yyval.typebody->base = yypvt[-0].type; } break;
  2283. case 138:
  2284. # line 1023 "expparse.y"
  2285. { exp_yyval.typebody = TYPEBODYcreate(list_);
  2286.                 exp_yyval.typebody->base = yypvt[-0].type;
  2287.                 exp_yyval.typebody->flags.unique = yypvt[-1].type_flags.unique;
  2288.                 exp_yyval.typebody->upper = yypvt[-3].upper_lower.upper_limit;
  2289.                 exp_yyval.typebody->lower = yypvt[-3].upper_lower.lower_limit;} break;
  2290. case 139:
  2291. # line 1029 "expparse.y"
  2292. { exp_yyval.typebody = TYPEBODYcreate(set_);
  2293.                 exp_yyval.typebody->base = yypvt[-0].type; } break;
  2294. case 140:
  2295. # line 1032 "expparse.y"
  2296. { exp_yyval.typebody = TYPEBODYcreate(set_);
  2297.                 exp_yyval.typebody->base = yypvt[-0].type;
  2298.                 exp_yyval.typebody->upper = yypvt[-2].upper_lower.upper_limit;
  2299.                 exp_yyval.typebody->lower = yypvt[-2].upper_lower.lower_limit;} break;
  2300. case 141:
  2301. # line 1039 "expparse.y"
  2302. { exp_yyval.type = Type_Generic; } break;
  2303. case 142:
  2304. # line 1041 "expparse.y"
  2305.                 TypeBody g = TYPEBODYcreate(generic_);
  2306.                 exp_yyval.type = TYPEcreate_from_body_anonymously(g);
  2307.                 SCOPEadd_super(exp_yyval.type);
  2308.                 g->tag = TYPEcreate_user_defined_tag(exp_yyval.type,CURRENT_SCOPE,yypvt[-0].symbol);
  2309.                 SCOPEadd_super(g->tag);
  2310.                   } break;
  2311. case 143:
  2312. # line 1051 "expparse.y"
  2313. { exp_yyval.list = LISTcreate();
  2314.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].symbol); } break;
  2315. case 144:
  2316. # line 1054 "expparse.y"
  2317. { yyerrok;
  2318.                 exp_yyval.list = yypvt[-2].list;
  2319.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].symbol); } break;
  2320. case 145:
  2321. # line 1069 "expparse.y"
  2322. {exp_yyval.expression = EXPcreate(Type_Self);} break;
  2323. case 146:
  2324. # line 1071 "expparse.y"
  2325. {exp_yyval.expression = LITERAL_INFINITY; } break;
  2326. case 147:
  2327. # line 1073 "expparse.y"
  2328. {exp_yyval.expression = EXPcreate(Type_Identifier);
  2329.                 exp_yyval.expression->symbol = *(yypvt[-0].symbol); SYMBOL_destroy(yypvt[-0].symbol);} break;
  2330. case 148:
  2331. # line 1079 "expparse.y"
  2332. { exp_yyval.statement = CONDcreate(yypvt[-4].expression,yypvt[-2].list,STATEMENT_LIST_NULL);} break;
  2333. case 149:
  2334. # line 1082 "expparse.y"
  2335. { exp_yyval.statement = CONDcreate(yypvt[-6].expression,yypvt[-4].list,yypvt[-2].list);} break;
  2336. case 150:
  2337. # line 1091 "expparse.y"
  2338. { SCANinclude_file(yypvt[-1].string); } break;
  2339. case 151:
  2340. # line 1096 "expparse.y"
  2341. { Increment i = INCR_CTLcreate(yypvt[-5].symbol, yypvt[-3].expression, yypvt[-1].expression, yypvt[-0].expression);
  2342.             /* scope doesn't really have/need a name, I suppose */
  2343.             /* naming it by the iterator variable is fine */
  2344.             PUSH_SCOPE(i,(Symbol *)0,OBJ_INCREMENT);} break;
  2345. case 152:
  2346. # line 1104 "expparse.y"
  2347. { exp_yyval.upper_lower.lower_limit = yypvt[-3].expression;
  2348.                 exp_yyval.upper_lower.upper_limit = yypvt[-1].expression; } break;
  2349. case 153:
  2350. # line 1115 "expparse.y"
  2351. { exp_yyval.expression = yypvt[-0].expression; } break;
  2352. case 154:
  2353. # line 1119 "expparse.y"
  2354. { (*interface_func)(CURRENT_SCOPE,interface_schema,yypvt[-0].symbol,yypvt[-0].symbol);} break;
  2355. case 155:
  2356. # line 1121 "expparse.y"
  2357. { (*interface_func)(CURRENT_SCOPE,interface_schema,yypvt[-2].symbol,yypvt[-0].symbol);} break;
  2358. case 159:
  2359. # line 1132 "expparse.y"
  2360. { if (!CURRENT_SCHEMA->reflist) CURRENT_SCHEMA->reflist = LISTcreate();
  2361.                 LISTadd(CURRENT_SCHEMA->reflist,(Generic)yypvt[-1].symbol);} break;
  2362. case 160:
  2363. # line 1135 "expparse.y"
  2364. {interface_schema = yypvt[-0].symbol; interface_func = SCHEMAadd_reference;} break;
  2365. case 162:
  2366. # line 1140 "expparse.y"
  2367. { if (!CURRENT_SCHEMA->uselist) CURRENT_SCHEMA->uselist = LISTcreate();
  2368.                 LISTadd(CURRENT_SCHEMA->uselist,(Generic)yypvt[-1].symbol);} break;
  2369. case 163:
  2370. # line 1143 "expparse.y"
  2371. {interface_schema = yypvt[-0].symbol; interface_func = SCHEMAadd_use;} break;
  2372. case 169:
  2373. # line 1158 "expparse.y"
  2374. { Expression    tmp1, tmp2;
  2375.  
  2376.                 exp_yyval.expression = (Expression )0;
  2377.                 tmp1 = BIN_EXPcreate(yypvt[-4].op_code, yypvt[-5].expression, yypvt[-3].expression);
  2378.                 tmp2 = BIN_EXPcreate(yypvt[-2].op_code, yypvt[-3].expression, yypvt[-1].expression);
  2379.                 exp_yyval.expression = BIN_EXPcreate(OP_AND, tmp1, tmp2);
  2380.               } break;
  2381. case 170:
  2382. # line 1170 "expparse.y"
  2383. { exp_yyval.type_either.type = yypvt[-0].type;
  2384.                 exp_yyval.type_either.body = 0;} break;
  2385. case 171:
  2386. # line 1173 "expparse.y"
  2387. { exp_yyval.type_either.type = 0;
  2388.                 exp_yyval.type_either.body = TYPEBODYcreate(set_);
  2389.                 exp_yyval.type_either.body->base = yypvt[-0].type; } break;
  2390. case 172:
  2391. # line 1177 "expparse.y"
  2392. { exp_yyval.type_either.type = 0;
  2393.                 exp_yyval.type_either.body = TYPEBODYcreate(set_);
  2394.                 exp_yyval.type_either.body->base = yypvt[-0].type;
  2395.                 exp_yyval.type_either.body->upper = yypvt[-2].upper_lower.upper_limit;
  2396.                 exp_yyval.type_either.body->lower = yypvt[-2].upper_lower.lower_limit;} break;
  2397. case 173:
  2398. # line 1183 "expparse.y"
  2399. { exp_yyval.type_either.type = 0;
  2400.                 exp_yyval.type_either.body = TYPEBODYcreate(bag_);
  2401.                 exp_yyval.type_either.body->base = yypvt[-0].type;
  2402.                 exp_yyval.type_either.body->upper = yypvt[-2].upper_lower.upper_limit;
  2403.                 exp_yyval.type_either.body->lower = yypvt[-2].upper_lower.lower_limit;} break;
  2404. case 174:
  2405. # line 1189 "expparse.y"
  2406. { exp_yyval.type_either.type = 0;
  2407.                 exp_yyval.type_either.body = TYPEBODYcreate(bag_);
  2408.                 exp_yyval.type_either.body->base = yypvt[-0].type; } break;
  2409. case 175:
  2410. # line 1195 "expparse.y"
  2411. { exp_yyval.list = LISTcreate();
  2412.               LISTadd_last(exp_yyval.list,(Generic)yypvt[-0].variable);} break;
  2413. case 176:
  2414. # line 1198 "expparse.y"
  2415. { exp_yyval.list = yypvt[-1].list;
  2416.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].variable); } break;
  2417. case 177:
  2418. # line 1204 "expparse.y"
  2419. { Expression e = EXPcreate(Type_Attribute);
  2420.               e->symbol = *yypvt[-5].symbol;SYMBOL_destroy(yypvt[-5].symbol);
  2421.               if (yypvt[-3].type_either.type) exp_yyval.variable = VARcreate(e,yypvt[-3].type_either.type);
  2422.               else {
  2423.                   Type t = TYPEcreate_from_body_anonymously(yypvt[-3].type_either.body);
  2424.                   SCOPEadd_super(t);
  2425.                   exp_yyval.variable = VARcreate(e,t);
  2426.               }
  2427.               exp_yyval.variable->inverse_symbol = yypvt[-1].symbol;} break;
  2428. case 178:
  2429. # line 1216 "expparse.y"
  2430. { exp_yyval.list = LIST_NULL; } break;
  2431. case 179:
  2432. # line 1218 "expparse.y"
  2433. { exp_yyval.list = yypvt[-0].list; } break;
  2434. case 180:
  2435. # line 1223 "expparse.y"
  2436. { exp_yyval.upper_lower.lower_limit = yypvt[-3].expression;
  2437.                 exp_yyval.upper_lower.upper_limit = yypvt[-1].expression; } break;
  2438. case 181:
  2439. # line 1237 "expparse.y"
  2440. { exp_yyval.typebody = TYPEBODYcreate(list_);
  2441.                 exp_yyval.typebody->base = yypvt[-0].type;
  2442.                 exp_yyval.typebody->flags.unique = yypvt[-1].type_flags.unique;
  2443.                 exp_yyval.typebody->lower = yypvt[-3].upper_lower.lower_limit;
  2444.                 exp_yyval.typebody->upper = yypvt[-3].upper_lower.upper_limit;} break;
  2445. case 182:
  2446. # line 1243 "expparse.y"
  2447. { exp_yyval.typebody = TYPEBODYcreate(list_);
  2448.                 exp_yyval.typebody->base = yypvt[-0].type;
  2449.                 exp_yyval.typebody->flags.unique = yypvt[-1].type_flags.unique;} break;
  2450. case 183:
  2451. # line 1249 "expparse.y"
  2452. { if (yypvt[-0].iVal == 0)
  2453.                 exp_yyval.expression = LITERAL_ZERO;
  2454.                 else if (yypvt[-0].iVal == 1)
  2455.                 exp_yyval.expression = LITERAL_ONE;
  2456.                 else {
  2457.                 exp_yyval.expression = EXPcreate_simple(Type_Integer);
  2458.                 /*SUPPRESS 112*/
  2459.                 exp_yyval.expression->u.integer = (int)yypvt[-0].iVal;
  2460.                 resolved_all(exp_yyval.expression);
  2461.                 } } break;
  2462. case 184:
  2463. # line 1260 "expparse.y"
  2464. { if (yypvt[-0].rVal == 0.0)
  2465.                 exp_yyval.expression = LITERAL_ZERO;
  2466.                 else {
  2467.                 exp_yyval.expression = EXPcreate_simple(Type_Real);
  2468.                 exp_yyval.expression->u.real = yypvt[-0].rVal;
  2469.                 resolved_all(exp_yyval.expression);
  2470.                 } } break;
  2471. case 185:
  2472. # line 1268 "expparse.y"
  2473. { exp_yyval.expression = EXPcreate_simple(Type_String);
  2474.                 exp_yyval.expression->symbol.name = yypvt[-0].string;
  2475.                 resolved_all(exp_yyval.expression);} break;
  2476. case 186:
  2477. # line 1272 "expparse.y"
  2478. { exp_yyval.expression = EXPcreate_simple(Type_String_Encoded);
  2479.                 exp_yyval.expression->symbol.name = yypvt[-0].string;
  2480.                 resolved_all(exp_yyval.expression);} break;
  2481. case 187:
  2482. # line 1276 "expparse.y"
  2483. { exp_yyval.expression = EXPcreate_simple(Type_Logical);
  2484.                 exp_yyval.expression->u.logical = yypvt[-0].logical;
  2485.                 resolved_all(exp_yyval.expression);} break;
  2486. case 188:
  2487. # line 1280 "expparse.y"
  2488. { exp_yyval.expression = EXPcreate_simple(Type_Binary);
  2489.                 exp_yyval.expression->symbol.name = yypvt[-0].binary;
  2490.                 resolved_all(exp_yyval.expression);} break;
  2491. case 189:
  2492. # line 1284 "expparse.y"
  2493. { exp_yyval.expression = yypvt[-0].expression; } break;
  2494. case 190:
  2495. # line 1288 "expparse.y"
  2496. { exp_yyval.expression = yypvt[-0].expression; } break;
  2497. case 191:
  2498. # line 1292 "expparse.y"
  2499. { Expression e; Variable v;
  2500.                 LISTdo(yypvt[-3].list, sym, Symbol *)
  2501.                 /* convert symbol to name-expression */
  2502.                 e = EXPcreate(Type_Attribute);
  2503.                 e->symbol = *sym;SYMBOL_destroy(sym);
  2504.                 v = VARcreate(e,yypvt[-1].type);
  2505.                 DICTdefine(CURRENT_SCOPE->symbol_table,
  2506.                     e->symbol.name,(Generic)v,&e->symbol,OBJ_VARIABLE);
  2507.                 LISTod; LISTfree(yypvt[-3].list); } break;
  2508. case 192:
  2509. # line 1302 "expparse.y"
  2510. { Expression e; Variable v;
  2511.                 LISTdo(yypvt[-4].list, sym, Symbol *)
  2512.                 e = EXPcreate(Type_Attribute);
  2513.                 e->symbol = *sym;SYMBOL_destroy(sym);
  2514.                 v = VARcreate(e,yypvt[-2].type);
  2515.                 v->initializer = yypvt[-1].expression;
  2516.                 DICTdefine(CURRENT_SCOPE->symbol_table,
  2517.                     e->symbol.name,(Generic)v,&e->symbol,OBJ_VARIABLE);
  2518.                 LISTod; LISTfree(yypvt[-4].list);} break;
  2519. case 195:
  2520. # line 1318 "expparse.y"
  2521. { } break;
  2522. case 196:
  2523. # line 1324 "expparse.y"
  2524. { exp_yyval.type = TYPEcreate_name(yypvt[-0].symbol);
  2525.                 SCOPEadd_super(exp_yyval.type);
  2526.                 SYMBOL_destroy(yypvt[-0].symbol);} break;
  2527. case 197:
  2528. # line 1330 "expparse.y"
  2529. { exp_yyval.list = LISTcreate();
  2530.                 LISTadd(exp_yyval.list, (Generic)yypvt[-0].type); } break;
  2531. case 198:
  2532. # line 1333 "expparse.y"
  2533. { exp_yyval.list = yypvt[-2].list;
  2534.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].type); } break;
  2535. case 199:
  2536. # line 1338 "expparse.y"
  2537. { exp_yyval.list = yypvt[-1].list; } break;
  2538. case 201:
  2539. # line 1345 "expparse.y"
  2540. { exp_yyval.type_flags.unique = 0; exp_yyval.type_flags.optional = 0;} break;
  2541. case 202:
  2542. # line 1347 "expparse.y"
  2543. { exp_yyval.type_flags.unique = 0; exp_yyval.type_flags.optional = 1;} break;
  2544. case 203:
  2545. # line 1349 "expparse.y"
  2546. { exp_yyval.type_flags.unique = 1; exp_yyval.type_flags.optional = 0;} break;
  2547. case 204:
  2548. # line 1351 "expparse.y"
  2549. { exp_yyval.type_flags.unique = 1; exp_yyval.type_flags.optional = 1;} break;
  2550. case 205:
  2551. # line 1353 "expparse.y"
  2552. { exp_yyval.type_flags.unique = 1; exp_yyval.type_flags.optional = 1;} break;
  2553. case 206:
  2554. # line 1357 "expparse.y"
  2555. { exp_yyval.type_flags.fixed = 0; } break;
  2556. case 207:
  2557. # line 1359 "expparse.y"
  2558. { exp_yyval.type_flags.fixed = 1; } break;
  2559. case 208:
  2560. # line 1363 "expparse.y"
  2561. { exp_yyval.expression = (Expression )0; } break;
  2562. case 209:
  2563. # line 1365 "expparse.y"
  2564. { exp_yyval.expression = yypvt[-1].expression; } break;
  2565. case 210:
  2566. # line 1373 "expparse.y"
  2567. { exp_yyval.statement = PCALLcreate(yypvt[-1].list);
  2568.                 exp_yyval.statement->symbol = *(yypvt[-2].symbol);} break;
  2569. case 211:
  2570. # line 1376 "expparse.y"
  2571. { exp_yyval.statement = PCALLcreate((Linked_List)0);
  2572.                 exp_yyval.statement->symbol = *(yypvt[-1].symbol);} break;
  2573. case 212:
  2574. # line 1382 "expparse.y"
  2575. { CURRENT_SCOPE->u.proc->body = yypvt[-2].list;
  2576.                 POP_SCOPE();} break;
  2577. case 213:
  2578. # line 1390 "expparse.y"
  2579. { Procedure p = ALGcreate(OBJ_PROCEDURE); tag_count = 0;
  2580.                 if (print_objects_while_running & OBJ_PROCEDURE_BITS){
  2581.                 fprintf(stdout,"parse: %s (procedure)\n",yypvt[-0].symbol->name);
  2582.                 }
  2583.  
  2584.                 PUSH_SCOPE(p,yypvt[-0].symbol,OBJ_PROCEDURE);} break;
  2585. case 214:
  2586. # line 1397 "expparse.y"
  2587. { CURRENT_SCOPE->u.proc->parameters = yypvt[-1].list; 
  2588.                 CURRENT_SCOPE->u.proc->pcount = LISTget_length(yypvt[-1].list);
  2589.                 CURRENT_SCOPE->u.proc->tag_count = tag_count;
  2590.               } break;
  2591. case 215:
  2592. # line 1404 "expparse.y"
  2593. { exp_yyval.symbol = yypvt[-0].symbol; } break;
  2594. case 216:
  2595. # line 1406 "expparse.y"
  2596. { exp_yyval.symbol = yypvt[-0].symbol; } break;
  2597. case 217:
  2598. # line 1411 "expparse.y"
  2599. { exp_yyval.expression = BIN_EXPcreate(OP_DOT,(Expression )0,(Expression )0);
  2600.                 exp_yyval.expression->e.op2 = EXPcreate(Type_Identifier);
  2601.                 exp_yyval.expression->e.op2->symbol = *yypvt[-0].symbol; SYMBOL_destroy(yypvt[-0].symbol);} break;
  2602. case 218:
  2603. # line 1415 "expparse.y"
  2604. { exp_yyval.expression = BIN_EXPcreate(OP_GROUP,(Expression )0,(Expression )0);
  2605.                 exp_yyval.expression->e.op2 = EXPcreate(Type_Identifier);
  2606.                 exp_yyval.expression->e.op2->symbol = *yypvt[-0].symbol; SYMBOL_destroy(yypvt[-0].symbol);} break;
  2607. case 219:
  2608. # line 1419 "expparse.y"
  2609. { exp_yyval.expression = BIN_EXPcreate(OP_ARRAY_ELEMENT,(Expression )0,(Expression )0);
  2610.                 exp_yyval.expression->e.op2 = yypvt[-1].expression;} break;
  2611. case 220:
  2612. # line 1423 "expparse.y"
  2613. { exp_yyval.expression = TERN_EXPcreate(OP_SUBCOMPONENT,(Expression )0,(Expression )0,(Expression )0);
  2614.                 exp_yyval.expression->e.op2 = yypvt[-3].expression;
  2615.                 exp_yyval.expression->e.op3 = yypvt[-1].expression;} break;
  2616. case 221:
  2617. # line 1431 "expparse.y"
  2618. {
  2619.                 exp_yyval.expression = QUERYcreate(yypvt[-3].symbol,yypvt[-1].expression);
  2620.                 SYMBOL_destroy(yypvt[-3].symbol);
  2621.                 PUSH_SCOPE(exp_yyval.expression->u.query->scope,(Symbol *)0,OBJ_QUERY);
  2622.               } break;
  2623. case 222:
  2624. # line 1437 "expparse.y"
  2625. {
  2626.                 exp_yyval.expression = yypvt[-2].expression;    /* nice syntax, eh? */
  2627.                 exp_yyval.expression->u.query->expression = yypvt[-1].expression;
  2628.                 POP_SCOPE();
  2629.               } break;
  2630. case 223:
  2631. # line 1445 "expparse.y"
  2632. { exp_yyval.op_code = OP_LESS_THAN; } break;
  2633. case 224:
  2634. # line 1447 "expparse.y"
  2635. { exp_yyval.op_code = OP_GREATER_THAN; } break;
  2636. case 225:
  2637. # line 1449 "expparse.y"
  2638. { exp_yyval.op_code = OP_EQUAL; } break;
  2639. case 226:
  2640. # line 1451 "expparse.y"
  2641. { exp_yyval.op_code = OP_LESS_EQUAL; } break;
  2642. case 227:
  2643. # line 1453 "expparse.y"
  2644. { exp_yyval.op_code = OP_GREATER_EQUAL; } break;
  2645. case 228:
  2646. # line 1455 "expparse.y"
  2647. { exp_yyval.op_code = OP_NOT_EQUAL; } break;
  2648. case 229:
  2649. # line 1457 "expparse.y"
  2650. { exp_yyval.op_code = OP_INST_EQUAL; } break;
  2651. case 230:
  2652. # line 1459 "expparse.y"
  2653. { exp_yyval.op_code = OP_INST_NOT_EQUAL; } break;
  2654. case 231:
  2655. # line 1466 "expparse.y"
  2656. { exp_yyval.statement = LOOPcreate(CURRENT_SCOPE,yypvt[-5].expression,yypvt[-4].expression,yypvt[-2].list);
  2657.                 /* matching PUSH_SCOPE is in increment_control */
  2658.                 POP_SCOPE(); } break;
  2659. case 232:
  2660. # line 1471 "expparse.y"
  2661. { exp_yyval.statement = LOOPcreate((struct Scope *)0,yypvt[-5].expression,yypvt[-4].expression,yypvt[-2].list);} break;
  2662. case 233:
  2663. # line 1477 "expparse.y"
  2664. { exp_yyval.statement = RETcreate((Expression )0);} break;
  2665. case 234:
  2666. # line 1480 "expparse.y"
  2667. { exp_yyval.statement = RETcreate(yypvt[-2].expression);} break;
  2668. case 235:
  2669. # line 1484 "expparse.y"
  2670. { yyerrok; } break;
  2671. case 236:
  2672. # line 1488 "expparse.y"
  2673. { RULEput_body(CURRENT_SCOPE,yypvt[-3].list);
  2674.                 RULEput_where(CURRENT_SCOPE,yypvt[-2].list);
  2675.                 POP_SCOPE();} break;
  2676. case 237:
  2677. # line 1496 "expparse.y"
  2678. { Expression e; Type t;
  2679.                 /* it's true that we know it will be an */
  2680.                 /* entity_ type later */
  2681.                 TypeBody tb = TYPEBODYcreate(set_);
  2682.                 tb->base = TYPEcreate_name(yypvt[-0].symbol);
  2683.                 SCOPEadd_super(tb->base);
  2684.                 t = TYPEcreate_from_body_anonymously(tb);
  2685.                 SCOPEadd_super(t);
  2686.                 e = EXPcreate_from_symbol(t,yypvt[-0].symbol);
  2687.                 exp_yyval.variable = VARcreate(e,t);
  2688.                 exp_yyval.variable->flags.parameter = true;
  2689.                 /* link it in to the current scope's dict */
  2690.                 DICTdefine(CURRENT_SCOPE->symbol_table,
  2691.                 yypvt[-0].symbol->name,(Generic)exp_yyval.variable,yypvt[-0].symbol,OBJ_VARIABLE);
  2692.             } break;
  2693. case 238:
  2694. # line 1514 "expparse.y"
  2695. { exp_yyval.list = LISTcreate();
  2696.                 LISTadd(exp_yyval.list, (Generic)yypvt[-0].variable); } break;
  2697. case 239:
  2698. # line 1517 "expparse.y"
  2699. { exp_yyval.list = yypvt[-2].list;
  2700.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].variable); } break;
  2701. case 240:
  2702. # line 1522 "expparse.y"
  2703. { Rule r = ALGcreate(OBJ_RULE);
  2704.                 if (print_objects_while_running & OBJ_RULE_BITS){
  2705.                 fprintf(stdout,"parse: %s (rule)\n",yypvt[-2].symbol->name);
  2706.                 }
  2707.                 PUSH_SCOPE(r,yypvt[-2].symbol,OBJ_RULE);
  2708.                   } break;
  2709. case 241:
  2710. # line 1529 "expparse.y"
  2711. {  CURRENT_SCOPE->u.rule->parameters = yypvt[-2].list; } break;
  2712. case 244:
  2713. # line 1540 "expparse.y"
  2714. { POP_SCOPE();} break;
  2715. case 246:
  2716. # line 1547 "expparse.y"
  2717. { Schema schema = DICTlookup(CURRENT_SCOPE->symbol_table,yypvt[-1].symbol->name);
  2718.  
  2719.                 if (print_objects_while_running & OBJ_SCHEMA_BITS){
  2720.                 fprintf(stdout,"parse: %s (schema)\n",yypvt[-1].symbol->name);
  2721.                 }
  2722.                //if (EXPRESSignore_duplicate_schemas && schema) {
  2723.             //    SCANskip_to_end_schema();
  2724.             //    PUSH_SCOPE_DUMMY();
  2725.                // } else { 
  2726.                 schema = SCHEMAcreate();
  2727.                 LISTadd_last(PARSEnew_schemas,(Generic)schema);
  2728.                 PUSH_SCOPE(schema,yypvt[-1].symbol,OBJ_SCHEMA);
  2729.                // }
  2730.                   } break;
  2731. case 247:
  2732. # line 1565 "expparse.y"
  2733. { exp_yyval.typebody = TYPEBODYcreate(select_);
  2734.                 exp_yyval.typebody->list = yypvt[-1].list; } break;
  2735. case 248:
  2736. # line 1570 "expparse.y"
  2737. { yyerrok; } break;
  2738. case 249:
  2739. # line 1574 "expparse.y"
  2740. { exp_yyval.typebody = TYPEBODYcreate(set_);
  2741.                 exp_yyval.typebody->base = yypvt[-0].type;
  2742.                 exp_yyval.typebody->lower = yypvt[-2].upper_lower.lower_limit;
  2743.                 exp_yyval.typebody->upper = yypvt[-2].upper_lower.upper_limit;} break;
  2744. case 250:
  2745. # line 1579 "expparse.y"
  2746. { exp_yyval.typebody = TYPEBODYcreate(set_);
  2747.                 exp_yyval.typebody->base = yypvt[-0].type;} break;
  2748. case 251:
  2749. # line 1584 "expparse.y"
  2750. { exp_yyval.statement = STATEMENT_SKIP; } break;
  2751. case 252:
  2752. # line 1588 "expparse.y"
  2753. { exp_yyval.statement = yypvt[-0].statement; } break;
  2754. case 253:
  2755. # line 1590 "expparse.y"
  2756. { exp_yyval.statement = yypvt[-0].statement; } break;
  2757. case 254:
  2758. # line 1592 "expparse.y"
  2759. { exp_yyval.statement = yypvt[-0].statement; } break;
  2760. case 255:
  2761. # line 1594 "expparse.y"
  2762. { exp_yyval.statement = yypvt[-0].statement; } break;
  2763. case 256:
  2764. # line 1596 "expparse.y"
  2765. { exp_yyval.statement = yypvt[-0].statement; } break;
  2766. case 257:
  2767. # line 1598 "expparse.y"
  2768. { exp_yyval.statement = yypvt[-0].statement; } break;
  2769. case 258:
  2770. # line 1600 "expparse.y"
  2771. { exp_yyval.statement = yypvt[-0].statement; } break;
  2772. case 259:
  2773. # line 1602 "expparse.y"
  2774. { exp_yyval.statement = yypvt[-0].statement; } break;
  2775. case 260:
  2776. # line 1604 "expparse.y"
  2777. { exp_yyval.statement = yypvt[-0].statement; } break;
  2778. case 261:
  2779. # line 1606 "expparse.y"
  2780. { exp_yyval.statement = yypvt[-0].statement; } break;
  2781. case 262:
  2782. # line 1612 "expparse.y"
  2783. { exp_yyval.list = LISTcreate(); } break;
  2784. case 263:
  2785. # line 1615 "expparse.y"
  2786. { exp_yyval.list = yypvt[-0].list; } break;
  2787. case 264:
  2788. # line 1617 "expparse.y"
  2789. { exp_yyval.list = yypvt[-0].list;
  2790.                 LISTadd_first(exp_yyval.list, (Generic)yypvt[-1].statement); } break;
  2791. case 265:
  2792. # line 1625 "expparse.y"
  2793. { exp_yyval.subsuper_decl.subtypes = EXPRESSION_NULL;
  2794.                 exp_yyval.subsuper_decl.abstract = false;
  2795.                 exp_yyval.subsuper_decl.supertypes = LIST_NULL; } break;
  2796. case 266:
  2797. # line 1629 "expparse.y"
  2798. { exp_yyval.subsuper_decl.subtypes = yypvt[-0].subtypes.subtypes;
  2799.                 exp_yyval.subsuper_decl.abstract = yypvt[-0].subtypes.abstract;
  2800.                 exp_yyval.subsuper_decl.supertypes = LIST_NULL; } break;
  2801. case 267:
  2802. # line 1633 "expparse.y"
  2803. { exp_yyval.subsuper_decl.supertypes = yypvt[-0].list;
  2804.                 exp_yyval.subsuper_decl.abstract = false;
  2805.                 exp_yyval.subsuper_decl.subtypes = EXPRESSION_NULL; } break;
  2806. case 268:
  2807. # line 1641 "expparse.y"
  2808. { exp_yyval.subsuper_decl.subtypes = yypvt[-1].subtypes.subtypes;
  2809.                 exp_yyval.subsuper_decl.abstract = yypvt[-1].subtypes.abstract;
  2810.                 exp_yyval.subsuper_decl.supertypes = yypvt[-0].list; } break;
  2811. case 269:
  2812. # line 1648 "expparse.y"
  2813. { exp_yyval.list = yypvt[-1].list; } break;
  2814. case 270:
  2815. # line 1652 "expparse.y"
  2816. { exp_yyval.subtypes.subtypes = (Expression)0;
  2817.                 exp_yyval.subtypes.abstract = true; } break;
  2818. case 271:
  2819. # line 1656 "expparse.y"
  2820. { exp_yyval.subtypes.subtypes = yypvt[-1].expression;
  2821.                 exp_yyval.subtypes.abstract = false; } break;
  2822. case 272:
  2823. # line 1660 "expparse.y"
  2824. { exp_yyval.subtypes.subtypes = yypvt[-1].expression;
  2825.                 exp_yyval.subtypes.abstract = true; } break;
  2826. case 273:
  2827. # line 1665 "expparse.y"
  2828. { exp_yyval.expression = yypvt[-0].subtypes.subtypes; } break;
  2829. case 274:
  2830. # line 1667 "expparse.y"
  2831. { exp_yyval.expression = BIN_EXPcreate(OP_AND, yypvt[-2].expression, yypvt[-0].subtypes.subtypes);} break;
  2832. case 275:
  2833. # line 1669 "expparse.y"
  2834. { exp_yyval.expression = BIN_EXPcreate(OP_ANDOR, yypvt[-2].expression, yypvt[-0].subtypes.subtypes);} break;
  2835. case 276:
  2836. # line 1673 "expparse.y"
  2837. { exp_yyval.list = LISTcreate();
  2838.                 LISTadd_last(exp_yyval.list,(Generic)yypvt[-0].expression); } break;
  2839. case 277:
  2840. # line 1676 "expparse.y"
  2841. { LISTadd_last(yypvt[-2].list,(Generic)yypvt[-0].expression);
  2842.                   exp_yyval.list = yypvt[-2].list;} break;
  2843. case 278:
  2844. # line 1681 "expparse.y"
  2845. { exp_yyval.subtypes.subtypes = yypvt[-0].expression; } break;
  2846. case 279:
  2847. # line 1684 "expparse.y"
  2848. { exp_yyval.subtypes.subtypes = EXPcreate(Type_Oneof);
  2849.                 exp_yyval.subtypes.subtypes->u.list = yypvt[-1].list;} break;
  2850. case 280:
  2851. # line 1687 "expparse.y"
  2852. { exp_yyval.subtypes.subtypes = yypvt[-1].expression; } break;
  2853. case 281:
  2854. # line 1691 "expparse.y"
  2855. { exp_yyval.type_either.type = 0;
  2856.                 exp_yyval.type_either.body = yypvt[-0].typebody; } break;
  2857. case 282:
  2858. # line 1694 "expparse.y"
  2859. { exp_yyval.type_either.type = 0;
  2860.                 exp_yyval.type_either.body = yypvt[-0].typebody; } break;
  2861. case 283:
  2862. # line 1697 "expparse.y"
  2863. { exp_yyval.type_either.type = yypvt[-0].type;
  2864.                 exp_yyval.type_either.body = 0; } break;
  2865. case 284:
  2866. # line 1700 "expparse.y"
  2867. { exp_yyval.type_either.type = 0;
  2868.                 exp_yyval.type_either.body = yypvt[-0].typebody; } break;
  2869. case 286:
  2870. # line 1705 "expparse.y"
  2871. {
  2872.                 CURRENT_SCOPE->u.type->head = yypvt[-0].type_either.type;
  2873.                 CURRENT_SCOPE->u.type->body = yypvt[-0].type_either.body;
  2874.             } break;
  2875. case 287:
  2876. # line 1711 "expparse.y"
  2877. {
  2878.                 Type t = TYPEcreate_name(yypvt[-1].symbol);
  2879.                 PUSH_SCOPE(t,yypvt[-1].symbol,OBJ_TYPE);
  2880.             } break;
  2881. case 288:
  2882. # line 1714 "expparse.y"
  2883. {
  2884.                 SYMBOL_destroy(yypvt[-3].symbol);
  2885.                 } break;
  2886. case 290:
  2887. # line 1719 "expparse.y"
  2888. {
  2889.                 POP_SCOPE();
  2890.               } break;
  2891. case 292:
  2892. # line 1722 "expparse.y"
  2893. {
  2894.                 CURRENT_SCOPE->where = yypvt[-0].list;
  2895.                 POP_SCOPE();
  2896.               } break;
  2897. case 294:
  2898. # line 1732 "expparse.y"
  2899. { yypvt[-0].expression->e.op1 = yypvt[-1].expression;
  2900.                 exp_yyval.expression = yypvt[-0].expression;} break;
  2901. case 295:
  2902. # line 1735 "expparse.y"
  2903. { exp_yyval.expression = yypvt[-0].expression; } break;
  2904. case 296:
  2905. # line 1739 "expparse.y"
  2906. { exp_yyval.expression = yypvt[-0].expression; } break;
  2907. case 297:
  2908. # line 1741 "expparse.y"
  2909. { yypvt[-0].expression->e.op1 = yypvt[-1].expression;
  2910.                 exp_yyval.expression = yypvt[-0].expression;} break;
  2911. case 298:
  2912. # line 1744 "expparse.y"
  2913. { exp_yyval.expression = yypvt[-0].expression; } break;
  2914. case 299:
  2915. # line 1746 "expparse.y"
  2916. { exp_yyval.expression = yypvt[-0].expression; } break;
  2917. case 300:
  2918. # line 1748 "expparse.y"
  2919. { exp_yyval.expression = yypvt[-0].expression; } break;
  2920. case 301:
  2921. # line 1750 "expparse.y"
  2922. { exp_yyval.expression = yypvt[-1].expression; } break;
  2923. case 302:
  2924. # line 1754 "expparse.y"
  2925. { exp_yyval.expression = yypvt[-0].expression; } break;
  2926. case 303:
  2927. # line 1759 "expparse.y"
  2928. { exp_yyval.expression = yypvt[-0].expression; } break;
  2929. case 304:
  2930. # line 1761 "expparse.y"
  2931. { exp_yyval.expression = UN_EXPcreate(OP_NOT, yypvt[-0].expression);} break;
  2932. case 305:
  2933. # line 1763 "expparse.y"
  2934. { exp_yyval.expression = yypvt[-0].expression; } break;
  2935. case 306:
  2936. # line 1765 "expparse.y"
  2937. { exp_yyval.expression = UN_EXPcreate(OP_NEGATE, yypvt[-0].expression);} break;
  2938. case 307:
  2939. # line 1772 "expparse.y"
  2940. { exp_yyval.type_flags.unique = 0;} break;
  2941. case 308:
  2942. # line 1774 "expparse.y"
  2943. { exp_yyval.type_flags.unique = 1;} break;
  2944. case 309:
  2945. # line 1778 "expparse.y"
  2946. { exp_yyval.qualified_attr = QUAL_ATTR_new();
  2947.                 exp_yyval.qualified_attr->attribute = yypvt[-0].symbol;
  2948.               } break;
  2949. case 310:
  2950. # line 1782 "expparse.y"
  2951. { exp_yyval.qualified_attr = QUAL_ATTR_new();
  2952.                 exp_yyval.qualified_attr->entity = yypvt[-2].symbol;
  2953.                 exp_yyval.qualified_attr->attribute = yypvt[-0].symbol;
  2954.               } break;
  2955. case 311:
  2956. # line 1789 "expparse.y"
  2957. { exp_yyval.list = LISTcreate();
  2958.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].qualified_attr); } break;
  2959. case 312:
  2960. # line 1792 "expparse.y"
  2961. { exp_yyval.list = yypvt[-2].list;
  2962.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].qualified_attr); } break;
  2963. case 313:
  2964. # line 1797 "expparse.y"
  2965. { LISTadd_first(yypvt[-1].list,(Generic)EXPRESSION_NULL);
  2966.                 exp_yyval.list = yypvt[-1].list;} break;
  2967. case 314:
  2968. # line 1800 "expparse.y"
  2969. { LISTadd_first(yypvt[-1].list,(Generic)yypvt[-3].symbol);
  2970.                 exp_yyval.list = yypvt[-1].list;} break;
  2971. case 315:
  2972. # line 1819 "expparse.y"
  2973. { exp_yyval.list = LISTcreate();
  2974.                 LISTadd_last(exp_yyval.list,(Generic)yypvt[-0].list); } break;
  2975. case 316:
  2976. # line 1822 "expparse.y"
  2977. { LISTadd_last(yypvt[-1].list,(Generic)yypvt[-0].list);
  2978.                   exp_yyval.list = yypvt[-1].list;} break;
  2979. case 317:
  2980. # line 1828 "expparse.y"
  2981. { exp_yyval.list = 0; } break;
  2982. case 318:
  2983. # line 1830 "expparse.y"
  2984. { exp_yyval.list = yypvt[-0].list; } break;
  2985. case 319:
  2986. # line 1834 "expparse.y"
  2987. { exp_yyval.expression = 0; } break;
  2988. case 320:
  2989. # line 1836 "expparse.y"
  2990. { exp_yyval.expression = yypvt[-0].expression;} break;
  2991. case 321:
  2992. # line 1840 "expparse.y"
  2993. { exp_yyval.where = WHERE_new();
  2994.                 exp_yyval.where->label = 0;
  2995.                 exp_yyval.where->expr = yypvt[-1].expression;
  2996.                   } break;
  2997. case 322:
  2998. # line 1845 "expparse.y"
  2999. { exp_yyval.where = WHERE_new();
  3000.                 exp_yyval.where->label = yypvt[-3].symbol;
  3001.                 exp_yyval.where->expr = yypvt[-1].expression;
  3002.                 if (!CURRENT_SCOPE->symbol_table) {
  3003.                 CURRENT_SCOPE->symbol_table = DICTcreate(25);
  3004.                 }
  3005.                 DICTdefine(CURRENT_SCOPE->symbol_table,yypvt[-3].symbol->name,
  3006.                 (Generic)exp_yyval.where,yypvt[-3].symbol,OBJ_WHERE);
  3007.                   } break;
  3008. case 323:
  3009. # line 1857 "expparse.y"
  3010. { exp_yyval.list = LISTcreate();
  3011.                 LISTadd(exp_yyval.list, (Generic)yypvt[-0].where); } break;
  3012. case 324:
  3013. # line 1860 "expparse.y"
  3014. { exp_yyval.list = yypvt[-1].list;
  3015.                 LISTadd_last(exp_yyval.list, (Generic)yypvt[-0].where); } break;
  3016. case 325:
  3017. # line 1867 "expparse.y"
  3018. { exp_yyval.list = LIST_NULL; } break;
  3019. case 326:
  3020. # line 1869 "expparse.y"
  3021. { exp_yyval.list = yypvt[-0].list; } break;
  3022. case 327:
  3023. # line 1873 "expparse.y"
  3024. { exp_yyval.expression = 0; } break;
  3025. case 328:
  3026. # line 1875 "expparse.y"
  3027. { exp_yyval.expression = yypvt[-0].expression;} break;
  3028.     }
  3029.     goto yystack;        /* reset registers in driver code */
  3030. }
  3031.