home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / FTNCHK32.ZIP / fortran.c < prev    next >
C/C++ Source or Header  |  1993-02-16  |  103KB  |  3,130 lines

  1.  
  2. # line 10 "fortran.y"
  3.  
  4. /*
  5.   fortran.c:
  6.  
  7.     Copyright (C) 1992 by Robert K. Moniot.
  8.     This program is free software.  Permission is granted to
  9.     modify it and/or redistribute it.  There is no warranty
  10.     for this program.
  11.  
  12.  
  13.         This grammar is ANSI standard-conforming, except for:
  14.         -- Sensitive to whitespace, which is used in lexical analysis
  15.            to separate keywords and identifiers from context.  This
  16.            is a design feature.  Rules are the same as for Pascal.
  17.            (Of course stmt fields and end-of-line still honored.)
  18.            Note: a complex constant cannot be split across lines.
  19.         -- Currently, some keywords are partially reserved: may
  20.            only be used for scalar variables.  (See keywords.c)  This
  21.            is the fault of the lexical analyzer (too little lookahead).
  22.  
  23.         Extensions supported:
  24.         -- Case insensitive.
  25.          -- Hollerith constants.
  26.         -- Variable names may be longer than 6 characters.  Also
  27.            allows underscores in names.
  28.         -- DO ... ENDDO and DO WHILE loop forms allowed.
  29.         -- NAMELIST supported.
  30.         -- TYPE and ACCEPT I/O statements allowed.
  31.         -- Tabs are permitted in input, and (except in character data)
  32.            expand into blanks up to the next column equal to 1 mod 8.
  33.         -- Type declarations INTEGER*2, REAL*8, etc. are allowed.
  34.            REAL*8 becomes DOUBLE PRECISION.  For others, length spec
  35.            is ignored.
  36.         -- IMPLICIT NONE allowed.
  37.      */
  38.  
  39. /*  Author: R. Moniot
  40.  *  Date:   August 1988
  41.  *  Last revision: January 1992
  42.  */
  43.  
  44. #include <stdio.h>
  45. #include <string.h>
  46. #include "ftnchek.h"
  47. #include "symtab.h"
  48. void exit();
  49.  
  50.  
  51.  
  52. int current_datatype,    /* set when parse type_name or type_stmt */
  53.     stmt_sequence_no,   /* set when parsing, reset to 0 at end_stmt */
  54.     control_item_count;    /* count of items in control_info_list */
  55.  
  56. extern unsigned prev_stmt_line_num; /* shared with advance */
  57.  
  58. int current_module_hash = -1,    /* hashtable index of current module name */
  59.     current_module_type,
  60.     executable_stmt=FALSE,
  61.     prev_stmt_class=0,
  62.          /* flags for lexer */
  63.     complex_const_allowed=FALSE, /* for help in lookahead for these */
  64.     inside_format=FALSE,    /* when inside parens of FORMAT  */
  65.     integer_context=FALSE,    /* says integers-only are to follow */
  66.     prev_goto=FALSE,
  67.     goto_flag=FALSE;    /* if unconditional GOTO was encountered */
  68.  
  69. long exec_stmt_count=0;    /* count of executable stmts in program */
  70.  
  71. PRIVATE void
  72. print_comlist(), print_exprlist(), END_processing();
  73. PRIVATE Token *
  74.   append_token();
  75. PRIVATE int
  76.   do_bounds_type();
  77.         /* Uses of Token fields for nonterminals: */
  78. /*
  79.   1. dim_bound_lists: dimensioning info for arrays:
  80.        token.class = no. of dimensions,
  81.        token.subclass = no. of elements
  82.   2. expressions
  83.        token.value.integer = hash index (of identifier)
  84.        token.class = type_byte = storage_class << 4 + datatype
  85.        token.subclass = flags: CONST_EXPR, LVALUE_EXPR, etc.
  86.   3. common variable lists
  87.        token.subclass = flag: COMMA_FLAG used to handle extra/missing commas
  88. */
  89.  
  90. #define seq_header   1
  91. #define seq_implicit 2
  92. #define seq_specif   3
  93. #define seq_stmt_fun 4
  94. #define seq_exec     5
  95. #define seq_end      6
  96.  
  97. #define DBG(S)    if(debug_parser) fprintf(list_fd,"\nproduction: S");
  98. #define DBGstr(S,str) \
  99.     if(debug_parser) fprintf(list_fd,"\nproduction: S%s",str);
  100.  
  101. # define tok_identifier 257
  102. # define tok_array_identifier 258
  103. # define tok_label 259
  104. # define tok_integer_const 260
  105. # define tok_real_const 261
  106. # define tok_dp_const 262
  107. # define tok_complex_const 263
  108. # define tok_logical_const 264
  109. # define tok_string 265
  110. # define tok_hollerith 266
  111. # define tok_edit_descriptor 267
  112. # define tok_letter 268
  113. # define tok_relop 269
  114. # define tok_AND 270
  115. # define tok_OR 271
  116. # define tok_EQV 272
  117. # define tok_NEQV 273
  118. # define tok_NOT 274
  119. # define tok_power 275
  120. # define tok_concat 276
  121. # define tok_ASSIGN 277
  122. # define tok_ACCEPT 278
  123. # define tok_BACKSPACE 279
  124. # define tok_BLOCK 280
  125. # define tok_BLOCKDATA 281
  126. # define tok_CALL 282
  127. # define tok_CHARACTER 283
  128. # define tok_CLOSE 284
  129. # define tok_COMMON 285
  130. # define tok_COMPLEX 286
  131. # define tok_CONTINUE 287
  132. # define tok_BYTE 288
  133. # define tok_DATA 289
  134. # define tok_DIMENSION 290
  135. # define tok_DO 291
  136. # define tok_DOUBLE 292
  137. # define tok_DOUBLEPRECISION 293
  138. # define tok_DOWHILE 294
  139. # define tok_ELSE 295
  140. # define tok_ELSEIF 296
  141. # define tok_END 297
  142. # define tok_ENDDO 298
  143. # define tok_ENDFILE 299
  144. # define tok_ENDIF 300
  145. # define tok_ENTRY 301
  146. # define tok_EQUIVALENCE 302
  147. # define tok_EXTERNAL 303
  148. # define tok_FILE 304
  149. # define tok_FORMAT 305
  150. # define tok_FUNCTION 306
  151. # define tok_GO 307
  152. # define tok_GOTO 308
  153. # define tok_IF 309
  154. # define tok_IMPLICIT 310
  155. # define tok_INCLUDE 311
  156. # define tok_INQUIRE 312
  157. # define tok_INTEGER 313
  158. # define tok_INTRINSIC 314
  159. # define tok_LOGICAL 315
  160. # define tok_NAMELIST 316
  161. # define tok_OPEN 317
  162. # define tok_PARAMETER 318
  163. # define tok_PAUSE 319
  164. # define tok_PRECISION 320
  165. # define tok_PRINT 321
  166. # define tok_PROGRAM 322
  167. # define tok_READ 323
  168. # define tok_REAL 324
  169. # define tok_RETURN 325
  170. # define tok_REWIND 326
  171. # define tok_SAVE 327
  172. # define tok_STOP 328
  173. # define tok_SUBROUTINE 329
  174. # define tok_TO 330
  175. # define tok_TYPE 331
  176. # define tok_THEN 332
  177. # define tok_WHILE 333
  178. # define tok_WRITE 334
  179. # define tok_illegal 335
  180. # define EOS 127
  181. # define REDUCE 337
  182. #define yyclearin yychar = -1
  183. #define yyerrok yyerrflag = 0
  184. extern int yychar;
  185. extern int yyerrflag;
  186. #ifndef YYMAXDEPTH
  187. #define YYMAXDEPTH 150
  188. #endif
  189. #ifndef YYSTYPE
  190. #define YYSTYPE int
  191. #endif
  192. YYSTYPE yylval, yyval;
  193. typedef int yytabelem;
  194. # define YYERRCODE 256
  195.  
  196. # line 2499 "fortran.y"
  197.  
  198. void
  199. init_parser()            /* Initialize various flags & counters */
  200. {
  201.     initial_flag = TRUE;    /* set flag for keyword test */
  202.     implicit_flag=FALSE;    /* clear flags for IMPLICIT stmt */
  203.     implicit_letter_flag = FALSE;
  204.     implicit_type_given = FALSE;
  205.     implicit_none = FALSE;
  206.     prev_token_class = EOS;
  207.     complex_const_allowed = FALSE;
  208.     stmt_sequence_no = 0;
  209. }
  210.  
  211.         /* Propagate non-integer type if any of DO loop
  212.            bounds are non-integer. */
  213. PRIVATE int
  214. do_bounds_type(t1,t2,t3)
  215.      Token *t1, *t2, *t3;
  216. {
  217.   int result_class;
  218.        if(datatype_of(t1->class) != type_INTEGER) result_class = t1->class;
  219.   else if(datatype_of(t2->class) != type_INTEGER) result_class = t2->class;
  220.   else if(datatype_of(t3->class) != type_INTEGER) result_class = t3->class;
  221.   else result_class = t1->class;
  222.   return result_class;
  223. }
  224.  
  225.  
  226. /* Debugging routine: prints the expression list of various productions */
  227.  
  228. PRIVATE void
  229. print_exprlist(s,t)
  230.     char *s;
  231.     Token *t;
  232. {
  233.  
  234.     fprintf(list_fd,"\n%s arglist: ",s);
  235.  
  236.     if(t == NULL)
  237.         fprintf(list_fd,"(empty)");
  238.     else {
  239.           while( (t=t->next_token) != NULL) {
  240.           fprintf(list_fd,"%s ",type_name[datatype_of(t->class)]);
  241.           if( is_true(ID_EXPR,t->subclass) )
  242.             fprintf(list_fd,"(%s) ",token_name(*t));
  243.         }
  244.     }
  245. }
  246.  
  247. PRIVATE void
  248. print_comlist(s,t)
  249.     char *s;
  250.     Token *t;
  251. {
  252.  
  253.     fprintf(list_fd,"\n%s varlist: ",s);
  254.  
  255.     if(t == NULL)
  256.         fprintf(list_fd,"(empty)");
  257.     else {
  258.           while( (t=t->next_token) != NULL) {
  259.           fprintf(list_fd,"%s ",type_name[datatype_of(t->class)]);
  260.           if( is_true(ID_EXPR,t->subclass) )
  261.             fprintf(list_fd,"(%s) ",token_name(*t));
  262.         }
  263.       }
  264. }
  265.  
  266. /* After having parsed prog_stmt, function_stmt, subroutine_stmt,
  267.    block_data_stmt, the stmt_sequence_no is set to the value seq_header.
  268. */
  269.  
  270. void
  271. check_seq_header(t)
  272.      Token *t;
  273. {
  274.     if(stmt_sequence_no >= seq_header) {
  275.        syntax_error( (t == (Token *) NULL? line_num: t->line_num),
  276.             NO_COL_NUM,
  277.             "missing END statement inserted");
  278.        msg_tail( (t == (Token *) NULL? "at end of file":
  279.               "prior to statement") );
  280.  
  281.        END_processing(t);
  282.     }
  283.     stmt_sequence_no = seq_header;
  284. }
  285.  
  286.  
  287.  
  288.  
  289.     /* After having parsed end_stmt, common block lists and
  290.        subprogram argument lists are copied over into global symbol
  291.        table, the local symbol table is printed out and then cleared,
  292.        and stmt_sequence_no is set to zero for start of next module.
  293.     */
  294.  
  295. PRIVATE void
  296. END_processing(t)
  297.     Token *t;
  298. {
  299.   if(current_module_hash != -1) {
  300.     if(exec_stmt_count == 0 &&
  301.        current_module_type != type_BLOCK_DATA) {
  302.       warning(t == (Token *)NULL? line_num: t->line_num, NO_COL_NUM,
  303.           "Module contains no executable statements");
  304.     }
  305.  
  306.     if(do_list && t != (Token *)NULL)
  307.         flush_line_out(t->line_num);
  308.     process_lists(current_module_hash);
  309.     debug_symtabs();
  310.     print_loc_symbols(current_module_hash);
  311.     init_symtab();
  312.   }
  313.   exec_stmt_count = 0;
  314.   stmt_sequence_no = 0;
  315.   current_module_hash = -1;
  316.   implicit_type_given = FALSE;
  317.   implicit_none = FALSE;
  318. }
  319.  
  320.         /* Routine to add token t to the front of a token list. */
  321. PRIVATE Token *
  322. append_token(tlist,t)
  323.      Token *tlist, *t;
  324. {
  325.     Token *tcopy;
  326.     if((tcopy=new_token()) == (Token *)NULL){
  327.         fprintf(stderr,
  328.             "Oops--Out of token space at line %u\n",
  329.             line_num);
  330. #ifdef LARGE_MACHINE
  331.         fprintf(stderr,
  332.             "Recompile me with larger TOKENSPACESZ value\n");
  333. #else
  334.         fprintf(stderr,
  335.             "Recompile me with LARGE_MACHINE option\n");
  336. #endif
  337.         exit(1);
  338.     }
  339.  
  340.     *tcopy = *t;        /* make permanent copy of token */
  341.     tcopy->next_token = tlist; /* link it onto front of list */
  342.     return tcopy;        /* return it as new tlist */
  343. }
  344. yytabelem yyexca[] ={
  345. -1, 1,
  346.     0, -1,
  347.     -2, 0,
  348. -1, 244,
  349.     40, 367,
  350.     -2, 427,
  351. -1, 399,
  352.     61, 431,
  353.     -2, 429,
  354. -1, 400,
  355.     61, 432,
  356.     -2, 430,
  357. -1, 466,
  358.     41, 352,
  359.     44, 352,
  360.     -2, 397,
  361. -1, 544,
  362.     269, 0,
  363.     -2, 384,
  364. -1, 615,
  365.     42, 214,
  366.     -2, 216,
  367. -1, 623,
  368.     42, 439,
  369.     -2, 406,
  370.     };
  371. # define YYNPROD 442
  372. # define YYLAST 1548
  373. yytabelem yyact[]={
  374.  
  375.    265,   507,   382,   565,   398,   566,   386,   240,   612,   287,
  376.    611,   368,   467,   254,   494,   608,   476,   495,   489,   588,
  377.    473,   468,   586,   396,   488,   465,   245,   143,   255,   143,
  378.    338,   385,    79,   119,    78,   143,   236,   118,   305,   118,
  379.    175,   165,   326,   269,   262,   118,   397,    77,   261,   275,
  380.    266,   471,   212,   235,   184,   263,   366,   196,   173,   132,
  381.    359,   183,   260,   201,    83,   144,   145,   171,   764,   222,
  382.    517,   307,   313,   188,   290,   312,   244,   142,   154,   142,
  383.    303,   151,   189,   403,   189,   142,   428,   403,   189,   418,
  384.    738,   216,   217,   220,   189,   683,   414,   415,   419,   143,
  385.    273,   277,   279,   288,   169,   394,   168,   420,   746,   118,
  386.    609,   591,   149,   143,   157,   160,   676,   383,   672,   167,
  387.    179,   527,   187,   118,   197,   202,   202,   207,   209,   213,
  388.    695,   166,   219,   297,   694,   228,   228,   174,   311,   367,
  389.    176,   295,   256,   294,   369,   214,   181,   178,   413,   142,
  390.    192,   198,   203,   203,   158,   159,   300,   301,   302,   475,
  391.    164,   176,   347,   142,   158,   159,   214,   227,   499,   156,
  392.    218,   355,   229,   457,   350,   144,   145,   310,   205,   199,
  393.    176,   315,   413,   296,   334,   413,   117,   182,   176,   137,
  394.    388,   141,   194,   200,   389,   139,   140,   143,   247,   248,
  395.    249,   250,   320,   341,   413,   365,   493,   118,   432,   327,
  396.    339,   455,   777,   430,   453,   772,   135,   340,   138,   323,
  397.    384,   409,   402,   390,   766,   210,   762,   136,   187,   379,
  398.    220,   758,   761,   187,   760,   174,   354,   351,   333,   117,
  399.    360,   361,   137,   349,   141,   153,   377,   142,   139,   140,
  400.    756,   375,   202,   755,   742,   741,   124,   725,   154,   204,
  401.    456,   380,   740,   152,   739,   722,   734,   332,   655,   135,
  402.    733,   138,   356,   416,   732,   706,   404,   387,   628,   203,
  403.    136,   395,   730,   719,   716,   407,   715,   651,   511,   492,
  404.    714,   431,   158,   159,   158,   159,   429,   690,   454,   158,
  405.    159,   452,   410,   688,   408,   401,   322,   460,   673,   417,
  406.    667,   190,   378,   190,   463,   460,   458,   190,   426,   427,
  407.    421,   414,   415,   190,   395,   661,   414,   415,   395,   376,
  408.    395,   365,   602,   353,   374,   445,   591,   744,   592,   595,
  409.    587,   594,   357,   598,   660,   491,   659,   414,   415,   414,
  410.    415,   466,   414,   415,   600,   158,   159,   158,   400,   369,
  411.    365,   143,   252,   143,   276,   268,   469,   267,   508,   348,
  412.    474,   118,   603,   118,   158,   159,   158,   159,   144,   145,
  413.    434,   158,   159,   363,   436,   373,   438,   158,   159,   521,
  414.    179,   158,   159,   496,   537,   484,   343,   144,   145,   174,
  415.    187,   174,   482,   351,   329,   360,   145,   533,   158,   159,
  416.    197,   142,   202,   142,   372,   349,   529,   486,   531,   501,
  417.    522,   504,   512,   536,   513,   518,   213,   509,   510,   505,
  418.    470,   516,   514,   447,   442,   437,   435,   198,   433,   203,
  419.    411,   393,   538,   364,   556,   392,   391,   330,   321,    58,
  420.    567,   319,   256,   563,   318,   469,   535,   530,   317,   256,
  421.    574,   299,   293,   256,   543,   225,   362,   542,   547,   548,
  422.    252,   150,   549,   545,   546,   664,   544,   539,   540,   342,
  423.     14,   226,   605,   528,   449,   215,   557,   328,   422,   747,
  424.    423,   617,   425,   336,    86,   616,   335,   424,   564,   515,
  425.    474,   569,   474,   575,   474,   570,   743,   571,   422,   572,
  426.    423,   576,   341,   169,   503,   168,   624,   500,   194,   339,
  427.    288,   604,   606,   700,   776,   327,   340,   642,   167,   640,
  428.    615,   645,   625,   650,   754,   634,   635,   582,   768,   647,
  429.    166,   422,   703,   423,   297,   270,   558,   559,   753,   720,
  430.    649,   631,   520,   289,   639,   644,   593,   698,   765,   757,
  431.    699,   596,   597,   592,   657,   658,   671,   221,   577,   232,
  432.    538,   230,   599,   413,   684,   256,   682,   526,   656,   144,
  433.    145,   223,   247,   248,   249,   250,   243,   241,   242,   666,
  434.    702,   256,   526,   680,   296,   422,   264,   423,   291,   665,
  435.    256,   256,   526,   674,   687,   689,   685,   297,   693,   692,
  436.    691,   663,   669,   653,   662,   632,   654,   686,   675,   652,
  437.    643,   630,   582,   520,   631,   584,   704,   705,   491,   491,
  438.      7,   474,   469,   619,   533,   618,   233,   233,   626,   233,
  439.    233,   627,   288,   578,   710,   718,   713,   708,   721,   711,
  440.    712,   717,   707,   581,   541,   697,   582,   296,   524,   502,
  441.    485,   251,   723,   271,   272,   579,   352,   561,   580,   731,
  442.    562,   554,   306,   371,   526,   567,   496,   735,   496,   496,
  443.    737,   553,   552,   469,   526,   526,   525,   144,   145,   526,
  444.    247,   248,   249,   250,   243,   241,   242,   519,   256,   477,
  445.    520,   344,   478,   370,   724,   200,   304,   508,   752,   729,
  446.    617,   617,   749,   748,   616,   745,   770,   767,   679,   678,
  447.    677,   637,   636,   583,   633,   629,   567,   523,   316,   759,
  448.    462,   450,   441,   440,   439,   406,   405,   344,   763,   346,
  449.    331,   324,   314,   308,   298,   292,   285,   162,    10,   615,
  450.    750,   239,     3,   237,     9,   146,   258,   148,   534,    16,
  451.    144,   145,     8,   147,   769,   532,   567,   771,   246,   508,
  452.    774,   773,   775,   238,   668,   444,   560,   508,   778,   284,
  453.     84,    91,   128,   112,   113,   130,   117,    99,    75,   137,
  454.     87,   141,    72,    73,   131,   139,   140,   107,   103,   104,
  455.     17,   108,   129,   105,    68,    74,    80,   101,    69,   133,
  456.    123,   122,   124,   114,    11,   100,   135,    81,   138,    76,
  457.     98,    70,    89,   464,    93,    64,   125,   136,   102,   127,
  458.     82,    88,   134,   601,    94,   590,   589,   126,    16,   144,
  459.    145,   259,   161,    95,   268,   648,   267,   158,   159,    97,
  460.    247,   248,   249,   250,   620,   621,   622,    96,   283,    84,
  461.     91,   128,   112,   113,   130,   117,    99,    75,   137,    87,
  462.    141,    72,    73,   131,   139,   140,   107,   103,   104,    17,
  463.    108,   129,   105,    68,    74,    80,   282,    69,   133,   123,
  464.    122,   124,   114,   281,   100,   135,    81,   138,    76,    98,
  465.     70,    89,   257,    93,    64,   125,   136,   102,   127,    82,
  466.     88,   134,   728,    94,   144,   145,   126,   555,   602,   727,
  467.    551,   726,   591,   585,   550,   595,   587,   594,   646,   598,
  468.     90,   309,   412,   253,    84,    91,   128,    92,   451,   130,
  469.    600,    99,   568,   106,    87,   252,   443,   446,   268,   736,
  470.    267,   448,   461,    85,   224,   121,   129,   120,   638,   381,
  471.    751,   337,   614,   613,   123,   122,   124,   701,   252,   100,
  472.    610,   268,   483,   267,    98,   172,    89,   170,    93,   211,
  473.    125,   208,   102,   127,   206,    88,   459,   696,    94,   222,
  474.    252,   126,   670,   268,   479,   267,   325,   607,   481,   480,
  475.    163,    71,   116,   115,   195,   252,   358,   276,   268,   193,
  476.    267,   191,   185,   186,   498,   497,   345,   180,   487,   177,
  477.    280,    67,   276,   268,   472,   267,   111,    66,   110,   109,
  478.     65,   155,    63,    62,    61,   278,    60,   276,   268,    59,
  479.    267,    57,    56,    55,    54,    53,    52,    51,    50,    49,
  480.    274,    48,   276,   268,    47,   267,    46,    45,   144,   145,
  481.     44,   247,   248,   249,   250,   243,   241,   242,   252,    43,
  482.     42,   268,    41,   267,    40,   264,    39,    38,    37,    36,
  483.     35,    34,    33,   259,    32,    31,   268,    30,   267,   602,
  484.     29,    28,    27,   591,    26,    25,   595,    24,   594,    23,
  485.    598,    22,    21,    20,    19,    18,    15,    13,    12,     6,
  486.    252,   600,   709,   268,     5,   267,     4,     2,     1,     0,
  487.    252,     0,   490,   268,     0,   267,     0,     0,     0,     0,
  488.    252,   681,     0,   268,     0,   267,     0,     0,     0,     0,
  489.    252,     0,   593,   268,   641,   267,     0,   596,   597,   592,
  490.    252,   573,     0,   268,     0,   267,     0,     0,   599,     0,
  491.      0,     0,   144,   145,     0,   247,   248,   249,   250,   243,
  492.    241,   242,   252,     0,   506,   268,     0,   267,     0,   264,
  493.      0,     0,     0,     0,     0,   144,   145,     0,   247,   248,
  494.    249,   250,   243,   241,   242,     0,     0,     0,     0,     0,
  495.    252,     0,   264,   268,     0,   267,     0,   144,   145,     0,
  496.    247,   248,   249,   250,   243,   241,   242,   619,   459,   618,
  497.      0,     0,   399,   400,   264,   247,   248,   249,   250,   243,
  498.    241,   242,   252,     0,   234,     0,     0,   144,   145,   264,
  499.    247,   248,   249,   250,   243,   241,   242,   231,     0,   234,
  500.      0,     0,   144,   145,   264,   247,   248,   249,   250,   243,
  501.    241,   242,     0,     0,     0,     0,     0,   144,   145,   264,
  502.    247,   248,   249,   250,   243,   241,   242,   252,     0,     0,
  503.    268,     0,   267,     0,   264,   144,   145,     0,   247,   248,
  504.    249,   250,   243,   241,   242,     0,     0,     0,     0,     0,
  505.    144,   145,   264,   247,   248,   249,   250,   243,   241,   242,
  506.      0,     0,     0,   593,     0,     0,     0,   264,   596,   597,
  507.    592,   252,     0,     0,   268,     0,   267,   144,   145,   599,
  508.    247,   248,   249,   250,   243,   241,   242,   144,   145,     0,
  509.    247,   248,   249,   250,   243,   241,   242,   144,   145,     0,
  510.    247,   248,   249,   250,   243,   241,   242,   144,   145,     0,
  511.    247,   248,   249,   250,   243,   241,   242,   144,   145,     0,
  512.    247,   248,   249,   250,   243,   241,   242,     0,     0,     0,
  513.      0,     0,     0,     0,     0,     0,     0,     0,     0,   144,
  514.    145,     0,   247,   248,   249,   250,   243,   241,   242,     0,
  515.      0,     0,     0,     0,     0,     0,     0,     0,   286,     0,
  516.      0,     0,     0,     0,     0,     0,     0,   144,   145,     0,
  517.    247,   248,   249,   250,   243,   241,   242,     0,     0,     0,
  518.      0,   158,   159,     0,   623,   248,   249,   250,   620,   621,
  519.    622,     0,     0,     0,     0,     0,     0,     0,     0,   144,
  520.    145,     0,   247,   248,   249,   250,   243,   241,   242,     0,
  521.      0,     0,     0,     0,   144,   145,     0,   247,   248,   249,
  522.    250,   243,   241,   242,     0,     0,     0,     0,     0,     0,
  523.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  524.      0,     0,     0,     0,   144,   145,     0,   247,   248,   249,
  525.    250,   243,   241,   242,     0,     0,     0,     0,     0,     0,
  526.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  527.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  528.      0,     0,     0,     0,     0,     0,     0,     0,   144,   145,
  529.      0,   247,   248,   249,   250,   243,   241,   242 };
  530. yytabelem yypact[]={
  531.  
  532.    503, -1000,   503, -1000, -1000, -1000, -1000, -1000,   582, -1000,
  533.  -1000,  -153, -1000, -1000, -1000, -1000,   344,   -46, -1000, -1000,
  534.  -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
  535.  -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
  536.  -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
  537.  -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
  538.  -1000, -1000, -1000, -1000, -1000, -1000, -1000,    42,  -103, -1000,
  539.    707,   -97,   121,  -103, -1000,    37,   471,  -103,   151,   134,
  540.   -103,  -103,    98,   424, -1000,   130,   657,   338,   -93,   -93,
  541.   1207,  1192,  1043,  1192,  1192,  1010,   995,   980, -1000, -1000,
  542.  -1000,   706,  1281,   -53,   705,   335,  -192,   704,   334,  -103,
  543.   -103,  -103,  -209, -1000, -1000,   664, -1000, -1000, -1000,   632,
  544.  -1000, -1000, -1000,  -259,   703, -1000, -1000, -1000, -1000, -1000,
  545.   -103, -1000,  -231, -1000, -1000, -1000, -1000, -1000, -1000,  -248,
  546.  -1000, -1000,   702,   688, -1000, -1000, -1000, -1000, -1000,   331,
  547.  -1000, -1000,   327,   324, -1000,  -103, -1000,   321, -1000, -1000,
  548.    179,   701,  -103,   360,   320, -1000,   700, -1000,   663, -1000,
  549.    140, -1000,   449, -1000, -1000, -1000,   148,   352, -1000,   697,
  550.    699,    35,    47, -1000, -1000,   622,  -103,   697, -1000,   124,
  551.  -1000,   145, -1000,  -103,  -103,   339, -1000,   697, -1000,   316,
  552.     99, -1000,   661,   631,   287,  -103,   207, -1000,   202, -1000,
  553.  -1000,   185, -1000, -1000,  -103, -1000,  -143,  -143, -1000,   150,
  554.   -143, -1000,   319, -1000,  -226, -1000,   318, -1000, -1000, -1000,
  555.    314,   965,   178,  -193, -1000, -1000, -1000,   632, -1000, -1000,
  556.  -1000, -1000, -1000, -1000, -1000,   696,   695, -1000, -1000, -1000,
  557.  -1000,   177,  1028,   313,   529, -1000,  -176, -1000, -1000,  1043,
  558.   -182,  -172, -1000,  -162,  1237,   498,   450,   430,   430, -1000,
  559.   -189,   169,   164,   311,   965,  -176, -1000,   309,   965,   308,
  560.    965,   694,   693,   692,   307,   905, -1000,   306,   498, -1000,
  561.  -1000,  -263, -1000, -1000,   423,   691, -1000, -1000, -1000, -1000,
  562.    174,   171,   133, -1000,  -116, -1000,  1160, -1000, -1000,   690,
  563.  -1000,  -143, -1000, -1000,  1160, -1000,  1028, -1000, -1000, -1000,
  564.    303, -1000, -1000,   117, -1000,   658, -1000, -1000, -1000, -1000,
  565.  -1000, -1000, -1000, -1000,   121, -1000,   121,   616, -1000, -1000,
  566.  -1000,   688, -1000,  -103,  1080,   162,  -103, -1000,    41, -1000,
  567.  -1000, -1000, -1000,  -103,   470, -1000, -1000, -1000,  -103, -1000,
  568.    615,   467, -1000,  -103, -1000,  -103, -1000,  1132, -1000, -1000,
  569.     99,    99, -1000,   161, -1000,  -103, -1000,  -103, -1000,   119,
  570.    452,  1028,  -260, -1000,   298,   656,  -143, -1000, -1000,   687,
  571.    614, -1000, -1000, -1000,   645,  -176, -1000,   422, -1000, -1000,
  572.  -1000, -1000,  1043,   430, -1000,  1028,   928, -1000, -1000,  1043,
  573.     80, -1000,   267,  1043,  1028,  1028,   610,    80,  1028,  1028,
  574.   1237,  -162,   430,   430,   430,   430,   450,   450,   430, -1000,
  575.  -1000, -1000, -1000, -1000,   641, -1000,   640, -1000,   630,   965,
  576.    965,   965, -1000, -1000,   626,  -176, -1000, -1000,  1028,  1237,
  577.  -1000,  1028, -1000,   117, -1000,   117, -1000,   117, -1000,  1110,
  578.    445,  1028,   965,   599,   624, -1000, -1000,   612, -1000,  -176,
  579.  -1000,   682,   581, -1000, -1000, -1000,   882,   245,  -103,   421,
  580.    -44,  -158, -1000,  1174, -1000,   100, -1000,   597, -1000,   220,
  581.  -1000,   498, -1000,   685,   580,   571,   684,   632, -1000, -1000,
  582.  -1000, -1000, -1000, -1000, -1000, -1000,   681,   680,   498, -1000,
  583.  -1000, -1000, -1000, -1000, -1000, -1000,  -176,   -82, -1000,  1100,
  584.  -1000, -1000,   579, -1000, -1000,   801,   965, -1000,   322,   160,
  585.  -1000,   578,   572,   445, -1000,  -176,   141, -1000, -1000,  -182,
  586.   -182,  1043,  -172, -1000, -1000,   450,   450, -1000, -1000, -1000,
  587.   1043,  1043,   219,   217,   198,   570, -1000,   414,   558,   548,
  588.    183, -1000,   950,  -143,    77,   181,   559,   498,  1028,    75,
  589.    679,   678,   677, -1000,   552,  1090,    54,   533, -1000, -1000,
  590.    -82, -1000,  1028,   176,   117,   170, -1000,  1053, -1000,    71,
  591.  -1000, -1000, -1000, -1000,  -126,  -130, -1000, -1000, -1000, -1000,
  592.  -1000, -1000, -1000, -1000, -1000,  1028, -1000,   516, -1000,   478,
  593.    546, -1000, -1000,   500, -1000, -1000, -1000, -1000,   -62,   -62,
  594.  -1000, -1000, -1000, -1000, -1000,   214, -1000,  1080,  1070,  -103,
  595.  -1000,  -103,  -103,   928, -1000, -1000, -1000, -1000,   163,   159,
  596.    157,  1237,  -143,   156,   508,  -143, -1000,   138,  1043, -1000,
  597.  -1000, -1000, -1000, -1000,  1028, -1000,   196,   529,   529, -1000,
  598.  -1000, -1000,  -103,   155,   322,   147,   143, -1000,   139,  -176,
  599.  -1000, -1000, -1000, -1000,  1237,    49,   137,   135,   128,   127,
  600.  -1000, -1000,   465, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
  601.  -1000, -1000, -1000,   296, -1000, -1000, -1000,  -176, -1000,  -158,
  602.   -160,   442,  1174,   590, -1000, -1000,  1237, -1000, -1000, -1000,
  603.    507, -1000, -1000,   493, -1000, -1000, -1000,   126, -1000, -1000,
  604.    123,   515, -1000,   104,  -176,  1237,   107,   105, -1000,   165,
  605.  -1000, -1000, -1000, -1000, -1000,  -143,  -264,   514,    97, -1000,
  606.  -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
  607.  -1000,   676,   494, -1000, -1000, -1000, -1000, -1000, -1000,   675,
  608.  -1000, -1000,   322, -1000,    88,  1237, -1000, -1000,  1237,  -143,
  609.  -1000, -1000, -1000, -1000,   480,    85,  1237, -1000, -1000 };
  610. yytabelem yypgo[]={
  611.  
  612.      0,  1118,  1117,   752,  1116,  1114,  1109,   754,  1108,  1107,
  613.    480,  1106,  1105,  1104,  1103,  1102,   748,  1101,  1099,  1097,
  614.   1095,  1094,  1092,  1091,  1090,  1087,  1085,  1084,  1082,  1081,
  615.   1080,  1079,  1078,  1077,  1076,  1074,  1072,  1070,  1069,  1060,
  616.   1057,  1056,  1054,  1051,  1049,  1048,  1047,  1046,  1045,  1044,
  617.   1043,  1042,  1041,   449,  1039,  1036,  1034,  1033,  1032,  1031,
  618.     46,    51,  1030,  1029,  1028,    59,    47,    34,    32,  1027,
  619.   1026,  1024,    20,  1021,  1019,    73,  1018,    24,    18,  1017,
  620.   1016,    14,    17,  1015,  1014,    12,    38,   146,   187,    54,
  621.   1013,    61,  1012,  1011,   150,  1009,  1006,    60,  1004,   179,
  622.   1003,    11,  1002,    56,    57,    63,  1001,  1000,    41,   999,
  623.    998,   997,    15,     1,   996,    42,   994,   987,   984,   981,
  624.    979,    52,   977,    67,   975,   972,   970,   967,    58,    64,
  625.     40,    10,     8,   963,   962,   961,    30,    33,   960,   959,
  626.     49,   958,    36,   957,   955,     6,     2,   953,    31,     9,
  627.    494,   952,   951,   949,   943,     3,   942,   938,     5,   481,
  628.    937,   933,    13,   932,   931,   105,   930,   569,   924,   921,
  629.    920,   919,    23,     4,   917,   912,    28,   902,   893,   886,
  630.    858,   857,   849,   843,   545,   842,    16,    22,    19,   836,
  631.    835,   833,    76,   823,    25,   807,   779,   776,   775,   774,
  632.    773,   768,   765,   758,   756,    62,    48,    44,    55,     0,
  633.     50,    43,    53,   753,   751,     7,    26,    21 };
  634. yytabelem yyr1[]={
  635.  
  636.      0,     1,     1,     2,     2,     3,     3,     3,     3,     4,
  637.      4,     7,     7,     7,     7,     7,     8,     8,     8,     8,
  638.      5,     5,    16,     6,     9,     9,     9,     9,     9,     9,
  639.      9,     9,     9,     9,     9,     9,     9,    10,    10,    10,
  640.     10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
  641.     10,    10,    10,    10,    10,    10,    10,    10,    10,    11,
  642.     11,    11,    11,    11,    11,    11,    59,    12,    17,    17,
  643.     13,    62,    62,    62,    62,    63,    64,    65,    65,    65,
  644.     14,    69,    69,    70,    61,    61,    71,    71,    72,    72,
  645.     15,    15,    73,    73,    22,    74,    74,    75,    76,    76,
  646.     77,    77,    77,    77,    79,    23,    80,    80,    81,    81,
  647.     82,    82,    82,    83,    84,    84,    24,    24,    24,    88,
  648.     88,    89,    90,    90,    90,    87,    87,    91,    91,    92,
  649.     92,    25,    93,    93,    94,    95,    96,    96,    97,    97,
  650.     26,    26,    26,    26,    66,    66,    66,   100,   100,   100,
  651.    100,   102,   102,   102,    67,    68,    98,    98,   104,   104,
  652.     99,    99,   105,   105,   105,   105,   106,    20,    20,   107,
  653.    109,   107,   110,   108,   111,   111,   112,   112,   103,   103,
  654.    103,    19,   114,   114,   116,   115,    27,   118,   118,    28,
  655.    119,   119,    29,    29,   120,   120,   121,   121,    21,   122,
  656.    122,   122,   125,   127,   123,   124,   124,   128,   128,   126,
  657.    126,   131,   131,   133,   133,   132,   132,   135,   135,   136,
  658.    136,   130,   138,   138,   139,   141,    30,   129,   129,   129,
  659.    129,    31,    32,    33,    33,    34,    34,    34,   147,   147,
  660.    148,   148,    35,    52,    53,   151,   150,    54,   152,   153,
  661.     54,    55,    56,    56,    57,   156,    57,   157,    57,   154,
  662.    154,   154,   155,   155,    58,    58,    36,    37,    38,   159,
  663.    159,   159,   159,   161,    41,   163,    41,   164,   160,    39,
  664.     39,    39,    39,    39,   166,    40,    40,    42,   168,   169,
  665.     42,    43,   170,   171,    43,   165,   165,   172,   172,   174,
  666.    174,   174,   175,   175,   162,   162,   176,   176,   177,   178,
  667.     47,   179,    48,   180,    49,    45,    45,   181,    46,    46,
  668.    182,   182,    44,    44,   183,   173,   173,   167,   167,   185,
  669.     18,   186,   186,   186,   187,   187,   187,   188,   188,   190,
  670.    190,   190,   190,   190,   190,   191,   189,   189,   189,   144,
  671.    193,   193,   194,   196,    50,   197,    50,   199,    50,   195,
  672.    198,   198,   198,   198,    51,    51,   200,   201,   202,   202,
  673.    203,   203,   117,   140,   204,   204,   204,   205,   205,   206,
  674.    206,   207,   207,   208,   208,   209,   209,   209,   209,   209,
  675.    210,   210,   210,   211,   211,   184,   184,   212,   212,   212,
  676.    212,   212,   212,   212,   212,   212,   215,   215,   215,   215,
  677.    149,   158,   113,    78,   137,   213,    85,    85,   217,   214,
  678.    214,   143,   143,    86,    86,    86,    86,   142,   142,   192,
  679.    216,    60,    60,   134,   134,   134,   134,   134,   134,   101,
  680.    145,   146 };
  681. yytabelem yyr2[]={
  682.  
  683.      0,     2,     0,     2,     4,     3,     3,     2,     2,     5,
  684.      3,     3,     3,     3,     3,     5,     3,     3,     3,     3,
  685.      2,     4,     4,     7,     3,     3,     3,     3,     3,     3,
  686.      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
  687.      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
  688.      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
  689.      3,     3,     3,     3,     3,     3,     1,     9,     7,    13,
  690.      2,     7,    13,     7,    13,     5,     3,     2,     2,     2,
  691.      2,     7,    13,     3,     1,     2,     3,     7,     3,     3,
  692.      5,     7,     5,     3,     6,     2,     6,     9,     3,     7,
  693.      3,     7,     3,     7,     1,     9,     6,    10,     7,     7,
  694.      3,     3,     3,     8,     4,     4,     7,     7,     9,     3,
  695.      5,     5,     7,     5,     3,     3,     5,     3,     5,     3,
  696.      3,     7,     2,     5,     5,     7,     3,     5,     3,     5,
  697.      6,     6,     6,     8,     2,     7,     2,     3,     3,     3,
  698.      3,     5,     3,     3,     3,     7,     2,     6,     3,     3,
  699.      2,     6,     3,     7,     3,     7,     3,     7,     7,     2,
  700.      1,     8,     1,    11,     2,     6,     3,     7,     6,     2,
  701.      6,    10,     2,     6,     1,     9,     6,     3,     7,     6,
  702.      3,     7,     4,     6,     2,     6,     3,     7,     6,     2,
  703.      4,     6,     1,     1,    12,     2,     6,     3,     2,     2,
  704.      6,     2,     6,     2,     3,     2,     3,     2,     6,     3,
  705.      2,    15,     6,    10,     1,     1,    13,     2,     2,     2,
  706.      2,    13,     8,    12,    14,     7,    13,    15,     2,     4,
  707.      4,     8,    21,     5,     7,     1,    11,     4,     1,     1,
  708.     16,     4,     4,     6,    11,     1,    15,     1,    13,     6,
  709.      8,     5,     7,    11,     7,     5,     4,     6,     6,     0,
  710.      2,     3,     2,     1,     6,     1,     8,     1,    11,    10,
  711.     12,    14,     6,    10,     3,     7,    11,     6,     1,     1,
  712.     14,     7,     1,     1,    15,     3,     7,     7,     3,     3,
  713.      7,     7,     7,     3,     2,     6,     3,     2,    15,     1,
  714.     12,     1,    12,     1,    12,     6,    10,     3,     6,    10,
  715.      3,     5,     6,    10,     3,     2,     2,     3,     2,     1,
  716.     13,     0,     4,     6,     2,     4,     2,     6,     2,     2,
  717.      2,     2,     2,     2,     3,     2,     2,     4,     4,     9,
  718.      3,     7,     2,     1,     6,     1,    10,     1,    12,     5,
  719.      3,     7,     7,    11,     5,     7,     9,     3,     1,     2,
  720.      3,     7,     3,     3,     2,     7,     7,     2,     7,     2,
  721.      7,     2,     5,     2,     7,     2,     5,     5,     7,     7,
  722.      2,     7,     7,     2,     7,     2,     7,     3,     2,     2,
  723.      2,     3,     3,     3,     3,     7,     3,     3,     3,     3,
  724.      3,     3,     3,     3,     9,     9,     3,     7,     3,     5,
  725.      4,     4,     4,     6,     9,     9,    11,     2,     2,     3,
  726.      3,     2,     2,     2,     4,     4,     2,     2,     2,     2,
  727.      1,     3 };
  728. yytabelem yychk[]={
  729.  
  730.  -1000,    -1,    -2,    -3,    -4,    -5,    -6,   127,   259,    -7,
  731.    -16,   311,    -8,    -9,   -10,   -11,   256,   297,   -12,   -13,
  732.    -14,   -15,   -17,   -18,   -19,   -20,   -21,   -22,   -23,   -24,
  733.    -25,   -26,   -27,   -28,   -29,   -30,   -31,   -32,   -33,   -34,
  734.    -35,   -36,   -37,   -38,   -39,   -40,   -41,   -42,   -43,   -44,
  735.    -45,   -46,   -47,   -48,   -49,   -50,   -51,   -52,   -53,   -54,
  736.    -55,   -56,   -57,   -58,   322,   -62,   -69,   -73,   301,   305,
  737.    318,  -106,   289,   290,   302,   285,   316,   -66,   -67,   -68,
  738.    303,   314,   327,  -129,   277,  -147,  -150,   287,   328,   319,
  739.   -166,   278,  -160,   321,   331,  -183,  -181,  -182,   317,   284,
  740.    312,  -195,   325,   295,   296,   300,  -154,   294,   298,   -63,
  741.    -64,   -70,   280,   281,   310,  -100,  -102,   283,  -142,  -137,
  742.   -143,  -144,   308,   307,   309,   323,   334,   326,   279,   299,
  743.    282,   291,   -65,   306,   329,   313,   324,   286,   315,   292,
  744.    293,   288,  -192,  -216,   257,   258,    -3,    -7,   -16,   265,
  745.    127,   127,   309,   291,   304,   -59,   127,   -60,   257,   258,
  746.    -60,  -185,    40,  -107,   257,  -108,   -65,   -66,   -67,   -68,
  747.   -122,  -123,  -124,  -128,  -129,  -130,    40,   -74,   -75,   -60,
  748.    -79,   -87,   -88,   -91,   -89,   -92,   -90,   -60,   -75,    47,
  749.    276,   -93,   -94,   -95,    47,   -98,  -104,   -60,   -75,   -99,
  750.     42,  -105,   -60,   -75,   -99,    44,  -118,   -60,  -119,   -60,
  751.    127,  -120,  -121,   -60,    47,    61,  -145,  -145,    40,   -60,
  752.   -145,   -10,   332,  -150,   297,   127,  -159,   260,   -60,   265,
  753.   -159,    40,  -167,  -184,    42,  -212,  -142,  -213,  -200,  -214,
  754.   -215,   265,   266,   264,  -192,  -216,  -201,   260,   261,   262,
  755.    263,  -167,    40,  -161,  -162,  -176,  -140,  -177,  -204,    40,
  756.   -205,  -206,  -207,  -208,   274,  -209,  -210,    45,    43,  -211,
  757.   -184,  -167,  -167,  -173,    40,  -140,    42,  -173,    40,  -173,
  758.     40,  -178,  -179,  -180,  -196,    40,   127,  -149,  -209,   -53,
  759.    127,  -150,    40,   127,  -142,   333,  -192,  -216,    40,   127,
  760.    -60,   -60,   -60,   289,    42,   -86,    40,   330,    40,  -164,
  761.    -60,  -145,   306,   320,    40,   -86,    40,   127,   127,   127,
  762.    -60,   127,   127,    40,    40,  -114,  -115,   -60,   127,    44,
  763.    127,    40,   127,  -123,    44,    47,    44,  -135,  -136,  -137,
  764.   -130,  -216,   127,    44,    40,   -80,    40,   127,   -88,   -91,
  765.    127,   -89,    44,   -87,   -60,    47,   127,   -94,   -96,   -97,
  766.    -60,   -60,   127,    44,   127,    44,  -103,    40,  -101,   260,
  767.     42,    42,   127,   -99,   127,    44,   127,    44,   127,    44,
  768.    -60,  -139,  -146,   260,  -146,  -148,  -145,   127,    40,    44,
  769.   -146,   127,   127,   127,  -165,  -140,  -172,   -60,  -173,   257,
  770.    258,   127,    44,   276,   -86,    40,    40,   -86,   127,    44,
  771.   -140,   127,  -163,    44,   272,   273,  -162,  -140,   271,   270,
  772.    269,  -208,    43,    45,    47,    42,  -210,  -210,   275,   127,
  773.     44,   127,    44,   127,  -165,   127,  -165,   127,  -165,    40,
  774.     40,    40,   127,    41,  -198,  -140,    42,   127,  -152,    61,
  775.     40,  -157,   127,    40,   127,    40,   127,    40,  -101,    58,
  776.   -209,  -151,    40,  -146,  -193,  -194,  -142,   -85,  -217,  -140,
  777.    127,   -61,   -71,   -72,   -60,    42,  -186,    41,    44,  -116,
  778.   -109,  -110,  -123,  -125,  -128,    44,   -75,   -76,   -77,   -78,
  779.     42,  -209,   127,    44,   -81,   -82,   -60,   -83,   -84,   127,
  780.     47,   -97,    44,    47,  -104,  -105,    42,  -113,  -209,  -103,
  781.   -103,   127,   -60,   -60,  -121,    47,  -140,   330,   127,    41,
  782.     44,  -146,  -148,    40,    44,    41,    44,    41,    61,  -162,
  783.   -212,   -85,  -202,  -209,  -203,  -140,  -162,   127,  -176,  -205,
  784.   -205,    44,  -206,  -207,  -208,  -210,  -210,  -211,  -211,  -211,
  785.   -168,  -170,    41,    41,    41,  -174,  -173,   -60,  -165,  -165,
  786.   -197,    41,    44,  -145,  -140,  -155,  -158,  -209,  -156,  -140,
  787.    -61,   -61,   -61,    41,  -209,    58,  -140,  -165,    44,    41,
  788.     44,    41,    44,    41,    44,    41,  -187,    44,  -188,  -189,
  789.   -190,    40,   267,   260,    45,    43,   265,   266,    47,   276,
  790.     58,  -191,    36,   127,  -115,    61,  -108,  -111,  -112,   268,
  791.   -126,  -131,  -132,  -133,  -134,   -60,  -101,  -215,    45,    43,
  792.    264,   265,   266,   260,  -136,   -60,    41,    44,    58,    40,
  793.     41,    44,    44,    40,   -86,   -86,    41,    41,  -141,  -142,
  794.   -149,    44,  -145,    41,  -148,  -145,   127,  -162,    44,  -172,
  795.   -173,   127,    41,    41,    44,   127,  -142,  -162,  -162,   127,
  796.    127,   127,    44,    41,    61,    41,    41,   127,  -199,  -140,
  797.     42,  -146,    41,   127,    44,  -140,    41,    41,    41,    41,
  798.     41,    41,  -209,    41,    41,  -194,  -142,  -217,   127,   -72,
  799.    127,  -187,  -188,  -186,   260,   260,  -117,  -140,    41,    44,
  800.     45,  -127,    44,    42,  -215,  -215,    61,   -77,   -78,    42,
  801.    -81,   -82,   -82,   -85,   127,   127,   127,  -149,  -146,   127,
  802.     41,  -146,   127,  -162,  -140,    61,  -169,  -171,  -175,   -60,
  803.    127,  -173,   127,   127,   127,  -145,  -153,  -158,    41,   127,
  804.    127,   127,   127,    41,    41,  -112,   268,    47,  -131,  -132,
  805.    -60,  -138,  -113,    41,    41,   127,   127,    44,   127,  -155,
  806.    127,   127,    61,  -146,   332,    44,   127,    41,    44,  -145,
  807.     41,  -173,   127,  -158,  -113,  -146,    44,   127,  -113 };
  808. yytabelem yydef[]={
  809.  
  810.      2,    -2,     1,     3,     5,     6,     7,     8,     0,    10,
  811.     20,     0,    11,    12,    13,    14,     0,     0,    16,    17,
  812.     18,    19,    24,    25,    26,    27,    28,    29,    30,    31,
  813.     32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
  814.     42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
  815.     52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
  816.     62,    63,    64,    65,    66,    70,    80,     0,     0,   329,
  817.      0,     0,     0,     0,   104,     0,     0,    77,    78,    79,
  818.      0,     0,     0,     0,   440,   440,   440,     0,   269,   269,
  819.      0,     0,   273,     0,     0,     0,     0,     0,   309,   311,
  820.    313,   353,     0,     0,     0,     0,     0,     0,     0,     0,
  821.      0,     0,     0,    93,   166,   144,   146,   154,   227,   228,
  822.    229,   230,   238,     0,     0,   284,   277,   324,   317,   320,
  823.      0,   440,     0,    76,    83,   147,   148,   149,   150,     0,
  824.    152,   153,   427,   428,   429,   430,     4,     9,    21,     0,
  825.     15,    22,     0,     0,   321,     0,    90,     0,   431,   432,
  826.      0,     0,     0,     0,     0,   169,     0,    77,    78,    79,
  827.      0,   199,     0,   205,   207,   208,     0,     0,    95,     0,
  828.      0,     0,     0,   125,   119,   127,     0,   129,   130,     0,
  829.    124,     0,   132,     0,     0,     0,   156,   158,   159,     0,
  830.      0,   160,   162,   164,     0,     0,     0,   187,     0,   190,
  831.    192,     0,   194,   196,     0,   224,     0,     0,   440,     0,
  832.      0,   243,     0,   440,     0,   266,     0,   270,   271,   272,
  833.      0,     0,     0,   327,   328,   395,   397,   398,   399,   400,
  834.    401,   402,   403,   404,    -2,   428,     0,   406,   407,   408,
  835.    409,     0,     0,     0,   275,   304,   306,   307,   373,     0,
  836.    374,   377,   379,   381,     0,   383,   385,     0,     0,   390,
  837.    393,     0,     0,     0,     0,   325,   326,     0,     0,     0,
  838.      0,     0,     0,     0,     0,     0,   364,     0,   410,   247,
  839.    251,     0,   248,   252,     0,     0,   427,   428,   257,   265,
  840.      0,     0,     0,    92,     0,   422,     0,   239,   245,     0,
  841.    359,   261,    75,   151,     0,   421,     0,    23,   253,   264,
  842.      0,    91,    68,    84,   331,     0,   182,   184,   167,   170,
  843.    168,   172,   198,   200,     0,   202,     0,     0,   217,   219,
  844.    220,     0,    94,     0,     0,     0,     0,   116,     0,   126,
  845.    117,   120,   128,   121,     0,   123,   131,   133,   134,   136,
  846.    138,     0,   140,     0,   141,     0,   155,     0,   179,   439,
  847.      0,     0,   142,     0,   186,     0,   189,     0,   193,     0,
  848.      0,     0,     0,   441,     0,     0,     0,   235,   440,     0,
  849.      0,   244,   267,   268,     0,   325,   295,     0,   298,    -2,
  850.     -2,   282,     0,     0,   420,     0,   368,   419,   285,     0,
  851.      0,   274,     0,     0,     0,     0,     0,   306,     0,     0,
  852.      0,   382,     0,     0,     0,     0,   386,   387,     0,   287,
  853.    288,   291,   292,   322,     0,   315,     0,   318,     0,     0,
  854.      0,     0,   354,   355,     0,   360,   440,   365,     0,     0,
  855.    255,     0,    71,    84,    73,    84,    81,    84,   145,     0,
  856.      0,     0,     0,   259,     0,   350,    -2,     0,   416,   418,
  857.     67,     0,    85,    86,    88,    89,     0,     0,     0,     0,
  858.      0,     0,   201,     0,   206,     0,    96,     0,    98,   100,
  859.    102,   413,   105,     0,     0,     0,   110,   111,   112,   118,
  860.    122,   137,   139,   135,   157,   161,     0,     0,   412,   163,
  861.    165,   143,   188,   191,   195,   197,   225,     0,   232,     0,
  862.    440,   240,     0,   440,   440,     0,     0,   405,     0,     0,
  863.    396,     0,     0,   383,   369,   370,     0,   276,   305,   375,
  864.    376,     0,   378,   380,    -2,   388,   389,   391,   392,   394,
  865.      0,     0,     0,     0,     0,     0,   299,     0,     0,     0,
  866.      0,   357,     0,     0,     0,     0,     0,   411,     0,     0,
  867.      0,     0,     0,   423,     0,     0,     0,     0,   260,   349,
  868.      0,   414,     0,     0,     0,     0,   332,     0,   334,     0,
  869.    336,   331,   338,   346,     0,     0,   339,   340,   341,   342,
  870.    343,   344,   345,   181,   183,     0,   171,     0,   174,   176,
  871.    203,   209,   211,     0,   215,    -2,   213,   433,     0,     0,
  872.    436,   437,   438,    -2,   218,     0,    97,     0,     0,     0,
  873.    106,     0,     0,     0,   114,   115,   178,   180,     0,     0,
  874.      0,     0,     0,     0,     0,     0,   279,     0,     0,   296,
  875.    297,   283,   415,   366,     0,   286,   397,   289,   293,   323,
  876.    316,   319,     0,     0,     0,     0,     0,   356,     0,   362,
  877.    440,   361,   249,   254,     0,     0,     0,     0,     0,     0,
  878.    425,   424,     0,   246,   278,   351,   352,   417,    69,    87,
  879.    330,   333,   335,     0,   347,   348,   185,   372,   173,     0,
  880.      0,     0,     0,     0,   434,   435,     0,    99,   101,   103,
  881.      0,   109,   108,     0,   226,   231,   233,     0,   241,   236,
  882.      0,     0,   280,     0,   371,     0,     0,     0,   301,   303,
  883.    310,   300,   312,   314,   358,     0,     0,   262,     0,   258,
  884.     72,    74,    82,   426,   337,   175,   177,   204,   210,   212,
  885.    216,     0,     0,   107,   113,   234,   237,   440,   281,     0,
  886.    290,   294,     0,   363,     0,     0,   256,   221,     0,     0,
  887.    308,   302,   250,   263,   222,     0,     0,   242,   223 };
  888. typedef struct { char *t_name; int t_val; } yytoktype;
  889. #ifndef YYDEBUG
  890. #    define YYDEBUG    0    /* don't allow debugging */
  891. #endif
  892.  
  893.  
  894. /* @(#)27       1.7.1.1  com/cmd/lang/yacc/yaccpar,
  895.  cmdlang, bos320, 9209320f 2/19/92 16:36:02 */
  896. /*
  897.  * COMPONENT_NAME: (CMDLANG) Language Utilities
  898.  *
  899.  * FUNCTIONS: yyparse
  900.  * ORIGINS: 03
  901.  */
  902. /*
  903. ** Skeleton parser driver for yacc output
  904. */
  905.  
  906. /*
  907. ** yacc user known macros and defines
  908. */
  909. #ifdef YYSPLIT
  910. #   define YYERROR      return(-2)
  911. #else
  912. #   define YYERROR      goto yyerrlab
  913. #endif
  914. #ifdef YACC_MSG
  915. #ifndef _XOPEN_SOURCE
  916. #define _XOPEN_SOURCE
  917. #endif
  918. #include <nl_types.h>
  919. nl_catd catd;
  920. #endif
  921. #define YYACCEPT        return(0)
  922. #define YYABORT         return(1)
  923. #ifndef YACC_MSG
  924. #define YYBACKUP( newtoken, newvalue )\
  925. {\
  926.     if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\
  927.     {\
  928.         yyerror( "syntax error - cannot backup" );\
  929.         YYERROR;\
  930.     }\
  931.     yychar = newtoken;\
  932.     yystate = *yyps;\
  933.     yylval = newvalue;\
  934.     goto yynewstate;\
  935. }
  936. #else
  937. #define YYBACKUP( newtoken, newvalue )\
  938. {\
  939.     if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\
  940.     {\
  941.         catd=catopen("yacc_user.cat",0);\
  942.         yyerror(catgets(catd,1,1,"syntax error - cannot backup" ));\
  943.         YYERROR;\
  944.     }\
  945.     yychar = newtoken;\
  946.     yystate = *yyps;\
  947.     yylval = newvalue;\
  948.     goto yynewstate;\
  949. }
  950. #endif
  951. #define YYRECOVERING()  (!!yyerrflag)
  952. #ifndef YYDEBUG
  953. #       define YYDEBUG  1       /* make debugging available */
  954. #endif
  955.  
  956. /*
  957. ** user known globals
  958. */
  959. int yydebug;                    /* set to 1 to get debugging */
  960.  
  961. /*
  962. ** driver internal defines
  963. */
  964. #define YYFLAG          (-1000)
  965.  
  966. #ifdef YYSPLIT
  967. #   define YYSCODE { \
  968.             extern int (*_yyf[])(); \
  969.             register int yyret; \
  970.             if (_yyf[yytmp]) \
  971.                 if ((yyret=(*_yyf[yytmp])()) == -2) \
  972.                     goto yyerrlab; \
  973.                 else if (yyret>=0) return(yyret); \
  974.            }
  975. #endif
  976.  
  977. /*
  978. ** global variables used by the parser
  979. */
  980. YYSTYPE yyv[ YYMAXDEPTH ];      /* value stack */
  981. int yys[ YYMAXDEPTH ];          /* state stack */
  982.  
  983. YYSTYPE *yypv;                  /* top of value stack */
  984. YYSTYPE *yypvt;                 /* top of value stack for $vars */
  985. int *yyps;                      /* top of state stack */
  986.  
  987. int yystate;                    /* current state */
  988. int yytmp;                      /* extra var (lasts between blocks) */
  989.  
  990. int yynerrs;                    /* number of errors */
  991. int yyerrflag;                  /* error recovery flag */
  992. int yychar;                     /* current input token number */
  993.  
  994. #ifdef __cplusplus
  995.  #ifdef _CPP_IOSTREAMS
  996.   #include <iostream.h>
  997.   extern void yyerror (char *);
  998. /* error message routine -- iostream version */
  999.  #else
  1000.   #include <stdio.h>
  1001.   extern "C" void yyerror (char *);
  1002. /* error message routine -- stdio version */
  1003.  #endif /* _CPP_IOSTREAMS */
  1004.  extern "C" int yylex(void);        /* return the next token */
  1005. #endif /* __cplusplus */
  1006.  
  1007.  
  1008. /*
  1009. ** yyparse - return 0 if worked, 1 if syntax error not recovered from
  1010. */
  1011. #ifdef __cplusplus
  1012. extern "C"
  1013. #endif /* __cplusplus */
  1014. int
  1015. yyparse()
  1016. {
  1017.     /*
  1018.     ** Initialize externals - yyparse may be called more than once
  1019.     */
  1020.     yypv = &yyv[-1];
  1021.     yyps = &yys[-1];
  1022.     yystate = 0;
  1023.     yytmp = 0;
  1024.     yynerrs = 0;
  1025.     yyerrflag = 0;
  1026.     yychar = -1;
  1027. #ifdef YACC_MSG
  1028.     catd=catopen("yacc_user.cat",0);
  1029. #endif
  1030.     goto yystack;
  1031.     {
  1032.         register YYSTYPE *yy_pv;        /* top of value stack */
  1033.         register int *yy_ps;            /* top of state stack */
  1034.         register int yy_state;          /* current state */
  1035.         register int  yy_n;             /* internal state number info */
  1036.  
  1037.         /*
  1038.         ** get globals into registers.
  1039.         ** branch to here only if YYBACKUP was called.
  1040.         */
  1041.     yynewstate:
  1042.         yy_pv = yypv;
  1043.         yy_ps = yyps;
  1044.         yy_state = yystate;
  1045.         goto yy_newstate;
  1046.  
  1047.         /*
  1048.         ** get globals into registers.
  1049.         ** either we just started, or we just finished a reduction
  1050.         */
  1051.     yystack:
  1052.         yy_pv = yypv;
  1053.         yy_ps = yyps;
  1054.         yy_state = yystate;
  1055.  
  1056.         /*
  1057.         ** top of for (;;) loop while no reductions done
  1058.         */
  1059.     yy_stack:
  1060.         /*
  1061.         ** put a state and value onto the stacks
  1062.         */
  1063.         if ( ++yy_ps >= &yys[ YYMAXDEPTH ] )    /* room on stack? */
  1064.         {
  1065. #ifndef YACC_MSG
  1066.             yyerror( "yacc stack overflow" );
  1067. #else
  1068.             yyerror(catgets(catd,1,2,"yacc stack overflow" ));
  1069. #endif
  1070.             YYABORT;
  1071.         }
  1072.         *yy_ps = yy_state;
  1073.         *++yy_pv = yyval;
  1074.  
  1075.         /*
  1076.         ** we have a new state - find out what to do
  1077.         */
  1078.     yy_newstate:
  1079.         if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG )
  1080.             goto yydefault;         /* simple state */
  1081.         if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
  1082.             yychar = 0;             /* reached EOF */
  1083.         if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) )
  1084.             goto yydefault;
  1085.         if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar )  /*valid shift*/
  1086.         {
  1087.             yychar = -1;
  1088.             yyval = yylval;
  1089.             yy_state = yy_n;
  1090.             if ( yyerrflag > 0 )
  1091.                 yyerrflag--;
  1092.             goto yy_stack;
  1093.         }
  1094.  
  1095.     yydefault:
  1096.         if ( ( yy_n = yydef[ yy_state ] ) == -2 )
  1097.         {
  1098.             if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
  1099.                 yychar = 0;             /* reached EOF */
  1100.             /*
  1101.             ** look through exception table
  1102.             */
  1103.             {
  1104.                 register int *yyxi = yyexca;
  1105.  
  1106.                 while ( ( *yyxi != -1 ) ||
  1107.                     ( yyxi[1] != yy_state ) )
  1108.                 {
  1109.                     yyxi += 2;
  1110.                 }
  1111.                 while ( ( *(yyxi += 2) >= 0 ) &&
  1112.                     ( *yyxi != yychar ) )
  1113.                     ;
  1114.                 if ( ( yy_n = yyxi[1] ) < 0 )
  1115.                     YYACCEPT;
  1116.             }
  1117.         }
  1118.  
  1119.         /*
  1120.         ** check for syntax error
  1121.         */
  1122.         if ( yy_n == 0 )        /* have an error */
  1123.         {
  1124.             /* no worry about speed here! */
  1125.             switch ( yyerrflag )
  1126.             {
  1127.             case 0:         /* new error */
  1128. #ifndef YACC_MSG
  1129.                 yyerror( "syntax error" );
  1130. #else
  1131.                 yyerror(catgets(catd,1,3,"syntax error" ));
  1132. #endif
  1133.                 goto skip_init;
  1134.             yyerrlab:
  1135.                 /*
  1136.                 ** get globals into registers.
  1137.                 ** we have a user generated syntax type error
  1138.                 */
  1139.                 yy_pv = yypv;
  1140.                 yy_ps = yyps;
  1141.                 yy_state = yystate;
  1142.                 yynerrs++;
  1143.             skip_init:
  1144.             case 1:
  1145.             case 2:         /* incompletely recovered error */
  1146.                     /* try again... */
  1147.                 yyerrflag = 3;
  1148.                 /*
  1149.                 ** find state where "error" is a legal
  1150.                 ** shift action
  1151.                 */
  1152.                 while ( yy_ps >= yys )
  1153.                 {
  1154.                     yy_n = yypact[ *yy_ps ] + YYERRCODE;
  1155.                     if ( yy_n >= 0 && yy_n < YYLAST &&
  1156.                         yychk[yyact[yy_n]] == YYERRCODE)                                        {
  1157.                         /*
  1158.                         ** simulate shift of "error"
  1159.                         */
  1160.                         yy_state = yyact[ yy_n ];
  1161.                         goto yy_stack;
  1162.                     }
  1163.                     /*
  1164.                     ** current state has no shift on
  1165.                     ** "error", pop stack
  1166.                     */
  1167.                     yy_ps--;
  1168.                     yy_pv--;
  1169.                 }
  1170.                 /*
  1171.                 ** there is no state on stack with "error" as
  1172.                 ** a valid shift.  give up.
  1173.                 */
  1174.                 YYABORT;
  1175.             case 3:         /* no shift yet; eat a token */
  1176.                 if ( yychar == 0 )      /* reached EOF. quit */
  1177.                     YYABORT;
  1178.                 yychar = -1;
  1179.                 goto yy_newstate;
  1180.             }
  1181.         }/* end if ( yy_n == 0 ) */
  1182.         /*
  1183.         ** reduction by production yy_n
  1184.         ** put stack tops, etc. so things right after switch
  1185.         */
  1186.         yytmp = yy_n;                   /* value to switch over */
  1187.         yypvt = yy_pv;                  /* $vars top of value stack */
  1188.         /*
  1189.         ** Look in goto table for next state
  1190.         ** Sorry about using yy_state here as temporary
  1191.         ** register variable, but why not, if it works...
  1192.         ** If yyr2[ yy_n ] doesn't have the low order bit
  1193.         ** set, then there is no action to be done for
  1194.         ** this reduction.  So, no saving & unsaving of
  1195.         ** registers done.  The only difference between the
  1196.         ** code just after the if and the body of the if is
  1197.         ** the goto yy_stack in the body.  This way the test
  1198.         ** can be made before the choice of what to do is needed.
  1199.         */
  1200.         {
  1201.             /* length of production doubled with extra bit */
  1202.             register int yy_len = yyr2[ yy_n ];
  1203.  
  1204.             if ( !( yy_len & 01 ) )
  1205.             {
  1206.                 yy_len >>= 1;
  1207.                 yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
  1208.                 yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
  1209.                     *( yy_ps -= yy_len ) + 1;
  1210.                 if ( yy_state >= YYLAST ||
  1211.                     yychk[ yy_state =
  1212.                     yyact[ yy_state ] ] != -yy_n )
  1213.                 {
  1214.                     yy_state = yyact[ yypgo[ yy_n ] ];
  1215.                 }
  1216.                 goto yy_stack;
  1217.             }
  1218.             yy_len >>= 1;
  1219.             yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
  1220.             yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
  1221.                 *( yy_ps -= yy_len ) + 1;
  1222.             if ( yy_state >= YYLAST ||
  1223.                 yychk[ yy_state = yyact[ yy_state ] ] != -yy_n )
  1224.             {
  1225.                 yy_state = yyact[ yypgo[ yy_n ] ];
  1226.             }
  1227.         }
  1228.                     /* save until reenter driver code */
  1229.         yystate = yy_state;
  1230.         yyps = yy_ps;
  1231.         yypv = yy_pv;
  1232.     }
  1233.     /*
  1234.     ** code supplied by user is placed in this switch
  1235.     */
  1236.  
  1237.         switch(yytmp){
  1238.  
  1239. case 5:
  1240. # line 216 "fortran.y"
  1241. {
  1242.                 /* Create id token for prog if unnamed. */
  1243.               if(current_module_hash == -1) {
  1244.                 implied_id_token(&(yypvt[-0]),unnamed_prog);
  1245.                 def_function(
  1246.                 type_PROGRAM,&(yypvt[-0]),(Token*)NULL);
  1247.                 current_module_hash =
  1248.                   def_curr_module(&(yypvt[-0]));
  1249.                 current_module_type = type_PROGRAM;
  1250.               }
  1251.               prev_stmt_class = curr_stmt_class;
  1252.               integer_context = FALSE;
  1253.             } /*NOTREACHED*/ break;
  1254. case 6:
  1255. # line 230 "fortran.y"
  1256. {
  1257.               if(current_module_hash == -1) {
  1258.                 implied_id_token(&(yypvt[-0]),unnamed_prog);
  1259.                 def_function(
  1260.                 type_PROGRAM,&(yypvt[-0]),(Token*)NULL);
  1261.                 current_module_hash =
  1262.                   def_curr_module(&(yypvt[-0]));
  1263.                 current_module_type = type_PROGRAM;
  1264.               }
  1265.               if(prev_stmt_class != tok_RETURN)
  1266.                 do_RETURN(current_module_hash,&(yypvt[-0]));
  1267.               END_processing(&(yyval));
  1268.               goto_flag = prev_goto = FALSE;
  1269.               prev_stmt_class = curr_stmt_class;
  1270.             } /*NOTREACHED*/ break;
  1271. case 9:
  1272. # line 255 "fortran.y"
  1273. {
  1274. #ifdef CHECK_LABELS
  1275.               def_label(&(yypvt[-1]));
  1276. #endif
  1277.               if(executable_stmt)
  1278.                 prev_goto = goto_flag;
  1279.             } /*NOTREACHED*/ break;
  1280. case 10:
  1281. # line 263 "fortran.y"
  1282. {
  1283.               if(executable_stmt) {
  1284.                 if(prev_goto)
  1285.                 syntax_error(yypvt[-0].line_num, NO_COL_NUM,
  1286.                     "No path to this statement");
  1287.                 prev_goto = goto_flag;
  1288.               }
  1289.             } /*NOTREACHED*/ break;
  1290. case 11:
  1291. # line 274 "fortran.y"
  1292. {
  1293.                 exec_stmt_count = 0;
  1294.                 executable_stmt = FALSE;
  1295.             } /*NOTREACHED*/ break;
  1296. case 12:
  1297. # line 279 "fortran.y"
  1298. {
  1299.                 executable_stmt = FALSE;
  1300.             } /*NOTREACHED*/ break;
  1301. case 13:
  1302. # line 283 "fortran.y"
  1303. {    /* handle statement functions correctly */
  1304.               if(is_true(STMT_FUNCTION_EXPR, yypvt[-0].subclass)
  1305.                      && stmt_sequence_no <= seq_stmt_fun) {
  1306.                 stmt_sequence_no = seq_stmt_fun;
  1307.                 executable_stmt = FALSE;
  1308.               }
  1309.               else {
  1310.                 stmt_sequence_no = seq_exec;
  1311.                 ++exec_stmt_count;
  1312.                 executable_stmt = TRUE;
  1313.               }
  1314.             } /*NOTREACHED*/ break;
  1315. case 14:
  1316. # line 296 "fortran.y"
  1317. {
  1318.                 stmt_sequence_no = seq_exec;
  1319.                 ++exec_stmt_count;
  1320.                 executable_stmt = TRUE;
  1321.             } /*NOTREACHED*/ break;
  1322. case 15:
  1323. # line 302 "fortran.y"
  1324. {
  1325.                 executable_stmt = TRUE;
  1326.                 if(stmt_sequence_no == 0)
  1327.                   stmt_sequence_no = seq_header;
  1328.                 complex_const_allowed = FALSE; /* turn off flags */
  1329.                 inside_format=FALSE;
  1330.                 integer_context = FALSE;
  1331.                 yyval.line_num = prev_stmt_line_num; /* best guess */
  1332.                 yyerrok; /* (error message already given) */
  1333.             } /*NOTREACHED*/ break;
  1334. case 16:
  1335. # line 315 "fortran.y"
  1336. {
  1337.                 current_module_type = type_PROGRAM;
  1338.             } /*NOTREACHED*/ break;
  1339. case 17:
  1340. # line 319 "fortran.y"
  1341. {
  1342.                 current_module_type = type_SUBROUTINE;
  1343.             } /*NOTREACHED*/ break;
  1344. case 18:
  1345. # line 323 "fortran.y"
  1346. {
  1347.                 current_module_type = type_SUBROUTINE;
  1348.             } /*NOTREACHED*/ break;
  1349. case 19:
  1350. # line 327 "fortran.y"
  1351. {
  1352.                 current_module_type = type_BLOCK_DATA;
  1353.             } /*NOTREACHED*/ break;
  1354. case 23:
  1355. # line 340 "fortran.y"
  1356. {
  1357. #ifdef ALLOW_INCLUDE
  1358.               if(f77_standard) {
  1359.                   nonstandard(yypvt[-2].line_num,yypvt[-2].col_num);
  1360.               }
  1361.                open_include_file(yypvt[-1].value.string);
  1362. #else
  1363.               syntax_error(yypvt[-2].line_num,yypvt[-2].col_num,
  1364.                 "statement not permitted");
  1365. #endif
  1366.              } /*NOTREACHED*/ break;
  1367. case 24:
  1368. # line 360 "fortran.y"
  1369. {
  1370.                  if(stmt_sequence_no < seq_implicit) {
  1371.                    stmt_sequence_no = seq_implicit;
  1372.                  }
  1373.                  goto_flag = prev_goto = FALSE;
  1374.             } /*NOTREACHED*/ break;
  1375. case 25:
  1376. # line 367 "fortran.y"
  1377. {
  1378.                  if(stmt_sequence_no < seq_implicit) {
  1379.                 stmt_sequence_no = seq_implicit;
  1380.                  }
  1381.             } /*NOTREACHED*/ break;
  1382. case 26:
  1383. # line 373 "fortran.y"
  1384. {
  1385.                  if(stmt_sequence_no > seq_specif) {
  1386.                    syntax_error(yypvt[-0].line_num, NO_COL_NUM,
  1387.                     "Statement out of order.");
  1388.                  }
  1389.                  else {
  1390.                 if(stmt_sequence_no < seq_implicit) {
  1391.                    stmt_sequence_no = seq_implicit;
  1392.                 }
  1393.                  }
  1394.             } /*NOTREACHED*/ break;
  1395. case 27:
  1396. # line 385 "fortran.y"
  1397. {
  1398.                  if(stmt_sequence_no > seq_implicit) {
  1399.                  syntax_error(yypvt[-0].line_num, NO_COL_NUM,
  1400.                     "Statement out of order.");
  1401.                  }
  1402.                  else {
  1403.                     stmt_sequence_no = seq_implicit;
  1404.                  }
  1405.             } /*NOTREACHED*/ break;
  1406. case 28:
  1407. # line 395 "fortran.y"
  1408. {
  1409.                  if(stmt_sequence_no < seq_stmt_fun) {
  1410.                 stmt_sequence_no = seq_stmt_fun;
  1411.                   }
  1412.             } /*NOTREACHED*/ break;
  1413. case 29:
  1414. # line 401 "fortran.y"
  1415. {
  1416.                 if(stmt_sequence_no > seq_specif) {
  1417.                 syntax_error(yypvt[-0].line_num, NO_COL_NUM,
  1418.                     "Statement out of order.");
  1419.                 }
  1420.                 else {
  1421.                 stmt_sequence_no = seq_specif;
  1422.                 }
  1423.             } /*NOTREACHED*/ break;
  1424. case 30:
  1425. # line 411 "fortran.y"
  1426. {
  1427.                 if(stmt_sequence_no > seq_specif) {
  1428.                 syntax_error(yypvt[-0].line_num, NO_COL_NUM,
  1429.                     "Statement out of order.");
  1430.                 }
  1431.                 else {
  1432.                 stmt_sequence_no = seq_specif;
  1433.                 }
  1434.             } /*NOTREACHED*/ break;
  1435. case 31:
  1436. # line 421 "fortran.y"
  1437. {
  1438.                 if(stmt_sequence_no > seq_specif) {
  1439.                 syntax_error(yypvt[-0].line_num, NO_COL_NUM,
  1440.                     "Statement out of order.");
  1441.                 }
  1442.                 else {
  1443.                 stmt_sequence_no = seq_specif;
  1444.                 }
  1445.             } /*NOTREACHED*/ break;
  1446. case 32:
  1447. # line 431 "fortran.y"
  1448. {
  1449.                 if(stmt_sequence_no > seq_specif) {
  1450.                 syntax_error(yypvt[-0].line_num, NO_COL_NUM,
  1451.                     "Statement out of order.");
  1452.                 }
  1453.                 else {
  1454.                 stmt_sequence_no = seq_specif;
  1455.                 }
  1456.             } /*NOTREACHED*/ break;
  1457. case 33:
  1458. # line 441 "fortran.y"
  1459. {
  1460.                 if(stmt_sequence_no > seq_specif) {
  1461.                 syntax_error(yypvt[-0].line_num, NO_COL_NUM,
  1462.                     "Statement out of order.");
  1463.                 }
  1464.                 else {
  1465.                 stmt_sequence_no = seq_specif;
  1466.                 }
  1467.             } /*NOTREACHED*/ break;
  1468. case 34:
  1469. # line 451 "fortran.y"
  1470. {
  1471.                 if(stmt_sequence_no > seq_specif) {
  1472.                 syntax_error(yypvt[-0].line_num, NO_COL_NUM,
  1473.                     "Statement out of order.");
  1474.                 }
  1475.                 else {
  1476.                 stmt_sequence_no = seq_specif;
  1477.                 }
  1478.             } /*NOTREACHED*/ break;
  1479. case 35:
  1480. # line 461 "fortran.y"
  1481. {
  1482.                 if(stmt_sequence_no > seq_specif) {
  1483.                 syntax_error(yypvt[-0].line_num, NO_COL_NUM,
  1484.                     "Statement out of order.");
  1485.                 }
  1486.                 else {
  1487.                 stmt_sequence_no = seq_specif;
  1488.                 }
  1489.             } /*NOTREACHED*/ break;
  1490. case 36:
  1491. # line 471 "fortran.y"
  1492. {
  1493.                 if(stmt_sequence_no > seq_specif) {
  1494.                 syntax_error(yypvt[-0].line_num, NO_COL_NUM,
  1495.                     "Statement out of order.");
  1496.                 }
  1497.                 else {
  1498.                 stmt_sequence_no = seq_specif;
  1499.                 }
  1500.             } /*NOTREACHED*/ break;
  1501. case 37:
  1502. # line 486 "fortran.y"
  1503. {
  1504.                 goto_flag=FALSE;
  1505.             } /*NOTREACHED*/ break;
  1506. case 38:
  1507. # line 490 "fortran.y"
  1508. {
  1509.                 goto_flag=FALSE;
  1510.             } /*NOTREACHED*/ break;
  1511. case 39:
  1512. # line 494 "fortran.y"
  1513. {
  1514.                 goto_flag=TRUE;
  1515.             } /*NOTREACHED*/ break;
  1516. case 40:
  1517. # line 498 "fortran.y"
  1518. {
  1519.                 goto_flag=FALSE;    /* fallthru allowed */
  1520.             } /*NOTREACHED*/ break;
  1521. case 41:
  1522. # line 502 "fortran.y"
  1523. {
  1524.                 goto_flag=TRUE;
  1525.             } /*NOTREACHED*/ break;
  1526. case 42:
  1527. # line 506 "fortran.y"
  1528. {
  1529.                 goto_flag=TRUE;
  1530.             } /*NOTREACHED*/ break;
  1531. case 43:
  1532. # line 510 "fortran.y"
  1533. {
  1534.                 goto_flag=FALSE;
  1535.             } /*NOTREACHED*/ break;
  1536. case 44:
  1537. # line 514 "fortran.y"
  1538. {
  1539.                 goto_flag=TRUE;
  1540.             } /*NOTREACHED*/ break;
  1541. case 45:
  1542. # line 518 "fortran.y"
  1543. {
  1544.                 goto_flag=FALSE;
  1545.             } /*NOTREACHED*/ break;
  1546. case 46:
  1547. # line 522 "fortran.y"
  1548. {
  1549.                 goto_flag=FALSE;
  1550.             } /*NOTREACHED*/ break;
  1551. case 47:
  1552. # line 526 "fortran.y"
  1553. {
  1554.                 goto_flag=FALSE;
  1555.             } /*NOTREACHED*/ break;
  1556. case 48:
  1557. # line 530 "fortran.y"
  1558. {
  1559.                 goto_flag=FALSE;
  1560.             } /*NOTREACHED*/ break;
  1561. case 49:
  1562. # line 534 "fortran.y"
  1563. {
  1564.                 goto_flag=FALSE;
  1565.             } /*NOTREACHED*/ break;
  1566. case 50:
  1567. # line 538 "fortran.y"
  1568. {
  1569.                 goto_flag=FALSE;
  1570.             } /*NOTREACHED*/ break;
  1571. case 51:
  1572. # line 542 "fortran.y"
  1573. {
  1574.                 goto_flag=FALSE;
  1575.             } /*NOTREACHED*/ break;
  1576. case 52:
  1577. # line 546 "fortran.y"
  1578. {
  1579.                 goto_flag=FALSE;
  1580.             } /*NOTREACHED*/ break;
  1581. case 53:
  1582. # line 550 "fortran.y"
  1583. {
  1584.                 goto_flag=FALSE;
  1585.             } /*NOTREACHED*/ break;
  1586. case 54:
  1587. # line 554 "fortran.y"
  1588. {
  1589.                 goto_flag=FALSE;
  1590.             } /*NOTREACHED*/ break;
  1591. case 55:
  1592. # line 558 "fortran.y"
  1593. {
  1594.                 goto_flag=FALSE;
  1595.             } /*NOTREACHED*/ break;
  1596. case 56:
  1597. # line 562 "fortran.y"
  1598. {
  1599.                 goto_flag=FALSE;
  1600.             } /*NOTREACHED*/ break;
  1601. case 57:
  1602. # line 566 "fortran.y"
  1603. {
  1604.                 goto_flag=FALSE;
  1605.             } /*NOTREACHED*/ break;
  1606. case 58:
  1607. # line 570 "fortran.y"
  1608. {
  1609.                 goto_flag=TRUE;
  1610.             } /*NOTREACHED*/ break;
  1611. case 59:
  1612. # line 577 "fortran.y"
  1613. {
  1614.                 goto_flag=FALSE;
  1615.             } /*NOTREACHED*/ break;
  1616. case 60:
  1617. # line 581 "fortran.y"
  1618. {
  1619.                 goto_flag=FALSE;
  1620.             } /*NOTREACHED*/ break;
  1621. case 61:
  1622. # line 585 "fortran.y"
  1623. {
  1624.                 prev_goto = goto_flag =FALSE;
  1625.             } /*NOTREACHED*/ break;
  1626. case 62:
  1627. # line 589 "fortran.y"
  1628. {
  1629.                 prev_goto = goto_flag =FALSE;
  1630.             } /*NOTREACHED*/ break;
  1631. case 63:
  1632. # line 593 "fortran.y"
  1633. {
  1634.                 prev_goto = goto_flag =FALSE;
  1635.             } /*NOTREACHED*/ break;
  1636. case 64:
  1637. # line 597 "fortran.y"
  1638. {
  1639.                 goto_flag=FALSE;
  1640.             } /*NOTREACHED*/ break;
  1641. case 65:
  1642. # line 601 "fortran.y"
  1643. {
  1644.                 goto_flag=FALSE;
  1645.             } /*NOTREACHED*/ break;
  1646. case 66:
  1647. # line 607 "fortran.y"
  1648. {check_seq_header(&(yypvt[-0]));} /*NOTREACHED*/ break;
  1649. case 67:
  1650. # line 609 "fortran.y"
  1651. {
  1652.                  def_function(
  1653.                 type_PROGRAM,&(yypvt[-1]),(Token*)NULL);
  1654.                  current_module_hash =
  1655.                    def_curr_module(&(yypvt[-1]));
  1656.             } /*NOTREACHED*/ break;
  1657. case 68:
  1658. # line 622 "fortran.y"
  1659. {
  1660.               do_ENTRY(&(yypvt[-1]),(Token*)NULL
  1661.                    ,current_module_hash);
  1662.             } /*NOTREACHED*/ break;
  1663. case 69:
  1664. # line 627 "fortran.y"
  1665. {
  1666.               do_ENTRY(&(yypvt[-4]),&(yypvt[-2])
  1667.                    ,current_module_hash);
  1668.                  if(debug_parser)
  1669.                 print_exprlist("entry stmt",&(yypvt[-2]));
  1670.             } /*NOTREACHED*/ break;
  1671. case 71:
  1672. # line 641 "fortran.y"
  1673. {
  1674.                  if(f77_standard) {
  1675.                 nonstandard(yypvt[-1].line_num,
  1676.                   yypvt[-1].col_num+strlen(token_name(yypvt[-1])));
  1677.                 msg_tail(": parentheses required");
  1678.                  }
  1679.              def_function(
  1680.                 current_datatype,&(yypvt[-1]),(Token*)NULL);
  1681.              current_module_hash=
  1682.                def_curr_module(&(yypvt[-1]));
  1683.             } /*NOTREACHED*/ break;
  1684. case 72:
  1685. # line 654 "fortran.y"
  1686. {
  1687.              def_function(
  1688.                 current_datatype,&(yypvt[-4]),&(yypvt[-2]));
  1689.              current_module_hash=
  1690.                def_curr_module(&(yypvt[-4]));
  1691.              if(debug_parser)
  1692.                print_exprlist("function stmt",&(yypvt[-2]));
  1693.             } /*NOTREACHED*/ break;
  1694. case 73:
  1695. # line 663 "fortran.y"
  1696. {
  1697.                  if(f77_standard) {
  1698.                 nonstandard(yypvt[-1].line_num,
  1699.                   yypvt[-1].col_num+strlen(token_name(yypvt[-1])));
  1700.                 msg_tail(": parentheses required");
  1701.                  }
  1702.              def_function(
  1703.                 type_UNDECL,&(yypvt[-1]),(Token*)NULL);
  1704.              current_module_hash=
  1705.                def_curr_module(&(yypvt[-1]));
  1706.             } /*NOTREACHED*/ break;
  1707. case 74:
  1708. # line 676 "fortran.y"
  1709. {
  1710.              def_function(
  1711.                 type_UNDECL,&(yypvt[-4]),&(yypvt[-2]));
  1712.              current_module_hash=
  1713.                def_curr_module(&(yypvt[-4]));
  1714.              if(debug_parser)
  1715.                print_exprlist("function stmt",&(yypvt[-2]));
  1716.             } /*NOTREACHED*/ break;
  1717. case 75:
  1718. # line 688 "fortran.y"
  1719. {
  1720.               check_seq_header(&(yypvt[-0]));
  1721.             } /*NOTREACHED*/ break;
  1722. case 76:
  1723. # line 695 "fortran.y"
  1724. {
  1725.               check_seq_header(&(yypvt[-0]));
  1726.             } /*NOTREACHED*/ break;
  1727. case 81:
  1728. # line 714 "fortran.y"
  1729. {
  1730.               def_function(
  1731.                  type_SUBROUTINE,&(yypvt[-1]),(Token*)NULL);
  1732.               current_module_hash=
  1733.                 def_curr_module(&(yypvt[-1]));
  1734.             } /*NOTREACHED*/ break;
  1735. case 82:
  1736. # line 722 "fortran.y"
  1737. {
  1738.               def_function(
  1739.                  type_SUBROUTINE,&(yypvt[-4]),&(yypvt[-2]));
  1740.               current_module_hash=
  1741.                 def_curr_module(&(yypvt[-4]));
  1742.               if(debug_parser)
  1743.                 print_exprlist("subroutine stmt",&(yypvt[-2]));
  1744.             } /*NOTREACHED*/ break;
  1745. case 83:
  1746. # line 733 "fortran.y"
  1747. {
  1748.               check_seq_header(&(yypvt[-0]));
  1749.             } /*NOTREACHED*/ break;
  1750. case 84:
  1751. # line 739 "fortran.y"
  1752. {
  1753.                 yyval.next_token = (Token*)NULL;
  1754.             } /*NOTREACHED*/ break;
  1755. case 86:
  1756. # line 746 "fortran.y"
  1757. {
  1758.                 yyval.next_token = append_token((Token*)NULL,&(yypvt[-0]));
  1759.             } /*NOTREACHED*/ break;
  1760. case 87:
  1761. # line 750 "fortran.y"
  1762. {
  1763.                 yyval.next_token = append_token(yypvt[-2].next_token,&(yypvt[-0]));
  1764.             } /*NOTREACHED*/ break;
  1765. case 88:
  1766. # line 756 "fortran.y"
  1767. {
  1768.                  def_arg_name(&(yypvt[-0]));
  1769.                  primary_id_expr(&(yypvt[-0]),&(yyval));
  1770.             } /*NOTREACHED*/ break;
  1771. case 89:
  1772. # line 761 "fortran.y"
  1773. {
  1774.                  yyval.class = type_byte(class_LABEL,type_LABEL);
  1775.                  yyval.subclass = 0;
  1776.             } /*NOTREACHED*/ break;
  1777. case 90:
  1778. # line 771 "fortran.y"
  1779. {
  1780.                   /* form name %DATnn */
  1781.               ++block_data_number;
  1782.               sprintf(unnamed_block_data+4,"%02d"
  1783.                   ,block_data_number%100);
  1784.               implied_id_token(&(yyval),unnamed_block_data);
  1785.  
  1786.               def_function(
  1787.                  type_BLOCK_DATA,&(yyval),(Token*)NULL);
  1788.               current_module_hash=
  1789.                 def_curr_module(&(yyval));
  1790.             } /*NOTREACHED*/ break;
  1791. case 91:
  1792. # line 784 "fortran.y"
  1793. {
  1794.               def_function(
  1795.                  type_BLOCK_DATA,&(yypvt[-1]),(Token*)NULL);
  1796.               current_module_hash=
  1797.                 def_curr_module(&(yypvt[-1]));
  1798.             } /*NOTREACHED*/ break;
  1799. case 92:
  1800. # line 793 "fortran.y"
  1801. {
  1802.               check_seq_header(&(yypvt[-0]));
  1803.             } /*NOTREACHED*/ break;
  1804. case 93:
  1805. # line 797 "fortran.y"
  1806. {
  1807.               check_seq_header(&(yypvt[-0]));
  1808.             } /*NOTREACHED*/ break;
  1809. case 97:
  1810. # line 812 "fortran.y"
  1811. {
  1812.                  def_array_dim(&(yypvt[-3]),&(yypvt[-1]));
  1813.             } /*NOTREACHED*/ break;
  1814. case 98:
  1815. # line 819 "fortran.y"
  1816. {
  1817.                  yyval.class = 1;
  1818.                  yyval.subclass = yypvt[-0].subclass;
  1819.             } /*NOTREACHED*/ break;
  1820. case 99:
  1821. # line 824 "fortran.y"
  1822. {
  1823.                  yyval.class = yypvt[-2].class + 1; /* one more dimension */
  1824.                  yyval.subclass = yypvt[-2].subclass * yypvt[-0].subclass;
  1825.             } /*NOTREACHED*/ break;
  1826. case 100:
  1827. # line 831 "fortran.y"
  1828. {
  1829.                   yyval.subclass = yypvt[-0].value.integer;
  1830.             } /*NOTREACHED*/ break;
  1831. case 101:
  1832. # line 835 "fortran.y"
  1833. {    /* avoid getting 0 - 0 + 1 = 1 if bounds nonconstant */
  1834.                   if( datatype_of(yypvt[-2].class) == type_INTEGER
  1835.                  && is_true(CONST_EXPR,yypvt[-2].subclass)
  1836.                  && datatype_of(yypvt[-0].class) == type_INTEGER
  1837.                  && is_true(CONST_EXPR,yypvt[-0].subclass) )
  1838.                 yyval.subclass = yypvt[-0].value.integer - yypvt[-2].value.integer + 1;
  1839.                   else
  1840.                 yyval.subclass = 0;
  1841.             } /*NOTREACHED*/ break;
  1842. case 102:
  1843. # line 845 "fortran.y"
  1844. {
  1845.                  yyval.subclass = 0;
  1846.             } /*NOTREACHED*/ break;
  1847. case 103:
  1848. # line 849 "fortran.y"
  1849. {
  1850.                  yyval.subclass = 0;
  1851.             } /*NOTREACHED*/ break;
  1852. case 104:
  1853. # line 855 "fortran.y"
  1854. {equivalence_flag = TRUE;} /*NOTREACHED*/ break;
  1855. case 105:
  1856. # line 856 "fortran.y"
  1857. {equivalence_flag = FALSE;} /*NOTREACHED*/ break;
  1858. case 108:
  1859. # line 864 "fortran.y"
  1860. {
  1861.               equivalence(&(yypvt[-2]), &(yypvt[-0]));
  1862.             } /*NOTREACHED*/ break;
  1863. case 109:
  1864. # line 868 "fortran.y"
  1865. {
  1866.               equivalence(&(yypvt[-2]), &(yypvt[-0]));
  1867.             } /*NOTREACHED*/ break;
  1868. case 110:
  1869. # line 875 "fortran.y"
  1870. {
  1871.                  def_equiv_name(&(yypvt[-0]));
  1872.             } /*NOTREACHED*/ break;
  1873. case 111:
  1874. # line 879 "fortran.y"
  1875. {
  1876.                  def_equiv_name(&(yypvt[-0]));
  1877.             } /*NOTREACHED*/ break;
  1878. case 112:
  1879. # line 883 "fortran.y"
  1880. {
  1881.                  def_equiv_name(&(yypvt[-0]));
  1882.             } /*NOTREACHED*/ break;
  1883. case 116:
  1884. # line 898 "fortran.y"
  1885. {
  1886.                  implied_id_token(&(yyval),blank_com_name);
  1887.                  def_com_block(&(yyval), &(yypvt[-1]));
  1888.                  if(is_true(COMMA_FLAG,yypvt[-1].subclass))
  1889.                    syntax_error(
  1890.                          yypvt[-1].line_num,yypvt[-1].col_num,
  1891.                          "trailing comma");
  1892.                  if(debug_parser)
  1893.                 print_comlist("blank common",&(yypvt[-1]));
  1894.  
  1895.             } /*NOTREACHED*/ break;
  1896. case 117:
  1897. # line 910 "fortran.y"
  1898. {
  1899.                  if(is_true(COMMA_FLAG,yypvt[-1].subclass))
  1900.                 syntax_error(
  1901.                          yypvt[-1].line_num,yypvt[-1].col_num,
  1902.                          "trailing comma");
  1903.  
  1904.             } /*NOTREACHED*/ break;
  1905. case 118:
  1906. # line 918 "fortran.y"
  1907. {
  1908.                  implied_id_token(&(yyval),blank_com_name);
  1909.                  def_com_block(&(yyval),&(yypvt[-2]));
  1910.                  if(is_true(COMMA_FLAG,yypvt[-1].subclass))
  1911.                 syntax_error(
  1912.                          yypvt[-1].line_num,yypvt[-1].col_num,
  1913.                          "trailing comma");
  1914.                  if(debug_parser)
  1915.                 print_comlist("blank common",&(yypvt[-2]));
  1916.  
  1917.             } /*NOTREACHED*/ break;
  1918. case 119:
  1919. # line 935 "fortran.y"
  1920. {
  1921.                  yyval.subclass = yypvt[-0].subclass;
  1922.             } /*NOTREACHED*/ break;
  1923. case 120:
  1924. # line 939 "fortran.y"
  1925. {
  1926.                  yyval.subclass = yypvt[-0].subclass;
  1927.                  yyval.line_num = yypvt[-0].line_num;
  1928.                  yyval.col_num = yypvt[-0].col_num;
  1929.             } /*NOTREACHED*/ break;
  1930. case 121:
  1931. # line 947 "fortran.y"
  1932. {
  1933.                  def_com_block(&(yypvt[-1]),&(yypvt[-0]));
  1934.                  yyval.subclass = yypvt[-0].subclass;
  1935.                  yyval.line_num = yypvt[-0].line_num;
  1936.                  yyval.col_num = yypvt[-0].col_num;
  1937.                  if(debug_parser)
  1938.                 print_comlist("labeled common",&(yypvt[-0]));
  1939.             } /*NOTREACHED*/ break;
  1940. case 122:
  1941. # line 958 "fortran.y"
  1942. {
  1943.                  yyval = yypvt[-1];
  1944.             } /*NOTREACHED*/ break;
  1945. case 123:
  1946. # line 963 "fortran.y"
  1947. {
  1948.                  implied_id_token(&(yyval),blank_com_name);
  1949.             } /*NOTREACHED*/ break;
  1950. case 124:
  1951. # line 967 "fortran.y"
  1952. {
  1953.                  implied_id_token(&(yyval),blank_com_name);
  1954.             } /*NOTREACHED*/ break;
  1955. case 125:
  1956. # line 973 "fortran.y"
  1957. {
  1958.                 yyval.subclass = yypvt[-0].subclass;
  1959.                 yyval.next_token = append_token((Token*)NULL,&(yypvt[-0]));
  1960.             } /*NOTREACHED*/ break;
  1961. case 126:
  1962. # line 978 "fortran.y"
  1963. {
  1964.                 if(!is_true(COMMA_FLAG,yypvt[-1].subclass))
  1965.                 syntax_error(
  1966.                     yypvt[-0].line_num,yypvt[-0].col_num-1,
  1967.                     "missing comma");
  1968.                 yyval.subclass = yypvt[-0].subclass;
  1969.                 yyval.line_num = yypvt[-0].line_num;
  1970.                 yyval.col_num = yypvt[-0].col_num;
  1971.                 yyval.next_token = append_token(yypvt[-1].next_token,&(yypvt[-0]));
  1972.             } /*NOTREACHED*/ break;
  1973. case 127:
  1974. # line 991 "fortran.y"
  1975. {               /* no comma */
  1976.                  yyval.subclass = yypvt[-0].subclass;
  1977.                  make_false(COMMA_FLAG,yyval.subclass);
  1978.             } /*NOTREACHED*/ break;
  1979. case 128:
  1980. # line 996 "fortran.y"
  1981. {               /* has comma */
  1982.                  yyval.subclass = yypvt[-1].subclass;
  1983.                  make_true(COMMA_FLAG,yyval.subclass);
  1984.                } /*NOTREACHED*/ break;
  1985. case 129:
  1986. # line 1003 "fortran.y"
  1987. {
  1988.                  def_com_variable(&(yypvt[-0]));
  1989.                  primary_id_expr(&(yypvt[-0]),&(yyval));
  1990.             } /*NOTREACHED*/ break;
  1991. case 130:
  1992. # line 1008 "fortran.y"
  1993. {
  1994.                  def_com_variable(&(yypvt[-0]));
  1995.                  primary_id_expr(&(yypvt[-0]),&(yyval));
  1996.             } /*NOTREACHED*/ break;
  1997. case 131:
  1998. # line 1021 "fortran.y"
  1999. {
  2000.                 if(is_true(COMMA_FLAG,yypvt[-1].subclass))
  2001.                 syntax_error(
  2002.                  yypvt[-1].line_num,yypvt[-1].col_num+strlen(token_name(yypvt[-1])),
  2003.                     "trailing comma");
  2004.                 if(f77_standard) {
  2005.                 nonstandard(yypvt[-2].line_num,yypvt[-2].col_num);
  2006.                 }
  2007.             } /*NOTREACHED*/ break;
  2008. case 133:
  2009. # line 1034 "fortran.y"
  2010. {
  2011.                 yyval = yypvt[-0];
  2012.             } /*NOTREACHED*/ break;
  2013. case 134:
  2014. # line 1040 "fortran.y"
  2015. {
  2016.                  def_namelist(&(yypvt[-1]),&(yypvt[-0]));
  2017.                  yyval = yypvt[-0];
  2018.             } /*NOTREACHED*/ break;
  2019. case 135:
  2020. # line 1047 "fortran.y"
  2021. {
  2022.                 yyval = yypvt[-1];
  2023.             } /*NOTREACHED*/ break;
  2024. case 136:
  2025. # line 1053 "fortran.y"
  2026. {
  2027.                  yyval.next_token = append_token((Token*)NULL,&(yypvt[-0]));
  2028.             } /*NOTREACHED*/ break;
  2029. case 137:
  2030. # line 1057 "fortran.y"
  2031. {
  2032.                 if(!is_true(COMMA_FLAG,yypvt[-1].subclass))
  2033.                 syntax_error(
  2034.                     yypvt[-0].line_num,yypvt[-0].col_num-1,
  2035.                     "missing comma");
  2036.                 yyval.subclass = yypvt[-0].subclass;
  2037.                 yyval.line_num = yypvt[-0].line_num;
  2038.                 yyval.col_num = yypvt[-0].col_num;
  2039.                 yyval.next_token = append_token(yypvt[-1].next_token,&(yypvt[-0]));
  2040.             } /*NOTREACHED*/ break;
  2041. case 138:
  2042. # line 1070 "fortran.y"
  2043. {               /* no comma */
  2044.                  def_namelist_item(&(yypvt[-0]));
  2045.                  primary_id_expr(&(yypvt[-0]),&(yyval));
  2046.                  make_false(COMMA_FLAG,yyval.subclass);
  2047.             } /*NOTREACHED*/ break;
  2048. case 139:
  2049. # line 1076 "fortran.y"
  2050. {               /* has comma */
  2051.                  def_namelist_item(&(yypvt[-1]));
  2052.                  primary_id_expr(&(yypvt[-1]),&(yyval));
  2053.                  make_true(COMMA_FLAG,yyval.subclass);
  2054.             } /*NOTREACHED*/ break;
  2055. case 145:
  2056. # line 1094 "fortran.y"
  2057. {
  2058.                 /* Only REAL*8 is actually recognized */
  2059.                 if(current_datatype == type_REAL
  2060.                    && yypvt[-0].value.integer == 8)
  2061.                 current_datatype = type_DP;
  2062.  
  2063.                  if(f77_standard) {
  2064.                 nonstandard(yypvt[-0].line_num,yypvt[-0].col_num);
  2065.                  }
  2066.             } /*NOTREACHED*/ break;
  2067. case 147:
  2068. # line 1109 "fortran.y"
  2069. {
  2070.                  current_datatype = type_INTEGER;
  2071.                  integer_context = TRUE;
  2072.             } /*NOTREACHED*/ break;
  2073. case 148:
  2074. # line 1114 "fortran.y"
  2075. {
  2076.                  current_datatype = type_REAL;
  2077.                  integer_context = TRUE;
  2078.             } /*NOTREACHED*/ break;
  2079. case 149:
  2080. # line 1119 "fortran.y"
  2081. {
  2082.                  current_datatype = type_COMPLEX;
  2083.                  integer_context = TRUE;
  2084.             } /*NOTREACHED*/ break;
  2085. case 150:
  2086. # line 1124 "fortran.y"
  2087. {
  2088.                  current_datatype = type_LOGICAL;
  2089.                  integer_context = TRUE;
  2090.             } /*NOTREACHED*/ break;
  2091. case 151:
  2092. # line 1131 "fortran.y"
  2093. {
  2094.                  current_datatype = type_DP;
  2095.             } /*NOTREACHED*/ break;
  2096. case 152:
  2097. # line 1135 "fortran.y"
  2098. {
  2099.                  current_datatype = type_DP;
  2100.             } /*NOTREACHED*/ break;
  2101. case 153:
  2102. # line 1139 "fortran.y"
  2103. {
  2104.                  current_datatype = type_INTEGER;
  2105.                  if(f77_standard)
  2106.                    nonstandard(yypvt[-0].line_num,yypvt[-0].col_num);
  2107.             } /*NOTREACHED*/ break;
  2108. case 154:
  2109. # line 1147 "fortran.y"
  2110. {
  2111.                  current_datatype = type_STRING;
  2112.                  integer_context = TRUE;
  2113.             } /*NOTREACHED*/ break;
  2114. case 155:
  2115. # line 1154 "fortran.y"
  2116. {
  2117.                  current_datatype = type_STRING;
  2118.             } /*NOTREACHED*/ break;
  2119. case 158:
  2120. # line 1164 "fortran.y"
  2121. {
  2122.                  declare_type(&(yypvt[-0]),current_datatype);
  2123.             } /*NOTREACHED*/ break;
  2124. case 159:
  2125. # line 1168 "fortran.y"
  2126. {
  2127.                  declare_type(&(yypvt[-0]),current_datatype);
  2128.             } /*NOTREACHED*/ break;
  2129. case 162:
  2130. # line 1178 "fortran.y"
  2131. {
  2132.                  declare_type(&(yypvt[-0]),current_datatype);
  2133.             } /*NOTREACHED*/ break;
  2134. case 163:
  2135. # line 1182 "fortran.y"
  2136. {
  2137.                  declare_type(&(yypvt[-2]),current_datatype);
  2138.             } /*NOTREACHED*/ break;
  2139. case 164:
  2140. # line 1186 "fortran.y"
  2141. {
  2142.                  declare_type(&(yypvt[-0]),current_datatype);
  2143.             } /*NOTREACHED*/ break;
  2144. case 165:
  2145. # line 1190 "fortran.y"
  2146. {
  2147.                  declare_type(&(yypvt[-2]),current_datatype);
  2148.             } /*NOTREACHED*/ break;
  2149. case 166:
  2150. # line 1197 "fortran.y"
  2151. {implicit_flag=TRUE;} /*NOTREACHED*/ break;
  2152. case 167:
  2153. # line 1201 "fortran.y"
  2154. {
  2155.                 {implicit_flag=FALSE;}
  2156.                 if(implicit_none) {
  2157.                 syntax_error(yypvt[-2].line_num,yypvt[-2].col_num,
  2158.                      "conflicts with IMPLICIT NONE");
  2159.                 }
  2160.                 else {
  2161.                 implicit_type_given = TRUE;
  2162.                 }
  2163.             } /*NOTREACHED*/ break;
  2164. case 168:
  2165. # line 1212 "fortran.y"
  2166. {
  2167.                 int h=yypvt[-1].value.integer;
  2168.                 {implicit_flag=FALSE;}
  2169.                 if( strcmp(hashtab[h].name,"NONE") == 0 ) {
  2170.                 if(implicit_type_given) {
  2171.                     syntax_error(yypvt[-2].line_num,yypvt[-2].col_num,
  2172.                      "conflicts with IMPLICIT statement");
  2173.                 }
  2174.                 else {
  2175.                     if(f77_standard)
  2176.                       nonstandard(yypvt[-1].line_num,yypvt[-1].col_num);
  2177.                     implicit_none = TRUE;
  2178.                 }
  2179.                 }
  2180.                 else {
  2181.                 syntax_error(yypvt[-1].line_num,yypvt[-1].col_num,
  2182.                      "unknown keyword -- ignored");
  2183.                 }
  2184.             } /*NOTREACHED*/ break;
  2185. case 170:
  2186. # line 1234 "fortran.y"
  2187. {initial_flag = TRUE;} /*NOTREACHED*/ break;
  2188. case 172:
  2189. # line 1240 "fortran.y"
  2190. {implicit_letter_flag = TRUE;} /*NOTREACHED*/ break;
  2191. case 173:
  2192. # line 1241 "fortran.y"
  2193. {implicit_letter_flag = FALSE;} /*NOTREACHED*/ break;
  2194. case 176:
  2195. # line 1249 "fortran.y"
  2196. {
  2197.                  set_implicit_type(current_datatype,
  2198.                          (int)yypvt[-0].subclass,(int)yypvt[-0].subclass);
  2199.             } /*NOTREACHED*/ break;
  2200. case 177:
  2201. # line 1254 "fortran.y"
  2202. {
  2203.                  set_implicit_type(current_datatype,
  2204.                     (int)yypvt[-2].subclass,(int)yypvt[-0].subclass);
  2205.             } /*NOTREACHED*/ break;
  2206. case 184:
  2207. # line 1275 "fortran.y"
  2208. {complex_const_allowed = TRUE;} /*NOTREACHED*/ break;
  2209. case 185:
  2210. # line 1277 "fortran.y"
  2211. {
  2212.                  def_parameter(&(yypvt[-3]),&(yypvt[-0]));
  2213.                  complex_const_allowed = FALSE;
  2214.             } /*NOTREACHED*/ break;
  2215. case 187:
  2216. # line 1288 "fortran.y"
  2217. {
  2218.                  def_ext_name(&(yypvt[-0]));
  2219.             } /*NOTREACHED*/ break;
  2220. case 188:
  2221. # line 1292 "fortran.y"
  2222. {
  2223.                  def_ext_name(&(yypvt[-0]));
  2224.             } /*NOTREACHED*/ break;
  2225. case 190:
  2226. # line 1302 "fortran.y"
  2227. {
  2228.                  def_intrins_name(&(yypvt[-0]));
  2229.             } /*NOTREACHED*/ break;
  2230. case 191:
  2231. # line 1306 "fortran.y"
  2232. {
  2233.                  def_intrins_name(&(yypvt[-0]));
  2234.             } /*NOTREACHED*/ break;
  2235. case 196:
  2236. # line 1321 "fortran.y"
  2237. {
  2238.                  ref_variable(&(yypvt[-0]));
  2239.             } /*NOTREACHED*/ break;
  2240. case 197:
  2241. # line 1325 "fortran.y"
  2242. {
  2243.                  def_com_block(&(yypvt[-1]),(Token*)NULL);
  2244.             } /*NOTREACHED*/ break;
  2245. case 202:
  2246. # line 1340 "fortran.y"
  2247. {complex_const_allowed=TRUE;} /*NOTREACHED*/ break;
  2248. case 203:
  2249. # line 1342 "fortran.y"
  2250. {complex_const_allowed=FALSE;} /*NOTREACHED*/ break;
  2251. case 207:
  2252. # line 1351 "fortran.y"
  2253. {
  2254.                  use_lvalue(&(yypvt[-0]));
  2255.             } /*NOTREACHED*/ break;
  2256. case 214:
  2257. # line 1367 "fortran.y"
  2258. {
  2259.                  use_parameter(&(yypvt[-0]));
  2260.             } /*NOTREACHED*/ break;
  2261. case 216:
  2262. # line 1374 "fortran.y"
  2263. {
  2264.                  use_parameter(&(yypvt[-0]));
  2265.             } /*NOTREACHED*/ break;
  2266. case 219:
  2267. # line 1385 "fortran.y"
  2268. {
  2269.                  use_lvalue(&(yypvt[-0]));
  2270.             } /*NOTREACHED*/ break;
  2271. case 221:
  2272. # line 1393 "fortran.y"
  2273. {
  2274.                 use_implied_do_index(&(yypvt[-3]));
  2275.             } /*NOTREACHED*/ break;
  2276. case 224:
  2277. # line 1404 "fortran.y"
  2278. {complex_const_allowed = TRUE;} /*NOTREACHED*/ break;
  2279. case 225:
  2280. # line 1405 "fortran.y"
  2281. {
  2282.               assignment_stmt_type(&(yypvt[-3]),&(yypvt[-2]),
  2283.                     &(yypvt[-0]));
  2284.               complex_const_allowed = FALSE;
  2285.             } /*NOTREACHED*/ break;
  2286. case 226:
  2287. # line 1411 "fortran.y"
  2288. {
  2289.                 /* Clear u-b-s flags spuriously set */
  2290.               if(is_true(STMT_FUNCTION_EXPR, yypvt[-5].subclass)
  2291.                      && stmt_sequence_no <= seq_stmt_fun)
  2292.                  stmt_function_stmt(&(yypvt[-5]));
  2293.             } /*NOTREACHED*/ break;
  2294. case 231:
  2295. # line 1429 "fortran.y"
  2296. {
  2297.                 do_ASSIGN(&(yypvt[-1]));
  2298.             } /*NOTREACHED*/ break;
  2299. case 235:
  2300. # line 1446 "fortran.y"
  2301. {
  2302.                  do_assigned_GOTO(&(yypvt[-1]));
  2303.             } /*NOTREACHED*/ break;
  2304. case 236:
  2305. # line 1450 "fortran.y"
  2306. {
  2307.                  do_assigned_GOTO(&(yypvt[-4]));
  2308.             } /*NOTREACHED*/ break;
  2309. case 237:
  2310. # line 1454 "fortran.y"
  2311. {
  2312.                  do_assigned_GOTO(&(yypvt[-5]));
  2313.             } /*NOTREACHED*/ break;
  2314. case 242:
  2315. # line 1470 "fortran.y"
  2316. {
  2317.               int t=datatype_of(yypvt[-9].class);
  2318.               if(t != type_INTEGER && t != type_REAL
  2319.                  && t != type_DP && t != type_ERROR ) {
  2320.                 syntax_error(yypvt[-9].line_num,yypvt[-9].col_num,
  2321.           "integer, real, or double precision expression required");
  2322.               }
  2323.             } /*NOTREACHED*/ break;
  2324. case 243:
  2325. # line 1482 "fortran.y"
  2326. {
  2327.               int t=datatype_of(yypvt[-1].class);
  2328.               if(t != type_LOGICAL && t != type_ERROR)
  2329.                  syntax_error(yypvt[-1].line_num,yypvt[-1].col_num,
  2330.                       "logical expression required");
  2331.             } /*NOTREACHED*/ break;
  2332. case 244:
  2333. # line 1492 "fortran.y"
  2334. {
  2335.               int t=datatype_of(yypvt[-2].class);
  2336.               if(t != type_LOGICAL && t != type_ERROR)
  2337.                  syntax_error(yypvt[-2].line_num,yypvt[-2].col_num,
  2338.                       "logical expression required");
  2339.             } /*NOTREACHED*/ break;
  2340. case 245:
  2341. # line 1500 "fortran.y"
  2342. {complex_const_allowed = TRUE;} /*NOTREACHED*/ break;
  2343. case 246:
  2344. # line 1501 "fortran.y"
  2345. {
  2346.                 if(is_true(ID_EXPR,yypvt[-1].subclass)){
  2347.                 use_variable(&(yypvt[-1]));
  2348.                 }
  2349.                 complex_const_allowed = FALSE;
  2350.  
  2351.                 initial_flag = TRUE;    /* for is_keyword */
  2352.                 yyval = yypvt[-1]; /* Inherit expr for type checking above */
  2353.             } /*NOTREACHED*/ break;
  2354. case 248:
  2355. # line 1514 "fortran.y"
  2356. {complex_const_allowed = TRUE;} /*NOTREACHED*/ break;
  2357. case 249:
  2358. # line 1515 "fortran.y"
  2359. {
  2360.                 if(is_true(ID_EXPR,yypvt[-1].subclass)){
  2361.                 use_variable(&(yypvt[-1]));
  2362.                 }
  2363.                 complex_const_allowed = FALSE;
  2364.  
  2365.                 initial_flag = TRUE;
  2366.             } /*NOTREACHED*/ break;
  2367. case 254:
  2368. # line 1545 "fortran.y"
  2369. {
  2370.                  use_lvalue(&(yypvt[-3]));
  2371.                  use_variable(&(yypvt[-3]));
  2372.  
  2373.                 /* Check for non-integer DO index or bounds */
  2374.                  if(datatype_of(yypvt[-3].class) == type_INTEGER
  2375.                 && datatype_of(yypvt[-1].class) != type_INTEGER)
  2376.                    warning(yypvt[-2].line_num,yypvt[-3].col_num,
  2377.                   "type mismatch between DO index and bounds");
  2378.  
  2379.                  else if(datatype_of(yypvt[-3].class) != type_INTEGER)
  2380.                    if(datatype_of(yypvt[-1].class) != type_INTEGER) {
  2381.                  if(port_check)
  2382.                    nonportable(yypvt[-1].line_num,yypvt[-1].col_num,
  2383.                            "non-integer DO loop bounds");
  2384.                    }
  2385.                    else {
  2386.                  if(trunc_check)
  2387.                    warning(yypvt[-3].line_num,yypvt[-3].col_num,
  2388.                        "DO index is not integer");
  2389.                    }
  2390.             } /*NOTREACHED*/ break;
  2391. case 255:
  2392. # line 1568 "fortran.y"
  2393. {complex_const_allowed=TRUE;} /*NOTREACHED*/ break;
  2394. case 256:
  2395. # line 1569 "fortran.y"
  2396. {
  2397.                 if(is_true(ID_EXPR,yypvt[-2].subclass)){
  2398.                 use_variable(&(yypvt[-2]));
  2399.                 }
  2400.                 complex_const_allowed=FALSE;
  2401.                 /* (N.B. nonportability flagged in do_handle) */
  2402.             } /*NOTREACHED*/ break;
  2403. case 257:
  2404. # line 1577 "fortran.y"
  2405. {complex_const_allowed=TRUE;} /*NOTREACHED*/ break;
  2406. case 258:
  2407. # line 1578 "fortran.y"
  2408. {
  2409.                 if(is_true(ID_EXPR,yypvt[-2].subclass)){
  2410.                 use_variable(&(yypvt[-2]));
  2411.                 }
  2412.                 complex_const_allowed=FALSE;
  2413. #ifdef ALLOW_DO_ENDO
  2414.                 if(f77_standard)
  2415.                 nonstandard(yypvt[-5].line_num,yypvt[-5].col_num);
  2416. #else
  2417.                 syntax_error(yypvt[-5].line_num,yypvt[-5].col_num,
  2418.                     "Nonstandard syntax");
  2419. #endif
  2420.             } /*NOTREACHED*/ break;
  2421. case 261:
  2422. # line 1596 "fortran.y"
  2423. {
  2424. #ifdef ALLOW_DO_ENDO
  2425.                 if(f77_standard)
  2426.                 nonstandard(yypvt[-1].line_num,yypvt[-1].col_num);
  2427. #else
  2428.                 syntax_error(yypvt[-1].line_num,yypvt[-1].col_num,
  2429.                     "Nonstandard syntax");
  2430. #endif
  2431.                 integer_context=FALSE;
  2432.             } /*NOTREACHED*/ break;
  2433. case 262:
  2434. # line 1609 "fortran.y"
  2435. {
  2436.                 yyval.class=do_bounds_type(&(yypvt[-2]),&(yypvt[-0]),&(yypvt[-0]));
  2437.             } /*NOTREACHED*/ break;
  2438. case 263:
  2439. # line 1613 "fortran.y"
  2440. {
  2441.                 yyval.class=do_bounds_type(&(yypvt[-4]),&(yypvt[-2]),&(yypvt[-0]));
  2442.             } /*NOTREACHED*/ break;
  2443. case 264:
  2444. # line 1619 "fortran.y"
  2445. {
  2446. #ifdef ALLOW_DO_ENDO
  2447.                 if(f77_standard)
  2448.                 nonstandard(yypvt[-1].line_num,yypvt[-1].col_num);
  2449. #else
  2450.                 syntax_error(yypvt[-1].line_num,yypvt[-1].col_num,
  2451.                     "Nonstandard syntax");
  2452. #endif
  2453.             } /*NOTREACHED*/ break;
  2454. case 265:
  2455. # line 1629 "fortran.y"
  2456. {
  2457. #ifdef ALLOW_DO_ENDO
  2458.                 if(f77_standard)
  2459.                 nonstandard(yypvt[-1].line_num,yypvt[-1].col_num);
  2460. #else
  2461.                 syntax_error(yypvt[-1].line_num,yypvt[-1].col_num,
  2462.                     "Nonstandard syntax");
  2463. #endif
  2464.             } /*NOTREACHED*/ break;
  2465. case 271:
  2466. # line 1655 "fortran.y"
  2467. {
  2468.                  use_variable(&(yypvt[-0]));
  2469.             } /*NOTREACHED*/ break;
  2470. case 273:
  2471. # line 1663 "fortran.y"
  2472. {complex_const_allowed = FALSE;} /*NOTREACHED*/ break;
  2473. case 275:
  2474. # line 1665 "fortran.y"
  2475. {complex_const_allowed = FALSE;} /*NOTREACHED*/ break;
  2476. case 277:
  2477. # line 1668 "fortran.y"
  2478. {control_item_count = 0;} /*NOTREACHED*/ break;
  2479. case 278:
  2480. # line 1670 "fortran.y"
  2481. {complex_const_allowed = TRUE;} /*NOTREACHED*/ break;
  2482. case 284:
  2483. # line 1683 "fortran.y"
  2484. {control_item_count = 0;} /*NOTREACHED*/ break;
  2485. case 285:
  2486. # line 1687 "fortran.y"
  2487. {
  2488.                 if(f77_standard)
  2489.                 nonstandard(yypvt[-2].line_num,yypvt[-2].col_num);
  2490.             } /*NOTREACHED*/ break;
  2491. case 286:
  2492. # line 1692 "fortran.y"
  2493. {
  2494.                 if(f77_standard)
  2495.                 nonstandard(yypvt[-4].line_num,yypvt[-4].col_num);
  2496.             } /*NOTREACHED*/ break;
  2497. case 288:
  2498. # line 1701 "fortran.y"
  2499. {complex_const_allowed = TRUE;} /*NOTREACHED*/ break;
  2500. case 289:
  2501. # line 1702 "fortran.y"
  2502. {complex_const_allowed = FALSE;} /*NOTREACHED*/ break;
  2503. case 291:
  2504. # line 1706 "fortran.y"
  2505. {
  2506.                 if(f77_standard)
  2507.                 nonstandard(yypvt[-2].line_num,yypvt[-2].col_num);
  2508.             } /*NOTREACHED*/ break;
  2509. case 292:
  2510. # line 1711 "fortran.y"
  2511. {complex_const_allowed = TRUE;} /*NOTREACHED*/ break;
  2512. case 293:
  2513. # line 1712 "fortran.y"
  2514. {complex_const_allowed = FALSE;} /*NOTREACHED*/ break;
  2515. case 294:
  2516. # line 1713 "fortran.y"
  2517. {
  2518.                 if(f77_standard)
  2519.                 nonstandard(yypvt[-6].line_num,yypvt[-6].col_num);
  2520.             } /*NOTREACHED*/ break;
  2521. case 295:
  2522. # line 1721 "fortran.y"
  2523. {
  2524.                 ++control_item_count;
  2525.             } /*NOTREACHED*/ break;
  2526. case 296:
  2527. # line 1725 "fortran.y"
  2528. {
  2529.                 ++control_item_count;
  2530.             } /*NOTREACHED*/ break;
  2531. case 297:
  2532. # line 1734 "fortran.y"
  2533. {
  2534.                 use_io_keyword(&(yypvt[-2]),&(yypvt[-0]),curr_stmt_class);
  2535.             } /*NOTREACHED*/ break;
  2536. case 298:
  2537. # line 1738 "fortran.y"
  2538. {
  2539.                 if( yypvt[-0].class != '*'
  2540.                    && is_true(ID_EXPR,yypvt[-0].subclass)){
  2541.                     /* WRITE(string,...) means store
  2542.                        output in the string */
  2543.                 if(curr_stmt_class == tok_WRITE
  2544.                  && control_item_count == 0
  2545.                  && datatype_of(yypvt[-0].class) == type_STRING)
  2546.                     use_lvalue(&(yypvt[-0]));
  2547.                     /* READ/WRITE(..,namelist) means
  2548.                        I/O with variables of namelist. */
  2549.                 else if( control_item_count == 1
  2550.                     && datatype_of(yypvt[-0].class) == type_NAMELIST)
  2551.                     ref_namelist(&(yypvt[-0]),curr_stmt_class);
  2552.  
  2553.                 use_variable(&(yypvt[-0]));
  2554.                 }
  2555.             } /*NOTREACHED*/ break;
  2556. case 299:
  2557. # line 1764 "fortran.y"
  2558. {
  2559.                 if( yypvt[-0].class != '*'
  2560.                    && is_true(ID_EXPR,yypvt[-0].subclass)){
  2561.                 use_variable(&(yypvt[-0]));
  2562.                 }
  2563.                 ++control_item_count;
  2564.             } /*NOTREACHED*/ break;
  2565. case 300:
  2566. # line 1772 "fortran.y"
  2567. {
  2568.                 use_io_keyword(&(yypvt[-2]),&(yypvt[-0]),curr_stmt_class);
  2569.                 ++control_item_count;
  2570.             } /*NOTREACHED*/ break;
  2571. case 301:
  2572. # line 1777 "fortran.y"
  2573. {
  2574.                 ++control_item_count;
  2575.             } /*NOTREACHED*/ break;
  2576. case 302:
  2577. # line 1783 "fortran.y"
  2578. {
  2579.                 use_io_keyword(&(yypvt[-2]),&(yypvt[-0]),curr_stmt_class);
  2580.             } /*NOTREACHED*/ break;
  2581. case 303:
  2582. # line 1787 "fortran.y"
  2583. {
  2584.                 use_special_open_keywd(&(yypvt[-0]));
  2585.             } /*NOTREACHED*/ break;
  2586. case 306:
  2587. # line 1798 "fortran.y"
  2588. {
  2589.                 if(is_true(ID_EXPR,yypvt[-0].subclass)){
  2590.                 if( curr_stmt_class == tok_READ ||
  2591.                     curr_stmt_class == tok_ACCEPT )
  2592.                     use_lvalue(&(yypvt[-0]));
  2593.                 else
  2594.                     use_variable(&(yypvt[-0]));
  2595.                 }
  2596.             } /*NOTREACHED*/ break;
  2597. case 308:
  2598. # line 1812 "fortran.y"
  2599. {
  2600.                  use_implied_do_index(&(yypvt[-3]));
  2601.             } /*NOTREACHED*/ break;
  2602. case 309:
  2603. # line 1818 "fortran.y"
  2604. {control_item_count = 0;} /*NOTREACHED*/ break;
  2605. case 311:
  2606. # line 1823 "fortran.y"
  2607. {control_item_count = 0;} /*NOTREACHED*/ break;
  2608. case 313:
  2609. # line 1828 "fortran.y"
  2610. {control_item_count = 0;} /*NOTREACHED*/ break;
  2611. case 317:
  2612. # line 1836 "fortran.y"
  2613. {control_item_count = 0;} /*NOTREACHED*/ break;
  2614. case 320:
  2615. # line 1843 "fortran.y"
  2616. {control_item_count = 0;} /*NOTREACHED*/ break;
  2617. case 321:
  2618. # line 1844 "fortran.y"
  2619. {control_item_count = 0;} /*NOTREACHED*/ break;
  2620. case 324:
  2621. # line 1851 "fortran.y"
  2622. {control_item_count = 0;} /*NOTREACHED*/ break;
  2623. case 327:
  2624. # line 1865 "fortran.y"
  2625. {
  2626.                 if(is_true(ID_EXPR,yypvt[-0].subclass)){
  2627.                  use_variable(&(yypvt[-0]));
  2628.                 }
  2629.             } /*NOTREACHED*/ break;
  2630. case 329:
  2631. # line 1874 "fortran.y"
  2632. {inside_format=TRUE;} /*NOTREACHED*/ break;
  2633. case 330:
  2634. # line 1875 "fortran.y"
  2635. {
  2636.               inside_format=FALSE;
  2637.             } /*NOTREACHED*/ break;
  2638. case 344:
  2639. # line 1901 "fortran.y"
  2640. {
  2641.               if(f77_standard)
  2642.                  nonstandard(yypvt[-0].line_num,yypvt[-0].col_num);
  2643.             } /*NOTREACHED*/ break;
  2644. case 349:
  2645. # line 1918 "fortran.y"
  2646. {
  2647.                 if(stmt_sequence_no > seq_stmt_fun) {
  2648.                     syntax_error(
  2649.                     yypvt[-3].line_num, NO_COL_NUM,
  2650.                         "statement out of order");
  2651.                  }
  2652.                 def_stmt_function(&(yypvt[-3]),&(yypvt[-1]));
  2653.                     /* make token info */
  2654.                 primary_id_expr(&(yypvt[-3]),&(yyval));
  2655.                 if(debug_parser)
  2656.                   print_exprlist("stmt function",&(yypvt[-1]));
  2657.             } /*NOTREACHED*/ break;
  2658. case 350:
  2659. # line 1933 "fortran.y"
  2660. {
  2661.                 yyval.next_token = append_token((Token*)NULL,&(yypvt[-0]));
  2662.             } /*NOTREACHED*/ break;
  2663. case 351:
  2664. # line 1937 "fortran.y"
  2665. {
  2666.                 yyval.next_token = append_token(yypvt[-2].next_token,&(yypvt[-0]));
  2667.             } /*NOTREACHED*/ break;
  2668. case 353:
  2669. # line 1947 "fortran.y"
  2670. {
  2671.                  call_subr(&(yypvt[-0]),(Token*)NULL);
  2672.                  complex_const_allowed = FALSE;
  2673.             } /*NOTREACHED*/ break;
  2674. case 355:
  2675. # line 1953 "fortran.y"
  2676. {
  2677.                  call_subr(&(yypvt[-2]),(Token*)NULL);
  2678.                  complex_const_allowed = FALSE;
  2679.             } /*NOTREACHED*/ break;
  2680. case 357:
  2681. # line 1959 "fortran.y"
  2682. {
  2683.                  call_subr(&(yypvt[-3]),&(yypvt[-1]));
  2684.                  if(debug_parser)
  2685.                 print_exprlist("call stmt",&(yypvt[-1]));
  2686.                  complex_const_allowed = FALSE;
  2687.             } /*NOTREACHED*/ break;
  2688. case 359:
  2689. # line 1968 "fortran.y"
  2690. {
  2691.                  complex_const_allowed = TRUE;
  2692.                  yyval = yypvt[-0];
  2693.             } /*NOTREACHED*/ break;
  2694. case 360:
  2695. # line 1974 "fortran.y"
  2696. {
  2697.                 if(is_true(ID_EXPR,yypvt[-0].subclass)){
  2698.                  use_actual_arg(&(yypvt[-0]));
  2699.                  use_variable(&(yypvt[-0]));
  2700.                 }
  2701.                 yyval.next_token = append_token((Token*)NULL,&(yypvt[-0]));
  2702.             } /*NOTREACHED*/ break;
  2703. case 361:
  2704. # line 1982 "fortran.y"
  2705. {
  2706.                 yyval.next_token = append_token((Token*)NULL,&(yypvt[-0]));
  2707.             } /*NOTREACHED*/ break;
  2708. case 362:
  2709. # line 1986 "fortran.y"
  2710. {
  2711.                 if(is_true(ID_EXPR,yypvt[-0].subclass)){
  2712.                  use_actual_arg(&(yypvt[-0]));
  2713.                  use_variable(&(yypvt[-0]));
  2714.                 }
  2715.                 yyval.next_token = append_token(yypvt[-2].next_token,&(yypvt[-0]));
  2716.             } /*NOTREACHED*/ break;
  2717. case 363:
  2718. # line 1994 "fortran.y"
  2719. {
  2720.                 yyval.next_token = append_token(yypvt[-4].next_token,&(yypvt[-0]));
  2721.             } /*NOTREACHED*/ break;
  2722. case 364:
  2723. # line 2001 "fortran.y"
  2724. {
  2725.                  do_RETURN(current_module_hash,&(yypvt[-1]));
  2726.             } /*NOTREACHED*/ break;
  2727. case 365:
  2728. # line 2005 "fortran.y"
  2729. {
  2730.                  do_RETURN(current_module_hash,&(yypvt[-2]));
  2731.             } /*NOTREACHED*/ break;
  2732. case 366:
  2733. # line 2012 "fortran.y"
  2734. {
  2735.                    /* restore status of complex flag */
  2736.                 if(!is_true(COMPLEX_FLAG,yypvt[-3].subclass))
  2737.                   complex_const_allowed=FALSE;
  2738.                 call_func(&(yypvt[-3]),&(yypvt[-1]));
  2739.                             /* make token info */
  2740.                 func_ref_expr(&(yypvt[-3]),&(yypvt[-1]),&(yyval));
  2741.                 if(debug_parser)
  2742.                     print_exprlist("function",&(yypvt[-1]));
  2743.             } /*NOTREACHED*/ break;
  2744. case 367:
  2745. # line 2025 "fortran.y"
  2746. {
  2747.               if(complex_const_allowed)/* save context */
  2748.                 make_true(COMPLEX_FLAG,yyval.subclass);
  2749.               complex_const_allowed=TRUE;
  2750.             } /*NOTREACHED*/ break;
  2751. case 368:
  2752. # line 2032 "fortran.y"
  2753. {
  2754.                 yyval.class = 0;
  2755.                 yyval.next_token = NULL;
  2756.             } /*NOTREACHED*/ break;
  2757. case 370:
  2758. # line 2040 "fortran.y"
  2759. {
  2760.                 yyval.next_token = append_token((Token*)NULL,&(yypvt[-0]));
  2761.             } /*NOTREACHED*/ break;
  2762. case 371:
  2763. # line 2044 "fortran.y"
  2764. {
  2765.                 yyval.next_token = append_token(yypvt[-2].next_token,&(yypvt[-0]));
  2766.             } /*NOTREACHED*/ break;
  2767. case 372:
  2768. # line 2052 "fortran.y"
  2769. {
  2770.               if(datatype_of(yypvt[-0].class) != type_ERROR){
  2771.                 if( ! is_const_type(yypvt[-0].class) ) {
  2772.                   syntax_error(yypvt[-0].line_num,yypvt[-0].col_num,
  2773.               "arithmetic, char, or logical expression expected");
  2774.                 }
  2775.                 else {
  2776.                   if( !is_true(PARAMETER_EXPR,yypvt[-0].subclass) ) {
  2777.                 syntax_error(yypvt[-0].line_num,yypvt[-0].col_num,
  2778.                        "constant expression expected");
  2779.                   }
  2780.                 /* Here we allow, with some warnings, expr
  2781.                    containing intrins func or **REAL in
  2782.                    PARAMETER defn. */
  2783.                   else if( !is_true(CONST_EXPR,yypvt[-0].subclass) ) {
  2784.                 if(f77_standard) {
  2785.                   nonstandard(yypvt[-0].line_num,yypvt[-0].col_num);
  2786.                   msg_tail(
  2787.              "\n    intrinsic func or **REAL in PARAMETER defn");
  2788.                 }
  2789.                   }
  2790.                 }
  2791.               }
  2792.             } /*NOTREACHED*/ break;
  2793. case 373:
  2794. # line 2080 "fortran.y"
  2795. {
  2796.                 if(debug_parser) {
  2797.                 fprintf(list_fd,
  2798.                     "\nexpr: class=0x%x subclass=0x%x",
  2799.                     yypvt[-0].class,
  2800.                     yypvt[-0].subclass);
  2801.                 }
  2802.             } /*NOTREACHED*/ break;
  2803. case 375:
  2804. # line 2093 "fortran.y"
  2805. {
  2806.                 binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
  2807.                      ,&(yyval));
  2808.             } /*NOTREACHED*/ break;
  2809. case 376:
  2810. # line 2098 "fortran.y"
  2811. {
  2812.                 binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
  2813.                      ,&(yyval));
  2814.             } /*NOTREACHED*/ break;
  2815. case 378:
  2816. # line 2107 "fortran.y"
  2817. {
  2818.                 binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
  2819.                      ,&(yyval));
  2820.             } /*NOTREACHED*/ break;
  2821. case 380:
  2822. # line 2116 "fortran.y"
  2823. {
  2824.                 binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
  2825.                      ,&(yyval));
  2826.             } /*NOTREACHED*/ break;
  2827. case 382:
  2828. # line 2125 "fortran.y"
  2829. {
  2830.                 unexpr_type(&(yypvt[-1]),&(yypvt[-0]),&(yyval));
  2831.             } /*NOTREACHED*/ break;
  2832. case 384:
  2833. # line 2133 "fortran.y"
  2834. {
  2835.                 binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
  2836.                      ,&(yyval));
  2837.             } /*NOTREACHED*/ break;
  2838. case 386:
  2839. # line 2143 "fortran.y"
  2840. {
  2841.                 unexpr_type(&(yypvt[-1]),&(yypvt[-0]),&(yyval));
  2842.             } /*NOTREACHED*/ break;
  2843. case 387:
  2844. # line 2147 "fortran.y"
  2845. {
  2846.                 unexpr_type(&(yypvt[-1]),&(yypvt[-0]),&(yyval));
  2847.             } /*NOTREACHED*/ break;
  2848. case 388:
  2849. # line 2151 "fortran.y"
  2850. {
  2851.                 binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
  2852.                      ,&(yyval));
  2853.             } /*NOTREACHED*/ break;
  2854. case 389:
  2855. # line 2156 "fortran.y"
  2856. {
  2857.                 binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
  2858.                      ,&(yyval));
  2859.             } /*NOTREACHED*/ break;
  2860. case 391:
  2861. # line 2165 "fortran.y"
  2862. {
  2863.                 binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
  2864.                      ,&(yyval));
  2865.                 if(div_check &&
  2866.                    !is_true(CONST_EXPR,yypvt[-0].subclass)){
  2867.                 warning(yypvt[-1].line_num,yypvt[-1].col_num,
  2868.                     "Possible division by zero");
  2869.                 }
  2870.             } /*NOTREACHED*/ break;
  2871. case 392:
  2872. # line 2175 "fortran.y"
  2873. {
  2874.                 binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
  2875.                      ,&(yyval));
  2876.             } /*NOTREACHED*/ break;
  2877. case 394:
  2878. # line 2184 "fortran.y"
  2879. {
  2880.                 binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
  2881.                      ,&(yyval));
  2882.             } /*NOTREACHED*/ break;
  2883. case 396:
  2884. # line 2193 "fortran.y"
  2885. {
  2886.                 binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
  2887.                      ,&(yyval));
  2888.             } /*NOTREACHED*/ break;
  2889. case 397:
  2890. # line 2200 "fortran.y"
  2891. {
  2892.                 DBGstr(primary<--id=,token_name(yypvt[-0]));
  2893.             } /*NOTREACHED*/ break;
  2894. case 401:
  2895. # line 2210 "fortran.y"
  2896. {
  2897.                 make_true(CONST_EXPR,yyval.subclass);
  2898.                 make_true(PARAMETER_EXPR,yyval.subclass);
  2899.                 make_true(NUM_CONST,yyval.subclass);
  2900.             } /*NOTREACHED*/ break;
  2901. case 402:
  2902. # line 2216 "fortran.y"
  2903. {
  2904.                 DBGstr(primary<--str=,yypvt[-0].value.string)
  2905.                 yyval.class = type_byte(class_VAR,type_STRING);
  2906.                 yyval.subclass = 0;
  2907.                 make_true(CONST_EXPR,yyval.subclass);
  2908.                 make_true(PARAMETER_EXPR,yyval.subclass);
  2909.             } /*NOTREACHED*/ break;
  2910. case 403:
  2911. # line 2224 "fortran.y"
  2912. {
  2913.                 DBGstr(primary<--h=,yypvt[-0].value.string)
  2914.                 yyval.class = type_byte(class_VAR,type_HOLLERITH);
  2915.                 yyval.subclass = 0;
  2916.                 make_true(CONST_EXPR,yyval.subclass);
  2917.                 make_true(PARAMETER_EXPR,yyval.subclass);
  2918.                 if(port_check && hollerith_check) {
  2919.                 warning(yypvt[-0].line_num,yypvt[-0].col_num,
  2920.                 "hollerith constant may not be portable");
  2921.                 }
  2922.             } /*NOTREACHED*/ break;
  2923. case 404:
  2924. # line 2236 "fortran.y"
  2925. {
  2926.                 DBGstr(primary<--log=,yypvt[-0].value.string)
  2927.                 yyval.class = type_byte(class_VAR,type_LOGICAL);
  2928.                 yyval.subclass = 0;
  2929.                 make_true(CONST_EXPR,yyval.subclass);
  2930.                 make_true(PARAMETER_EXPR,yyval.subclass);
  2931.             } /*NOTREACHED*/ break;
  2932. case 405:
  2933. # line 2244 "fortran.y"
  2934. {
  2935.                 yyval = yypvt[-1];
  2936.             } /*NOTREACHED*/ break;
  2937. case 406:
  2938. # line 2250 "fortran.y"
  2939. {
  2940.                 yyval.class = type_byte(class_VAR,type_INTEGER);
  2941.                 yyval.subclass = 0;
  2942.             } /*NOTREACHED*/ break;
  2943. case 407:
  2944. # line 2255 "fortran.y"
  2945. {
  2946.                 yyval.class = type_byte(class_VAR,type_REAL);
  2947.                 yyval.subclass = 0;
  2948.             } /*NOTREACHED*/ break;
  2949. case 408:
  2950. # line 2260 "fortran.y"
  2951. {
  2952.                 yyval.class = type_byte(class_VAR,type_DP);
  2953.                 yyval.subclass = 0;
  2954.             } /*NOTREACHED*/ break;
  2955. case 409:
  2956. # line 2265 "fortran.y"
  2957. {
  2958.                 yyval.class = type_byte(class_VAR,type_COMPLEX);
  2959.                 yyval.subclass = 0;
  2960.             } /*NOTREACHED*/ break;
  2961. case 410:
  2962. # line 2273 "fortran.y"
  2963. {
  2964.                 if(is_true(ID_EXPR,yypvt[-0].subclass)){
  2965.                 use_variable(&(yypvt[-0]));
  2966.                 }
  2967.                 if(datatype_of(yypvt[-0].class) != type_INTEGER) {
  2968.                 syntax_error(
  2969.                     yypvt[-0].line_num,yypvt[-0].col_num,
  2970.                     "expression must be integer type");
  2971.                 }
  2972.             } /*NOTREACHED*/ break;
  2973. case 411:
  2974. # line 2287 "fortran.y"
  2975. {
  2976.                 if(is_true(ID_EXPR,yypvt[-0].subclass)){
  2977.                 use_variable(&(yypvt[-0]));
  2978.                 }
  2979.                 {
  2980.                 int t=datatype_of(yypvt[-0].class);
  2981.                     if(t != type_INTEGER && t != type_REAL
  2982.                     && t != type_DP ) {
  2983.                     syntax_error(
  2984.                       yypvt[-0].line_num,yypvt[-0].col_num,
  2985.         "expression must be integer, real, or double precision type");
  2986.                         }
  2987.                 }
  2988.             } /*NOTREACHED*/ break;
  2989. case 412:
  2990. # line 2307 "fortran.y"
  2991. {
  2992.                 if(is_true(ID_EXPR,yypvt[-0].subclass)){
  2993.                 use_variable(&(yypvt[-0]));
  2994.                 }
  2995.                 if( ! is_true(CONST_EXPR,yypvt[-0].subclass) ) {
  2996.                 syntax_error(
  2997.                     yypvt[-0].line_num,yypvt[-0].col_num,
  2998.                     "constant expression expected");
  2999.                 }
  3000.                 else
  3001.                   if(datatype_of(yypvt[-0].class) != type_INTEGER){
  3002.                 syntax_error(
  3003.                     yypvt[-0].line_num,yypvt[-0].col_num,
  3004.                     "integer expression expected");
  3005.                 }
  3006.  
  3007.             } /*NOTREACHED*/ break;
  3008. case 413:
  3009. # line 2328 "fortran.y"
  3010. {
  3011.                 if(is_true(ID_EXPR,yypvt[-0].subclass)){
  3012.                 use_variable(&(yypvt[-0]));
  3013.                 }
  3014.  
  3015.                 if( datatype_of(yypvt[-0].class) != type_INTEGER ){
  3016.                 syntax_error(
  3017.                     yypvt[-0].line_num,yypvt[-0].col_num,
  3018.                     "integer dimension expected");
  3019.                 yyval.value.integer = 0;
  3020.                 }
  3021.                 else {
  3022.                   if( is_true(CONST_EXPR,yypvt[-0].subclass) )
  3023.                 yyval.value.integer =
  3024.                   int_expr_value(&(yypvt[-0]));
  3025.                   else        /* must be dummy */
  3026.                 yyval.value.integer = 0;
  3027.                 }
  3028.             } /*NOTREACHED*/ break;
  3029. case 414:
  3030. # line 2354 "fortran.y"
  3031. {
  3032.                 ref_array(&(yypvt[-3]),&(yypvt[-1]));
  3033.                 if(debug_parser)
  3034.                     print_exprlist("array lvalue",&(yypvt[-1]));
  3035.                     /* array now becomes scalar */
  3036.                 make_false(ARRAY_ID_EXPR,yyval.subclass);
  3037.             } /*NOTREACHED*/ break;
  3038. case 415:
  3039. # line 2364 "fortran.y"
  3040. {
  3041.                 ref_array(&(yypvt[-3]),&(yypvt[-1]));
  3042.                 if(debug_parser)
  3043.                     print_exprlist("array",&(yypvt[-1]));
  3044.                     /* array now becomes scalar */
  3045.                 make_false(ARRAY_ID_EXPR,yyval.subclass);
  3046.             } /*NOTREACHED*/ break;
  3047. case 416:
  3048. # line 2374 "fortran.y"
  3049. {
  3050.                 yyval.next_token = append_token((Token*)NULL,&(yypvt[-0]));
  3051.             } /*NOTREACHED*/ break;
  3052. case 417:
  3053. # line 2378 "fortran.y"
  3054. {
  3055.                 yyval.next_token = append_token(yypvt[-2].next_token,&(yypvt[-0]));
  3056.             } /*NOTREACHED*/ break;
  3057. case 418:
  3058. # line 2384 "fortran.y"
  3059. {
  3060.                 if(is_true(ID_EXPR,yypvt[-0].subclass)){
  3061.                  use_variable(&(yypvt[-0]));
  3062.                 }
  3063.                 /* check subscript exprs for integer type */
  3064.                 if(datatype_of(yypvt[-0].class) != type_INTEGER)
  3065.                   if(trunc_check)
  3066.                  warning(yypvt[-0].line_num,yypvt[-0].col_num,
  3067.                      "subscript is not integer");
  3068.             } /*NOTREACHED*/ break;
  3069. case 419:
  3070. # line 2398 "fortran.y"
  3071. {
  3072.                    /* restore status of complex flag */
  3073.                 if(!is_true(COMPLEX_FLAG,yypvt[-1].subclass))
  3074.                   complex_const_allowed=FALSE;
  3075.             } /*NOTREACHED*/ break;
  3076. case 424:
  3077. # line 2412 "fortran.y"
  3078. {
  3079.                 if(is_true(ID_EXPR,yypvt[-2].subclass)){
  3080.                 use_variable(&(yypvt[-2]));
  3081.                 }
  3082.             } /*NOTREACHED*/ break;
  3083. case 425:
  3084. # line 2418 "fortran.y"
  3085. {
  3086.                 if(is_true(ID_EXPR,yypvt[-1].subclass)){
  3087.                 use_variable(&(yypvt[-1]));
  3088.                 }
  3089.             } /*NOTREACHED*/ break;
  3090. case 426:
  3091. # line 2424 "fortran.y"
  3092. {
  3093.                 if(is_true(ID_EXPR,yypvt[-3].subclass)){
  3094.                 use_variable(&(yypvt[-3]));
  3095.                 }
  3096.                 if(is_true(ID_EXPR,yypvt[-1].subclass)){
  3097.                 use_variable(&(yypvt[-1]));
  3098.                 }
  3099.  
  3100.             } /*NOTREACHED*/ break;
  3101. case 429:
  3102. # line 2443 "fortran.y"
  3103. {
  3104.                 ref_variable(&(yypvt[-0]));
  3105.                 primary_id_expr(&(yypvt[-0]),&(yyval));
  3106.             } /*NOTREACHED*/ break;
  3107. case 430:
  3108. # line 2450 "fortran.y"
  3109. {
  3110.                 ref_variable(&(yypvt[-0]));
  3111.                 primary_id_expr(&(yypvt[-0]),&(yyval));
  3112.             } /*NOTREACHED*/ break;
  3113. case 440:
  3114. # line 2483 "fortran.y"
  3115. {
  3116.                 integer_context=TRUE;
  3117.             } /*NOTREACHED*/ break;
  3118. case 441:
  3119. # line 2490 "fortran.y"
  3120. {
  3121.                 integer_context=FALSE;
  3122.                 yyval.class = type_byte(class_LABEL,type_LABEL);
  3123.                 yyval.subclass = 0;
  3124.             } /*NOTREACHED*/ break;
  3125. }
  3126.  
  3127.  
  3128.     goto yystack;           /* reset registers in driver code */
  3129. }
  3130.