home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / fchek284.zip / fortran.c < prev    next >
C/C++ Source or Header  |  1995-05-30  |  123KB  |  4,078 lines

  1.  
  2.  /*  A Bison parser, made from fortran.y with Bison version GNU Bison version 1.22
  3.   */
  4.  
  5. #define YYBISON 1  /* Identify Bison output.  */
  6.  
  7. #define    tok_identifier    258
  8. #define    tok_array_identifier    259
  9. #define    tok_label    260
  10. #define    tok_integer_const    261
  11. #define    tok_real_const    262
  12. #define    tok_dp_const    263
  13. #define    tok_complex_const    264
  14. #define    tok_dcomplex_const    265
  15. #define    tok_logical_const    266
  16. #define    tok_string    267
  17. #define    tok_hollerith    268
  18. #define    tok_edit_descriptor    269
  19. #define    tok_letter    270
  20. #define    tok_relop    271
  21. #define    tok_AND    272
  22. #define    tok_OR    273
  23. #define    tok_EQV    274
  24. #define    tok_NEQV    275
  25. #define    tok_NOT    276
  26. #define    tok_power    277
  27. #define    tok_concat    278
  28. #define    tok_ACCEPT    279
  29. #define    tok_ASSIGN    280
  30. #define    tok_BACKSPACE    281
  31. #define    tok_BLOCK    282
  32. #define    tok_BLOCKDATA    283
  33. #define    tok_BYTE    284
  34. #define    tok_CALL    285
  35. #define    tok_CHARACTER    286
  36. #define    tok_CLOSE    287
  37. #define    tok_COMMON    288
  38. #define    tok_COMPLEX    289
  39. #define    tok_CONTINUE    290
  40. #define    tok_DATA    291
  41. #define    tok_DIMENSION    292
  42. #define    tok_DO    293
  43. #define    tok_DOUBLE    294
  44. #define    tok_DOUBLECOMPLEX    295
  45. #define    tok_DOUBLEPRECISION    296
  46. #define    tok_DOWHILE    297
  47. #define    tok_ELSE    298
  48. #define    tok_ELSEIF    299
  49. #define    tok_END    300
  50. #define    tok_ENDDO    301
  51. #define    tok_ENDFILE    302
  52. #define    tok_ENDIF    303
  53. #define    tok_ENTRY    304
  54. #define    tok_EQUIVALENCE    305
  55. #define    tok_EXTERNAL    306
  56. #define    tok_FILE    307
  57. #define    tok_FORMAT    308
  58. #define    tok_FUNCTION    309
  59. #define    tok_GO    310
  60. #define    tok_GOTO    311
  61. #define    tok_IF    312
  62. #define    tok_IMPLICIT    313
  63. #define    tok_INCLUDE    314
  64. #define    tok_INQUIRE    315
  65. #define    tok_INTEGER    316
  66. #define    tok_INTRINSIC    317
  67. #define    tok_LOGICAL    318
  68. #define    tok_NAMELIST    319
  69. #define    tok_NONE    320
  70. #define    tok_OPEN    321
  71. #define    tok_PARAMETER    322
  72. #define    tok_PAUSE    323
  73. #define    tok_PRECISION    324
  74. #define    tok_PRINT    325
  75. #define    tok_PROGRAM    326
  76. #define    tok_READ    327
  77. #define    tok_REAL    328
  78. #define    tok_RETURN    329
  79. #define    tok_REWIND    330
  80. #define    tok_SAVE    331
  81. #define    tok_STOP    332
  82. #define    tok_SUBROUTINE    333
  83. #define    tok_THEN    334
  84. #define    tok_TO    335
  85. #define    tok_TYPE    336
  86. #define    tok_WHILE    337
  87. #define    tok_WRITE    338
  88. #define    tok_illegal    339
  89. #define    tok_empty    340
  90. #define    EOS    127
  91. #define    REDUCE    341
  92.  
  93. #line 9 "fortran.y"
  94.  
  95.  
  96. /*
  97.   fortran.c:
  98.  
  99.     Copyright (C) 1992 by Robert K. Moniot.
  100.     This program is free software.  Permission is granted to
  101.     modify it and/or redistribute it.  There is no warranty
  102.     for this program.
  103.  
  104.  
  105.         This grammar is ANSI standard-conforming, except for:
  106.         -- complex constant and a few other ambiguities needing
  107.            significant lookahead cannot be split across lines.
  108.  
  109.         Extensions supported:
  110.         -- Case insensitive.
  111.         -- Hollerith constants.
  112.         -- Variable names may be longer than 6 characters.  Also
  113.            allows underscores and dollar signs in names.
  114.         -- DO ... ENDDO and DO WHILE loop forms allowed.
  115.         -- NAMELIST supported.
  116.         -- TYPE and ACCEPT I/O statements allowed.
  117.         -- Tabs are permitted in input, and (except in character data)
  118.            expand into blanks up to the next column equal to 1 mod 8.
  119.         -- Type declarations INTEGER*2, REAL*8, etc. are allowed.
  120.         -- IMPLICIT NONE allowed.
  121.      */
  122.  
  123. /*  Author: R. Moniot
  124.  *  Date:   August 1988
  125.  *  Last revision: July 1993
  126.  */
  127.  
  128. #include <stdio.h>
  129. #include <string.h>
  130. #include <ctype.h>
  131. #include "ftnchek.h"
  132. #include "symtab.h"
  133.  
  134.     /* The following section is for use with bison-derived
  135.        parser.  Define alloca to be malloc for those cases
  136.        not covered by the cases covered there.  The ifdefs
  137.        are those in the skeleton parser with includes removed */
  138. #ifdef AIXC    /* IBM RS/6000 xlc compiler does it this way */
  139. #pragma alloca
  140. #endif
  141. #ifndef alloca
  142. #ifdef __GNUC__
  143. #else /* Not GNU C.  */
  144. #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__)
  145. #else /* Not sparc */
  146. #ifdef MSDOS
  147. #endif /* MSDOS */
  148. #endif /* Not sparc.  */
  149. #endif /* Not GNU C.  */
  150. #define alloca malloc
  151. #endif /* alloca now defined.  */
  152.  
  153. #ifndef YYDEBUG    /* If not declared otherwise... */
  154. int yydebug;    /* declare yydebug to satisfy extern in ftnchek.c */
  155. #ifdef DEVELOPMENT
  156. #define YYDEBUG 1        /* For development it is handy */
  157. #else
  158. #define YYDEBUG 0
  159. #endif
  160. #endif
  161.  
  162. #ifdef DEVELOPMENT
  163. #define DEBUG_PARSER
  164. #endif
  165.  
  166. PRIVATE int current_datatype,    /* set when parse type_name or type_stmt */
  167.     current_size_is_adjustable, /* set in CHARACTER declarations */
  168.     current_size_is_expression, /* set in CHARACTER declarations */
  169.     control_item_count;    /* count of items in control_info_list */
  170. int io_internal_file,    /* Flag for catching misuse of internal files */
  171.     io_list_directed,    /* Flag for use in processing io control lists */
  172.     io_warning_given;        /* to prevent multiple warnings */
  173. int
  174.     stmt_sequence_no;   /* set when parsing, reset to 0 at end_stmt */
  175. PRIVATE long current_typesize;    /* for type*len declarations: value of len */
  176. PRIVATE char *current_len_text;    /* for type*len declarations: text of len */
  177.  
  178. PRIVATE Token save_token;    /* Holds token shared by productions */
  179.  
  180. extern unsigned prev_stmt_line_num; /* shared with advance */
  181.  
  182. extern char *new_tree_text();    /* shared with symtab.c */
  183.  
  184. unsigned true_prev_stmt_line_num;    /* shared with symtab.c */
  185.  
  186. PRIVATE int
  187.     current_module_hash = -1,    /* hashtable index of current module name */
  188.     current_module_type,
  189.     executable_stmt=FALSE,
  190.     prev_stmt_class=0,         /* flags for lexer */
  191.     prev_goto=FALSE,
  192.     goto_flag=FALSE;    /* if unconditional GOTO was encountered */
  193.  
  194. int
  195.     complex_const_allowed=FALSE, /* for help in lookahead for these */
  196.     in_assignment_stmt=FALSE,
  197.     inside_format=FALSE,    /* when inside parens of FORMAT  */
  198.     integer_context=FALSE;    /* says integers-only are to follow */
  199.  
  200.  
  201. #ifdef DEBUG_PARSER
  202. PRIVATE void
  203.     print_comlist(), print_exprlist();
  204. #endif
  205.  
  206. PRIVATE void
  207.   check_stmt_sequence(),
  208.   init_io_ctrl_list(),
  209.   do_unexpr(),do_binexpr(),
  210.   END_processing();
  211. PRIVATE Token
  212.   *add_tree_node(),
  213.   *append_token(),
  214.   *empty_token();
  215. PRIVATE int
  216.   do_bounds_type();
  217. /* NOTE: As of Aug 1994 these are undergoing revision to separate the
  218.      use of class, subclass fields */
  219. /*
  220.   1. dim_bound_lists: dimensioning info for arrays:
  221.        token.class = no. of dimensions,  --> TOK_dims
  222.        token.subclass = no. of elements  --> TOK_elts
  223.   2. expressions
  224.        token.value.integer = hash index (of identifier)
  225.        token.class = type_byte = storage_class << 4 + datatype  --> TOK_type
  226.        token.subclass = flags: CONST_EXPR, LVALUE_EXPR, etc.    --> TOK_flags
  227.   3. common variable lists
  228.        token.subclass = flag: COMMA_FLAG used to handle extra/missing commas
  229.                                 --> TOK_flags
  230.   4. substring_interval
  231.        token.class = start index  --> TOK_start
  232.        token.subclass = end index --> TOK_end
  233. */
  234.  
  235. #define SEQ_HEADER   1
  236. #define SEQ_IMPLICIT 2
  237. #define SEQ_SPECIF   3
  238. #define SEQ_STMT_FUN 4
  239. #define SEQ_EXEC     5
  240. #define SEQ_END      6
  241.  
  242.  
  243. #ifndef YYLTYPE
  244. typedef
  245.   struct yyltype
  246.     {
  247.       int timestamp;
  248.       int first_line;
  249.       int first_column;
  250.       int last_line;
  251.       int last_column;
  252.       char *text;
  253.    }
  254.   yyltype;
  255.  
  256. #define YYLTYPE yyltype
  257. #endif
  258.  
  259. #ifndef YYSTYPE
  260. #define YYSTYPE int
  261. #endif
  262. #include <stdio.h>
  263.  
  264. #ifndef __cplusplus
  265. #ifndef __STDC__
  266. #define const
  267. #endif
  268. #endif
  269.  
  270.  
  271.  
  272. #define    YYFINAL        801
  273. #define    YYFLAG        -32768
  274. #define    YYNTBASE    101
  275.  
  276. #define YYTRANSLATE(x) ((unsigned)(x) <= 341 ? yytranslate[x] : 335)
  277.  
  278. static const char yytranslate[] = {     0,
  279.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  280.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  281.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  282.      2,     2,     2,     2,     2,    97,     2,     2,     2,    89,
  283.     88,    91,    98,    90,    94,    96,    93,     2,     2,     2,
  284.      2,     2,     2,     2,     2,     2,     2,    92,     2,    99,
  285.     95,   100,     2,     2,     2,     2,     2,     2,     2,     2,
  286.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  287.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  288.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  289.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  290.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  291.      2,     2,     2,     2,     2,     2,    86,     2,     2,     2,
  292.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  293.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  294.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  295.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  296.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  297.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  298.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  299.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  300.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  301.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  302.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  303.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  304.      2,     2,     2,     2,     2,     1,     2,     3,     4,     5,
  305.      6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
  306.     16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
  307.     26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
  308.     36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
  309.     46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
  310.     56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
  311.     66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
  312.     76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
  313.     87
  314. };
  315.  
  316.  
  317.  
  318. static const short yyr1[] = {     0,
  319.    101,   101,   102,   102,   103,   103,   103,   104,   104,   105,
  320.    105,   106,   106,   106,   106,   106,   107,   107,   107,   107,
  321.    108,   108,   109,   110,   111,   111,   111,   111,   111,   112,
  322.    112,   113,   113,   113,   113,   113,   113,   113,   113,   114,
  323.    114,   115,   115,   115,   115,   115,   116,   116,   116,   116,
  324.    116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
  325.    116,   116,   116,   117,   117,   118,   118,   118,   118,   119,
  326.    119,   119,   121,   120,   122,   122,   123,   124,   124,   124,
  327.    124,   125,   126,   127,   128,   128,   128,   129,   130,   130,
  328.    131,   132,   132,   133,   133,   134,   134,   135,   135,   136,
  329.    136,   137,   138,   138,   139,   140,   140,   141,   141,   141,
  330.    141,   143,   142,   144,   144,   145,   145,   146,   146,   146,
  331.    147,   148,   148,   149,   149,   149,   150,   150,   151,   152,
  332.    152,   152,   153,   153,   154,   154,   155,   155,   156,   157,
  333.    157,   158,   159,   160,   160,   161,   161,   162,   162,   162,
  334.    162,   163,   163,   163,   164,   164,   164,   164,   165,   165,
  335.    165,   165,   165,   166,   167,   168,   168,   169,   169,   170,
  336.    170,   171,   171,   171,   171,   172,   173,   173,   174,   175,
  337.    174,   177,   176,   178,   178,   179,   179,   180,   180,   180,
  338.    181,   182,   182,   184,   183,   185,   186,   186,   187,   188,
  339.    188,   189,   189,   190,   190,   191,   191,   192,   193,   193,
  340.    193,   195,   196,   194,   197,   197,   198,   198,   199,   199,
  341.    200,   200,   201,   201,   202,   202,   203,   203,   204,   204,
  342.    205,   206,   206,   208,   209,   207,   210,   210,   210,   210,
  343.    211,   212,   213,   213,   214,   214,   214,   215,   215,   216,
  344.    216,   217,   218,   219,   221,   220,   222,   223,   224,   222,
  345.    225,   226,   226,   227,   228,   227,   229,   227,   230,   230,
  346.    230,   231,   231,   232,   232,   233,   234,   235,   236,   236,
  347.    236,   236,   238,   237,   239,   237,   241,   240,   242,   242,
  348.    242,   242,   242,   243,   244,   244,   245,   246,   247,   245,
  349.    248,   249,   250,   248,   251,   251,   252,   252,   253,   253,
  350.    253,   254,   254,   255,   255,   256,   256,   257,   259,   258,
  351.    261,   260,   263,   262,   264,   264,   265,   266,   266,   267,
  352.    267,   268,   268,   269,   270,   270,   271,   271,   273,   272,
  353.    274,   274,   275,   275,   276,   276,   276,   277,   277,   278,
  354.    278,   278,   278,   279,   279,   279,   279,   279,   279,   280,
  355.    281,   281,   281,   283,   284,   282,   285,   286,   286,   287,
  356.    287,   288,   290,   289,   291,   289,   292,   289,   293,   294,
  357.    294,   295,   295,   296,   296,   297,   298,   299,   299,   300,
  358.    300,   301,   302,   303,   303,   303,   304,   304,   305,   305,
  359.    306,   306,   307,   307,   308,   308,   308,   308,   308,   309,
  360.    309,   309,   310,   310,   311,   311,   312,   312,   312,   312,
  361.    312,   312,   313,   313,   313,   313,   314,   314,   314,   314,
  362.    314,   315,   316,   317,   318,   319,   320,   321,   321,   322,
  363.    323,   323,   323,   324,   324,   325,   325,   325,   325,   326,
  364.    327,   327,   328,   329,   330,   330,   331,   331,   331,   331,
  365.    331,   331,   332,   333,   334
  366. };
  367.  
  368. static const short yyr2[] = {     0,
  369.      1,     0,     1,     2,     1,     1,     1,     1,     1,     2,
  370.      1,     1,     1,     1,     1,     2,     1,     1,     1,     1,
  371.      1,     2,     2,     3,     1,     1,     1,     1,     1,     1,
  372.      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
  373.      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
  374.      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
  375.      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
  376.      1,     1,     0,     4,     3,     6,     1,     3,     6,     3,
  377.      6,     2,     1,     1,     1,     1,     1,     1,     3,     6,
  378.      1,     0,     1,     1,     3,     1,     1,     2,     3,     2,
  379.      1,     3,     1,     3,     4,     1,     3,     1,     3,     1,
  380.      3,     0,     4,     3,     5,     3,     3,     1,     1,     1,
  381.      4,     2,     2,     3,     3,     4,     1,     2,     2,     3,
  382.      2,     1,     1,     2,     1,     2,     1,     1,     3,     1,
  383.      2,     2,     3,     1,     2,     1,     2,     3,     3,     3,
  384.      4,     1,     3,     1,     1,     1,     1,     1,     2,     1,
  385.      2,     1,     1,     1,     3,     1,     3,     1,     1,     1,
  386.      3,     1,     3,     1,     3,     1,     3,     3,     1,     0,
  387.      4,     0,     5,     1,     3,     1,     3,     3,     1,     3,
  388.      5,     1,     3,     0,     4,     3,     1,     3,     3,     1,
  389.      3,     2,     3,     1,     3,     1,     3,     3,     1,     2,
  390.      3,     0,     0,     6,     1,     3,     1,     1,     1,     3,
  391.      1,     3,     1,     1,     1,     1,     1,     3,     1,     1,
  392.      7,     3,     5,     0,     0,     6,     1,     1,     1,     1,
  393.      6,     4,     6,     7,     3,     6,     7,     1,     2,     2,
  394.      4,    10,     2,     3,     0,     5,     2,     0,     0,     8,
  395.      2,     2,     3,     5,     0,     7,     0,     6,     3,     4,
  396.      2,     3,     5,     3,     2,     2,     3,     3,     0,     1,
  397.      1,     1,     0,     3,     0,     4,     0,     5,     5,     6,
  398.      7,     3,     5,     1,     3,     5,     3,     0,     0,     7,
  399.      3,     0,     0,     7,     1,     3,     3,     1,     1,     3,
  400.      3,     3,     1,     1,     3,     1,     1,     7,     0,     6,
  401.      0,     6,     0,     6,     3,     5,     1,     3,     5,     1,
  402.      2,     3,     5,     1,     1,     1,     1,     1,     0,     6,
  403.      0,     1,     1,     2,     1,     1,     1,     3,     1,     1,
  404.      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
  405.      1,     2,     2,     0,     0,     5,     4,     0,     1,     1,
  406.      3,     1,     0,     3,     0,     5,     0,     6,     2,     1,
  407.      3,     1,     3,     2,     3,     4,     1,     0,     1,     1,
  408.      3,     1,     1,     1,     3,     3,     1,     3,     1,     3,
  409.      1,     2,     1,     3,     1,     2,     2,     3,     3,     1,
  410.      3,     3,     1,     3,     1,     3,     1,     1,     1,     1,
  411.      1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
  412.      1,     1,     1,     1,     1,     4,     4,     1,     3,     1,
  413.      2,     2,     2,     2,     2,     3,     4,     4,     5,     1,
  414.      1,     1,     1,     1,     1,     1,     1,     2,     2,     1,
  415.      1,     1,     1,     0,     1
  416. };
  417.  
  418. static const short yydefact[] = {     0,
  419.      0,   453,   454,     0,     0,   464,   327,     0,   101,   163,
  420.      0,   164,   321,     0,   157,     0,     0,     0,   464,     0,
  421.    162,   160,     0,     0,     0,     0,     0,   330,     0,     0,
  422.    112,     0,   339,    84,     0,   248,     0,   176,     0,   323,
  423.    155,     0,   158,     0,   319,     0,   279,     0,    73,   294,
  424.    156,     0,   334,     0,   279,    91,     0,   287,     7,     0,
  425.      3,     5,     8,    11,    12,     9,    21,     6,    13,    25,
  426.     29,    14,    40,    41,    15,    64,    65,    17,    30,    18,
  427.     77,     0,     0,    83,     0,    19,    88,     0,    20,     0,
  428.     32,    33,    34,    35,    36,    85,   152,   154,    86,    87,
  429.      0,    27,    26,    37,    38,    39,    28,    47,     0,    48,
  430.     42,    49,    43,   464,    44,    66,    67,   464,    70,    71,
  431.     72,    68,     0,    69,    50,    45,    51,    54,   283,    52,
  432.      0,    53,    55,    56,    60,    61,    62,    58,     0,    59,
  433.      0,    57,     0,    31,   240,    63,   373,    46,   238,   239,
  434.    237,   451,   452,    16,    10,    22,   427,   428,   429,   430,
  435.    431,   426,   424,   425,     0,   338,     0,   419,     0,   337,
  436.    415,   421,   423,   418,   420,   417,   451,   452,     0,   100,
  437.    455,   456,   379,     0,   132,     0,   138,     0,   127,     0,
  438.      0,   133,   135,   137,   276,     0,     0,   209,     0,   215,
  439.    218,   217,     0,   103,     0,   271,   161,   159,   267,   261,
  440.    257,     0,   258,     0,   331,     0,    23,   275,   262,     0,
  441.      0,     0,   197,     0,   249,   255,     0,     0,     0,   200,
  442.      0,     0,   140,     0,     0,     0,   280,   282,     0,   281,
  443.      0,     0,   384,     0,     0,   432,   405,   410,   413,     0,
  444.    202,     0,     0,   204,   206,     0,     0,     0,     4,     0,
  445.      0,    82,     0,    98,     0,   169,     0,   166,   168,     0,
  446.      0,   174,     0,   170,   172,     0,     0,     0,     0,    85,
  447.     86,    87,     0,   179,   234,   464,     0,     0,     0,     0,
  448.    253,   464,     0,     0,     0,   451,   452,     0,     0,     0,
  449.    285,   314,   317,   316,   393,   394,   397,   399,   401,   403,
  450.      0,     0,     0,   336,     0,   335,     0,     0,     0,     0,
  451.      0,     0,     0,   445,   368,   444,     0,     0,   295,     0,
  452.    442,   388,   441,     0,   443,     0,   465,     0,     0,   131,
  453.      0,   125,   128,   129,   124,     0,   134,   136,     0,     0,
  454.    227,   230,   229,     0,   208,     0,   210,     0,   212,   102,
  455.      0,   269,     0,     0,   274,   263,    75,    92,     0,     0,
  456.    196,     0,   341,     0,    24,     0,   199,     0,     0,   139,
  457.    141,   142,   144,   146,     0,     0,   192,   194,   278,   297,
  458.    298,     0,   406,   407,     0,     0,     0,     0,     0,   385,
  459.      0,   203,     0,   277,   301,   302,     0,    78,    92,    80,
  460.     92,    89,    92,    99,   148,     0,   463,   153,     0,   165,
  461.    189,     0,   149,     0,     0,     0,   150,   178,   182,   177,
  462.    180,     0,     0,     0,   245,   464,     0,     0,   254,     0,
  463.    265,     0,   402,     0,   316,   284,     0,     0,     0,     0,
  464.      0,     0,     0,   453,   454,     0,   305,   308,   335,     0,
  465.    292,     0,     0,   325,     0,   328,     0,   332,   375,   464,
  466.      0,   380,   382,   374,     0,   450,     0,     0,   369,   370,
  467.    417,   440,     0,   438,   422,     0,     0,   389,   390,   403,
  468.    416,     0,     0,     0,   130,   126,   110,     0,   106,   435,
  469.    108,     0,   211,   216,     0,   104,   270,     0,     0,    97,
  470.      0,    93,    94,    96,     0,     0,   119,   120,   118,   113,
  471.      0,   198,   361,   350,   351,   349,   356,     0,   354,   357,
  472.    355,     0,   358,   360,     0,   364,     0,   342,   343,   345,
  473.    346,   347,   359,   352,   353,     0,     0,   201,   143,   145,
  474.    147,     0,   309,     0,     0,     0,     0,     0,    74,   409,
  475.    408,   412,   411,   414,   207,   205,     0,     0,     0,     0,
  476.      0,   167,     0,   434,     0,   175,   171,   173,   151,     0,
  477.      0,   235,     0,   464,   250,     0,   464,   242,   464,     0,
  478.      0,   433,     0,     0,   315,   286,   395,   396,   398,   400,
  479.    404,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  480.    377,     0,   446,     0,     0,   367,     0,   436,     0,   296,
  481.    386,     0,   437,     0,     0,   105,     0,     0,   228,     0,
  482.    427,   460,   461,   462,     0,     0,   213,   219,     0,   221,
  483.    457,   226,   225,   223,     0,   259,     0,     0,   114,     0,
  484.      0,   123,     0,   122,     0,     0,   362,   363,     0,     0,
  485.    344,   256,     0,     0,     0,     0,   191,   193,     0,   299,
  486.    303,   288,     0,     0,     0,   188,   190,   186,     0,   184,
  487.    181,     0,     0,     0,     0,     0,     0,     0,     0,   264,
  488.      0,   417,   289,     0,     0,   306,   307,   293,   326,   329,
  489.    333,   376,   383,     0,   381,   448,   447,     0,   371,   372,
  490.    439,   391,   241,   322,   107,   111,   109,     0,   458,   459,
  491.      0,     0,     0,   268,     0,    76,    95,   117,   116,     0,
  492.      0,   348,   365,   340,   324,   320,   311,   313,   310,   195,
  493.    392,     0,     0,    79,    81,    90,     0,   183,     0,   236,
  494.      0,   243,   251,   246,     0,     0,     0,   272,     0,     0,
  495.    290,   378,   449,     0,     0,   220,   214,   222,   226,     0,
  496.    121,   115,     0,     0,   300,   304,   187,   185,   244,   247,
  497.    464,   266,     0,     0,   291,   231,     0,   260,   366,   312,
  498.      0,   273,   318,   232,     0,     0,   252,   233,     0,     0,
  499.      0
  500. };
  501.  
  502. static const short yydefgoto[] = {   799,
  503.     60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
  504.     70,    71,    72,    73,    74,    75,    76,    77,    78,   242,
  505.     79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
  506.    511,   512,   513,    89,    90,    91,   203,   187,   498,   499,
  507.     92,   221,   370,   515,   516,   517,   518,    93,   188,   189,
  508.    190,   191,   192,   193,    94,   232,   233,   234,   382,   383,
  509.     95,    96,    97,    98,    99,   100,   267,   268,   273,   274,
  510.    101,   102,   283,   581,   284,   580,   679,   680,   420,   103,
  511.    386,   387,   557,   104,   222,   105,   229,   106,   253,   254,
  512.    107,   197,   198,   505,   722,   199,   200,   637,   638,   639,
  513.    640,   350,   351,   201,   764,   108,   432,   682,   109,   110,
  514.    111,   112,   113,   114,   433,   115,   116,   117,   118,   374,
  515.    119,   364,   725,   120,   121,   122,   590,   363,   123,   591,
  516.    124,   125,   126,   127,   239,   128,   300,   448,   129,   258,
  517.    130,   131,   132,   133,   558,   742,   134,   567,   743,   456,
  518.    457,   552,   737,   301,   302,   303,   135,   235,   136,   184,
  519.    137,   228,   138,   139,   140,   141,   142,   143,   458,   167,
  520.    144,   224,   537,   538,   539,   540,   541,   542,   543,   544,
  521.    545,   659,   773,   145,   478,   479,   480,   146,   322,   609,
  522.    704,   147,   471,   472,   148,   168,   169,   487,   488,   740,
  523.    316,   305,   306,   307,   308,   309,   310,   247,   248,   249,
  524.    171,   172,   173,   250,   593,   575,   501,   149,   174,   483,
  525.    484,   175,   150,   324,   477,   176,   177,   178,   460,   643,
  526.    421,   434,   338
  527. };
  528.  
  529. static const short yypact[] = {  1139,
  530.    -27,-32768,-32768,  1304,   438,-32768,-32768,    53,-32768,-32768,
  531.     98,-32768,-32768,    63,-32768,   -18,   131,    98,-32768,   128,
  532. -32768,-32768,    31,    39,    62,    57,    54,-32768,    71,    98,
  533. -32768,    98,-32768,-32768,    99,-32768,   102,-32768,   216,-32768,
  534. -32768,    98,-32768,   162,-32768,   152,   276,   438,-32768,-32768,
  535. -32768,   805,-32768,   133,   276,-32768,   438,-32768,-32768,  1223,
  536. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  537. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  538. -32768,    98,    98,-32768,   207,-32768,-32768,    98,-32768,   115,
  539. -32768,-32768,-32768,-32768,-32768,    98,   210,-32768,    51,   113,
  540.    437,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   183,-32768,
  541. -32768,-32768,-32768,   143,-32768,-32768,-32768,  1380,-32768,-32768,
  542. -32768,-32768,   186,-32768,-32768,-32768,-32768,-32768,   824,-32768,
  543.    559,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   505,-32768,
  544.    603,-32768,   662,-32768,-32768,-32768,   225,-32768,   239,-32768,
  545. -32768,   248,   254,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  546. -32768,-32768,-32768,-32768,   840,-32768,   -10,   239,   266,   339,
  547. -32768,-32768,-32768,   239,-32768,-32768,   306,   314,   364,-32768,
  548. -32768,-32768,-32768,   322,-32768,    79,-32768,    83,-32768,    98,
  549.     74,-32768,   341,   373,-32768,    33,   241,-32768,   145,-32768,
  550. -32768,-32768,   170,-32768,   373,   364,-32768,-32768,-32768,-32768,
  551. -32768,   359,-32768,   367,-32768,   388,-32768,-32768,-32768,   124,
  552.    397,   187,-32768,   400,-32768,-32768,   395,   405,   214,-32768,
  553.     98,   -30,-32768,    98,   417,    98,-32768,-32768,   445,-32768,
  554.    233,    98,-32768,  1142,  1142,   260,    80,-32768,   261,   448,
  555. -32768,    98,   275,-32768,-32768,   454,   281,   485,-32768,   240,
  556.    267,-32768,   300,-32768,   463,-32768,   319,-32768,   373,   554,
  557.     59,   490,   327,-32768,   296,    98,   333,   509,   511,-32768,
  558.    510,-32768,   335,-32768,-32768,-32768,   232,   364,   552,   519,
  559. -32768,-32768,   364,   528,   523,-32768,-32768,  1026,   824,   533,
  560.    530,-32768,-32768,   504,-32768,   604,   606,-32768,   605,   260,
  561.    678,   336,   678,-32768,   539,   504,   678,   542,   678,   543,
  562.    120,   544,   867,-32768,   867,-32768,   840,   175,-32768,   824,
  563. -32768,   712,-32768,  1142,-32768,   840,-32768,   547,   678,-32768,
  564.    538,-32768,-32768,    98,-32768,   176,-32768,-32768,   898,   545,
  565. -32768,-32768,-32768,   254,-32768,   131,-32768,   131,-32768,-32768,
  566.     98,   546,   840,   840,-32768,-32768,-32768,    68,    98,   342,
  567. -32768,    98,  1039,   840,-32768,   678,-32768,    98,   540,-32768,
  568. -32768,    98,-32768,   548,   678,   318,-32768,-32768,-32768,-32768,
  569. -32768,   551,    80,    80,  1142,  1142,  1142,  1142,  1142,-32768,
  570.    558,-32768,    95,-32768,-32768,-32768,   678,-32768,    68,-32768,
  571.     68,-32768,    68,-32768,-32768,    98,-32768,-32768,   933,-32768,
  572. -32768,    59,-32768,    98,    59,   343,-32768,-32768,-32768,-32768,
  573. -32768,   840,   326,   364,-32768,-32768,   555,   561,-32768,   562,
  574. -32768,  1026,   605,   563,   175,-32768,   824,   568,   840,   840,
  575.    840,   840,  1026,   550,   560,   349,-32768,-32768,   504,   564,
  576. -32768,   824,   366,-32768,   382,-32768,   392,-32768,-32768,-32768,
  577.    402,-32768,   504,-32768,   960,   260,   566,   573,   572,-32768,
  578.    411,   504,   415,-32768,-32768,   344,   575,   574,   504,   159,
  579. -32768,   431,   541,   432,-32768,-32768,-32768,   440,-32768,   260,
  580.    584,   150,-32768,-32768,   299,-32768,-32768,   204,   211,-32768,
  581.    589,   588,-32768,-32768,   449,   590,   239,-32768,   607,-32768,
  582.    609,-32768,-32768,-32768,-32768,-32768,-32768,  1039,-32768,-32768,
  583. -32768,   628,-32768,-32768,   673,-32768,   612,  1039,-32768,-32768,
  584. -32768,-32768,-32768,-32768,-32768,   227,   460,-32768,-32768,-32768,
  585. -32768,   467,-32768,   598,   616,    98,   600,   824,-32768,    80,
  586.     80,-32768,-32768,-32768,-32768,-32768,   824,   468,   615,   617,
  587.    618,-32768,   619,   260,   621,-32768,-32768,-32768,-32768,   689,
  588.    512,   504,   971,-32768,-32768,   471,-32768,-32768,-32768,   840,
  589.    624,   260,   623,   824,-32768,-32768,   604,   604,   606,-32768,
  590.    695,   371,   678,   731,   350,   631,   640,   641,   642,   364,
  591. -32768,   774,-32768,   643,   991,-32768,   541,-32768,   840,-32768,
  592. -32768,   840,-32768,   644,   660,-32768,   898,  1002,-32768,   634,
  593.    656,-32768,-32768,-32768,   287,   287,   658,-32768,   659,-32768,
  594. -32768,   663,-32768,-32768,   669,-32768,   671,    68,-32768,    98,
  595.     98,-32768,   712,-32768,    98,   252,-32768,-32768,  1026,   672,
  596. -32768,-32768,   675,   676,    98,   731,-32768,-32768,   840,   530,
  597.    530,-32768,   677,   679,   680,-32768,-32768,   655,   492,-32768,
  598. -32768,   682,  1026,   684,   364,   685,   496,   364,   251,-32768,
  599.   1026,   664,-32768,   824,   369,-32768,-32768,-32768,-32768,-32768,
  600. -32768,-32768,-32768,   687,-32768,-32768,-32768,   686,-32768,-32768,
  601. -32768,   504,-32768,-32768,-32768,-32768,-32768,  1026,-32768,-32768,
  602.    299,   696,  1064,-32768,   700,-32768,-32768,-32768,-32768,   499,
  603.    500,-32768,-32768,-32768,-32768,-32768,-32768,   693,-32768,-32768,
  604.    504,   704,   705,-32768,-32768,-32768,   749,-32768,   689,-32768,
  605.    706,-32768,-32768,-32768,   707,   708,   710,   709,  1026,   377,
  606. -32768,-32768,-32768,   714,   713,-32768,-32768,-32768,-32768,   711,
  607. -32768,-32768,   694,   731,-32768,-32768,-32768,-32768,-32768,-32768,
  608. -32768,-32768,  1026,   717,-32768,-32768,  1026,-32768,-32768,-32768,
  609.    364,-32768,-32768,   729,   721,  1026,-32768,-32768,   800,   821,
  610. -32768
  611. };
  612.  
  613. static const short yypgoto[] = {-32768,
  614. -32768,   763,-32768,-32768,   820,-32768,-32768,   822,-32768,-32768,
  615. -32768,-32768,   720,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  616. -32768,-32768,-32768,-32768,-32768,   754,   -98,-32768,-32768,-32768,
  617.    -75,-32768,   192,-32768,-32768,-32768,-32768,    11,-32768,   215,
  618. -32768,-32768,-32768,   199,   -58,-32768,-32768,-32768,   650,  -168,
  619. -32768,   665,  -169,-32768,-32768,-32768,   625,-32768,-32768,   474,
  620. -32768,   -97,-32768,-32768,   -90,   -86,-32768,   442,   -76,   435,
  621. -32768,-32768,-32768,-32768,   279,-32768,-32768,   117,  -109,-32768,
  622. -32768,   308,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   459,
  623. -32768,-32768,  -171,-32768,-32768,-32768,   524,-32768,   146,-32768,
  624.    158,-32768,   381,  -178,-32768,-32768,-32768,-32768,     8,-32768,
  625. -32768,-32768,-32768,-32768,  -401,-32768,-32768,   845,    27,-32768,
  626. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   125,
  627. -32768,-32768,-32768,-32768,   830,-32768,-32768,-32768,-32768,-32768,
  628. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  -255,
  629.    283,-32768,-32768,  -282,  -420,-32768,-32768,-32768,-32768,-32768,
  630. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  -131,    37,
  631. -32768,-32768,-32768,   360,  -507,-32768,-32768,-32768,-32768,-32768,
  632. -32768,-32768,-32768,-32768,-32768,-32768,   270,-32768,-32768,-32768,
  633. -32768,-32768,-32768,   277,-32768,-32768,-32768,-32768,-32768,-32768,
  634.   -115,-32768,   148,   439,   441,  -270,   -51,  -203,  -108,    56,
  635.    578,-32768,  -471,  -544,  -639,  -580,   264,  -177,-32768,  -320,
  636.    278,-32768,-32768,   -99,  -445,    32,    43,    40,    -9,-32768,
  637.   -263,    -6,  -200
  638. };
  639.  
  640.  
  641. #define    YYLAST        1463
  642.  
  643.  
  644. static const short yytable[] = {   179,
  645.    246,   183,   279,   280,   194,   362,   418,   315,   205,   318,
  646.    281,   320,   206,   304,   282,   492,   444,   352,   353,   343,
  647.    220,   347,   223,   277,   202,   357,   595,   443,   204,   614,
  648.    661,   151,   230,   641,   586,   151,     3,   240,   684,   153,
  649.    393,   394,   152,   153,   255,   240,   152,   486,   151,   328,
  650.    212,   758,   326,   181,   182,   380,   153,   463,   154,   152,
  651.    170,   465,   231,   467,   417,   181,   182,   195,   331,   333,
  652.    181,   182,   260,   261,   335,   329,   181,   182,   263,   330,
  653.    265,   181,   182,   494,   241,   185,   269,   438,   180,   275,
  654.    275,   151,   440,   257,   214,    37,   185,   181,   182,   153,
  655.    181,   182,   152,   170,   287,   185,   266,   288,   215,   272,
  656.    272,   293,   170,   216,   733,   181,   182,   181,   182,   209,
  657.    547,   196,     2,     3,   210,   157,   158,   159,   160,   161,
  658.    162,   163,   164,     2,     3,   181,   182,   765,   751,   218,
  659.    298,   271,   217,   792,   292,   181,   182,   419,   661,   151,
  660.    213,   568,   181,   455,   295,   186,   219,   153,   510,   345,
  661.    152,   207,   297,   719,   720,   296,   186,   312,   342,   708,
  662.    397,   340,   398,   595,   347,   186,   341,   343,   225,   605,
  663.    194,   194,   601,   445,   503,   687,   170,   252,     2,     3,
  664.    226,   560,   561,   449,   450,   459,   208,   459,   185,   426,
  665.    264,   459,   276,   459,   202,   473,   794,   469,   165,   367,
  666.    470,   482,   368,   244,   304,   798,   489,   245,   251,   196,
  667.    482,   379,   449,   450,   384,   252,   388,   227,   151,   449,
  668.    450,   286,   392,   585,   358,   354,   153,   359,   196,   152,
  669.    236,   644,   401,     2,     3,   449,   450,   508,   509,   641,
  670.   -450,   641,   395,   553,   231,   360,   396,   523,   546,   361,
  671.     34,   496,   485,   524,   525,   526,   275,   294,   186,   449,
  672.    450,   476,   371,   476,   527,   670,   372,   285,   181,   182,
  673.    490,   237,   399,   334,   671,   293,   272,   238,   562,   563,
  674.    564,   645,   157,   158,   159,   160,   161,   500,   646,   377,
  675.    270,   181,   182,   378,   631,   158,   159,   160,   161,   632,
  676.    633,   634,   576,   321,   662,   578,   582,   435,   390,   695,
  677.    436,   437,   391,   352,   353,   408,   355,   323,   409,   196,
  678.    356,   304,   730,   569,   194,   570,   325,   571,   757,   732,
  679.    528,   529,   327,   530,   531,   532,   304,   533,   534,   535,
  680.    536,   205,   410,   395,   332,   411,   481,   396,   514,   519,
  681.    402,   334,   522,   202,   403,   202,   405,   574,   548,   337,
  682.    406,   506,   384,     2,     3,   554,   157,   158,   159,   160,
  683.    161,   162,   163,   164,   349,   412,   425,   151,   413,   151,
  684.    592,   298,   635,   255,  -387,   153,   636,   153,   152,   514,
  685.    152,   514,   336,   514,   415,   555,   269,   556,   416,   703,
  686.    339,   760,   423,   583,   275,   584,   424,   652,   427,   654,
  687.    430,   461,   424,   476,   431,   462,   266,   520,   579,   620,
  688.    348,   521,   424,   447,   272,   698,   602,   290,   603,   447,
  689.      2,     3,   304,   157,   158,   159,   160,   161,   162,   163,
  690.    164,   304,   365,   606,   761,   603,   693,   644,   447,   299,
  691.    694,   349,   785,   610,   244,    10,   447,    12,   245,   607,
  692.     15,   603,   697,   366,   689,    20,    21,    22,   304,   608,
  693.    375,   603,   279,   280,   753,   369,   304,   756,   373,   611,
  694.    281,   612,   630,   376,   282,   642,   473,    41,  -372,    43,
  695.   -372,   278,   618,   482,   619,   385,   712,     2,     3,    51,
  696.    157,   158,   159,   160,   161,   162,   163,   164,   623,   625,
  697.    619,   603,   449,   450,   624,   298,   165,   626,   166,   627,
  698.    389,   246,   297,   400,   739,   296,   649,   482,   650,   404,
  699.     10,   354,    12,     2,     3,    15,   388,   663,   414,   603,
  700.     20,    21,    22,   741,   664,   672,   665,   603,   686,   417,
  701.    584,     2,     3,   476,   157,   158,   159,   160,   161,   162,
  702.    163,   164,    41,   407,    43,   500,   500,   685,   304,   748,
  703.    422,   749,   688,   755,    51,   584,   771,   772,   619,   650,
  704.    795,   728,   729,   313,   428,   314,   597,   598,   244,   429,
  705.    271,   490,   245,   215,   439,     2,     3,   246,   157,   158,
  706.    159,   160,   161,   162,   163,   164,   441,   442,   446,   447,
  707.    453,   451,   452,   298,   464,   692,   493,   466,   468,   474,
  708.    495,   246,   549,   657,   502,   507,   559,   551,   514,   592,
  709.    519,   519,   790,   587,  -455,   519,   588,   311,   710,   166,
  710.    565,   589,   594,   596,  -456,   738,   297,   615,   604,   296,
  711.    616,   617,   621,   622,     2,     3,   574,   157,   158,   159,
  712.    160,   161,   162,   163,   164,   628,   647,   648,   658,   651,
  713.    454,   455,   298,   157,   158,   159,   160,   161,   162,   163,
  714.    164,   317,   666,   314,   669,   653,   244,   655,   298,   660,
  715.    245,   667,   673,   678,   674,   675,   676,   592,   677,   690,
  716. -32768,   642,   691,   769,     2,     3,   699,   157,   158,   159,
  717.    160,   161,   162,   163,   164,   700,   701,   702,   718,   713,
  718.    706,   592,   298,     2,     3,   574,   157,   158,   159,   160,
  719.    161,   162,   163,   164,   574,   714,  -463,   721,   747,   723,
  720.    319,   298,   314,  -224,   724,   244,   726,   734,   759,   245,
  721.    735,   736,   744,   777,   745,   746,   165,   750,   314,   752,
  722.    754,   244,   762,   763,   791,   245,     2,     3,   770,   157,
  723.    158,   159,   160,   161,   162,   163,   164,   774,   767,   775,
  724.    776,   779,   780,   789,   298,   782,   788,   781,   783,   800,
  725.    165,   786,   787,   475,   793,   244,   797,     2,     3,   245,
  726.    157,   158,   159,   160,   161,   162,   163,   164,   796,   165,
  727.    801,   314,   259,   155,   244,   156,     2,     3,   245,   157,
  728.    158,   159,   160,   161,   162,   163,   164,   291,   262,   727,
  729.    346,   715,     2,     3,   298,   157,   158,   159,   160,   161,
  730.    162,   163,   164,   731,   344,   550,   381,   572,   577,   681,
  731.    298,   566,   165,   668,   470,   778,   766,   244,   211,     2,
  732.      3,   245,   157,   158,   159,   160,   161,   162,   163,   164,
  733.    768,   504,   629,   784,   256,   696,   709,   656,   705,   599,
  734.    243,   717,   600,   165,     0,     0,   711,     0,   244,     0,
  735.      2,     3,   245,   157,   158,   159,   160,   161,   162,   163,
  736.    164,   491,   299,     0,     0,     0,     0,   244,     0,     0,
  737.      0,   245,     0,     0,     0,     0,     0,     0,   165,     0,
  738.      0,     0,     0,   244,     0,     2,     3,   245,   157,   158,
  739.    159,   160,   161,   162,   163,   164,     0,     0,     0,     0,
  740.      0,     0,     0,     0,     0,   165,     0,     0,   475,     0,
  741.    244,     0,     2,     3,   245,   157,   158,   159,   160,   161,
  742.    162,   163,   164,     2,     3,     0,   157,   158,   159,   160,
  743.    161,   162,   163,   164,     0,     0,   165,     0,   497,     0,
  744.      0,   244,     0,     2,     3,   245,   157,   158,   159,   160,
  745.    161,   162,   163,   164,     2,     3,     0,   157,   158,   159,
  746.    160,   161,   162,   163,   164,     0,     0,     0,     0,     0,
  747.      0,   165,     0,   573,     0,     0,   244,     0,     2,     3,
  748.    245,   157,   158,   159,   160,   161,   162,   163,   164,     0,
  749.      0,     0,     0,     0,   523,     0,     0,   613,   165,     0,
  750.    524,   525,   526,   244,     0,     0,     0,   245,     0,   165,
  751.    683,   527,     0,     0,   244,     0,   181,   182,   245,   157,
  752.    158,   159,   160,   161,   632,   633,   634,     0,   707,   165,
  753.      0,     0,     0,     0,   244,     0,     0,     0,   245,     0,
  754.    165,     0,   716,     0,     0,   244,     0,     0,     0,   245,
  755.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  756.      0,     0,     0,     0,   165,     0,     0,     0,     0,   244,
  757.      0,     0,     0,   245,     0,     0,     0,   528,   529,     0,
  758.    530,   531,   532,     0,   533,   534,   535,   536,    -2,     1,
  759.      0,     2,     3,     4,     2,     3,     0,   157,   158,   159,
  760.    160,   161,   162,   163,   164,     0,     0,   635,     0,     0,
  761.      0,   636,     5,     6,     7,     8,     9,    10,    11,    12,
  762.     13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
  763.     23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
  764.      0,    33,    34,    35,    36,    37,    38,    39,    40,    41,
  765.     42,    43,    44,     0,    45,    46,    47,     0,    48,    49,
  766.     50,    51,    52,    53,    54,    55,    56,     0,     0,    57,
  767.      0,    58,    -1,     1,    59,     2,     3,     4,     0,     0,
  768.    165,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  769.      0,     0,     0,     0,     0,     0,     5,     6,     7,     8,
  770.      9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
  771.     19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
  772.     29,    30,    31,    32,     0,    33,    34,    35,    36,    37,
  773.     38,    39,    40,    41,    42,    43,    44,     0,    45,    46,
  774.     47,     0,    48,    49,    50,    51,    52,    53,    54,    55,
  775.     56,     0,     0,    57,     1,    58,     2,     3,    59,     0,
  776.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  777.      0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
  778.      8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
  779.     18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
  780.     28,    29,    30,    31,    32,     0,    33,    34,    35,    36,
  781.     37,    38,     0,    40,    41,    42,    43,    44,     0,    45,
  782.     46,    47,     0,    48,    49,    50,    51,    52,    53,    54,
  783.     55,    56,     2,     3,    57,     0,    58,     0,     0,     0,
  784.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  785.      0,     0,     0,     5,     6,     7,     0,     0,     0,    11,
  786.      0,    13,     0,     0,    16,     0,     0,     0,     0,     0,
  787.      0,     0,     0,     0,   289,     0,    28,     0,     0,     0,
  788.      0,     0,     0,     0,    35,    36,    37,     0,     0,    40,
  789.      0,     0,     0,     0,     0,    45,     0,    47,     0,    48,
  790.      0,    50,     0,    52,    53,     0,    55,     0,   290,     0,
  791.     57,     0,    58
  792. };
  793.  
  794. static const short yycheck[] = {     6,
  795.     52,    11,   101,   101,    14,   206,   270,   139,    18,   141,
  796.    101,   143,    19,   129,   101,   336,   299,   196,   196,   188,
  797.     30,   191,    32,   100,    17,   197,   447,   298,    18,   475,
  798.    538,     0,    42,   505,   436,     4,     4,    47,   583,     0,
  799.    244,   245,     0,     4,    54,    55,     4,   330,    17,   165,
  800.     24,   691,   152,     3,     4,    86,    17,   313,    86,    17,
  801.      5,   317,    93,   319,     6,     3,     4,    86,   168,   169,
  802.      3,     4,    82,    83,   174,    86,     3,     4,    88,    90,
  803.     90,     3,     4,   339,    48,    23,    96,   288,    36,    99,
  804.    100,    60,   293,    57,    38,    57,    23,     3,     4,    60,
  805.      3,     4,    60,    48,   114,    23,    96,   114,    52,    99,
  806.    100,   118,    57,    57,   659,     3,     4,     3,     4,    89,
  807.    376,    89,     3,     4,    86,     6,     7,     8,     9,    10,
  808.     11,    12,    13,     3,     4,     3,     4,   718,   683,    86,
  809.     21,    91,    86,   783,   118,     3,     4,    89,   656,   118,
  810.     89,   407,     3,     4,   123,    93,    86,   118,    91,    86,
  811.    118,    34,   123,   635,   636,   123,    93,   131,    86,   615,
  812.     91,    93,    93,   594,   344,    93,   186,   346,    80,   462,
  813.    190,   191,   453,   299,   356,   587,   131,    93,     3,     4,
  814.     89,   395,   396,    19,    20,   311,    69,   313,    23,   276,
  815.     86,   317,    90,   319,   197,   321,   787,    88,    89,    86,
  816.     91,   327,    89,    94,   330,   796,   332,    98,    86,    89,
  817.    336,   231,    19,    20,   234,    93,   236,    12,   197,    19,
  818.     20,    89,   242,   434,    90,   196,   197,    93,    89,   197,
  819.     89,   505,   252,     3,     4,    19,    20,   363,   364,   721,
  820.     92,   723,    94,   385,    93,    86,    98,     6,   374,    90,
  821.     54,    86,    88,    12,    13,    14,   276,    82,    93,    19,
  822.     20,   323,    86,   325,    23,   558,    90,    95,     3,     4,
  823.    332,     6,    22,    23,   567,   292,   276,    12,   397,   398,
  824.    399,    88,     6,     7,     8,     9,    10,   349,    88,    86,
  825.     91,     3,     4,    90,     6,     7,     8,     9,    10,    11,
  826.     12,    13,   422,    89,    88,   425,   432,    86,    86,   602,
  827.     89,    90,    90,   502,   502,    86,    86,    89,    89,    89,
  828.     90,   447,   653,   409,   344,   411,    89,   413,    88,    88,
  829.     89,    90,    89,    92,    93,    94,   462,    96,    97,    98,
  830.     99,   361,    86,    94,    89,    89,   325,    98,   368,   369,
  831.     86,    23,   372,   356,    90,   358,    86,   419,   378,     6,
  832.     90,   361,   382,     3,     4,   385,     6,     7,     8,     9,
  833.     10,    11,    12,    13,    89,    86,    91,   356,    89,   358,
  834.    442,    21,    94,   403,    89,   356,    98,   358,   356,   409,
  835.    358,   411,    89,   413,    86,    88,   416,    90,    90,   610,
  836.     89,   694,    86,    88,   424,    90,    90,   517,    86,   519,
  837.     86,    86,    90,   475,    90,    90,   416,    86,    86,    86,
  838.     90,    90,    90,    90,   424,    86,    88,    79,    90,    90,
  839.      3,     4,   558,     6,     7,     8,     9,    10,    11,    12,
  840.     13,   567,    86,    88,    86,    90,    86,   721,    90,    89,
  841.     90,    89,    86,   470,    94,    29,    90,    31,    98,    88,
  842.     34,    90,   604,    86,   590,    39,    40,    41,   594,    88,
  843.     86,    90,   581,   581,   685,    89,   602,   688,    89,    88,
  844.    581,    90,   502,    89,   581,   505,   612,    61,    88,    63,
  845.     90,    65,    88,   619,    90,    89,   622,     3,     4,    73,
  846.      6,     7,     8,     9,    10,    11,    12,    13,    88,    88,
  847.     90,    90,    19,    20,   493,    21,    89,    88,    91,    90,
  848.     86,   583,   493,    86,   666,   493,    88,   653,    90,    86,
  849.     29,   502,    31,     3,     4,    34,   556,    88,    86,    90,
  850.     39,    40,    41,   669,    88,    88,    90,    90,    88,     6,
  851.     90,     3,     4,   615,     6,     7,     8,     9,    10,    11,
  852.     12,    13,    61,    89,    63,   627,   628,   584,   694,    88,
  853.     91,    90,   589,    88,    73,    90,    88,    88,    90,    90,
  854.    791,   650,   651,    89,    86,    91,   449,   450,    94,    89,
  855.     91,   653,    98,    52,    86,     3,     4,   659,     6,     7,
  856.      8,     9,    10,    11,    12,    13,    89,    95,    86,    90,
  857.     16,    18,    17,    21,    86,   594,    80,    86,    86,    86,
  858.     93,   683,    93,     6,    90,    90,    86,    90,   648,   691,
  859.    650,   651,   774,    89,    95,   655,    86,    89,   617,    91,
  860.     93,    90,    90,    86,    95,   665,   617,    92,    95,   617,
  861.     88,    90,    88,    90,     3,     4,   718,     6,     7,     8,
  862.      9,    10,    11,    12,    13,    92,    88,    90,     6,    90,
  863.      3,     4,    21,     6,     7,     8,     9,    10,    11,    12,
  864.     13,    89,    95,    91,    95,    89,    94,    89,    21,    88,
  865.     98,    86,    88,    15,    88,    88,    88,   759,    88,    86,
  866.     16,   721,    90,   723,     3,     4,    86,     6,     7,     8,
  867.      9,    10,    11,    12,    13,    86,    86,    86,    95,    86,
  868.     88,   783,    21,     3,     4,   787,     6,     7,     8,     9,
  869.     10,    11,    12,    13,   796,    86,    91,    90,    94,    91,
  870.     89,    21,    91,    91,    86,    94,    86,    86,    95,    98,
  871.     86,    86,    86,    15,    86,    86,    89,    86,    91,    86,
  872.     86,    94,    86,    88,   781,    98,     3,     4,    79,     6,
  873.      7,     8,     9,    10,    11,    12,    13,    95,    93,    86,
  874.     86,    86,    86,   100,    21,    86,    86,    90,    90,     0,
  875.     89,    88,    90,    92,    88,    94,    86,     3,     4,    98,
  876.      6,     7,     8,     9,    10,    11,    12,    13,    90,    89,
  877.      0,    91,    60,     4,    94,     4,     3,     4,    98,     6,
  878.      7,     8,     9,    10,    11,    12,    13,   118,    85,   648,
  879.    191,   627,     3,     4,    21,     6,     7,     8,     9,    10,
  880.     11,    12,    13,   655,   190,   382,   232,   416,   424,   581,
  881.     21,   403,    89,   556,    91,   749,   721,    94,    24,     3,
  882.      4,    98,     6,     7,     8,     9,    10,    11,    12,    13,
  883.    723,   358,   502,   759,    55,   603,   617,   528,   612,   451,
  884.     86,   628,   452,    89,    -1,    -1,   619,    -1,    94,    -1,
  885.      3,     4,    98,     6,     7,     8,     9,    10,    11,    12,
  886.     13,   334,    89,    -1,    -1,    -1,    -1,    94,    -1,    -1,
  887.     -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,    89,    -1,
  888.     -1,    -1,    -1,    94,    -1,     3,     4,    98,     6,     7,
  889.      8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
  890.     -1,    -1,    -1,    -1,    -1,    89,    -1,    -1,    92,    -1,
  891.     94,    -1,     3,     4,    98,     6,     7,     8,     9,    10,
  892.     11,    12,    13,     3,     4,    -1,     6,     7,     8,     9,
  893.     10,    11,    12,    13,    -1,    -1,    89,    -1,    91,    -1,
  894.     -1,    94,    -1,     3,     4,    98,     6,     7,     8,     9,
  895.     10,    11,    12,    13,     3,     4,    -1,     6,     7,     8,
  896.      9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
  897.     -1,    89,    -1,    91,    -1,    -1,    94,    -1,     3,     4,
  898.     98,     6,     7,     8,     9,    10,    11,    12,    13,    -1,
  899.     -1,    -1,    -1,    -1,     6,    -1,    -1,    88,    89,    -1,
  900.     12,    13,    14,    94,    -1,    -1,    -1,    98,    -1,    89,
  901.     90,    23,    -1,    -1,    94,    -1,     3,     4,    98,     6,
  902.      7,     8,     9,    10,    11,    12,    13,    -1,    88,    89,
  903.     -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    98,    -1,
  904.     89,    -1,    91,    -1,    -1,    94,    -1,    -1,    -1,    98,
  905.     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
  906.     -1,    -1,    -1,    -1,    89,    -1,    -1,    -1,    -1,    94,
  907.     -1,    -1,    -1,    98,    -1,    -1,    -1,    89,    90,    -1,
  908.     92,    93,    94,    -1,    96,    97,    98,    99,     0,     1,
  909.     -1,     3,     4,     5,     3,     4,    -1,     6,     7,     8,
  910.      9,    10,    11,    12,    13,    -1,    -1,    94,    -1,    -1,
  911.     -1,    98,    24,    25,    26,    27,    28,    29,    30,    31,
  912.     32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
  913.     42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
  914.     -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
  915.     62,    63,    64,    -1,    66,    67,    68,    -1,    70,    71,
  916.     72,    73,    74,    75,    76,    77,    78,    -1,    -1,    81,
  917.     -1,    83,     0,     1,    86,     3,     4,     5,    -1,    -1,
  918.     89,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
  919.     -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    26,    27,
  920.     28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
  921.     38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
  922.     48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
  923.     58,    59,    60,    61,    62,    63,    64,    -1,    66,    67,
  924.     68,    -1,    70,    71,    72,    73,    74,    75,    76,    77,
  925.     78,    -1,    -1,    81,     1,    83,     3,     4,    86,    -1,
  926.     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
  927.     -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    26,
  928.     27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
  929.     37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
  930.     47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
  931.     57,    58,    -1,    60,    61,    62,    63,    64,    -1,    66,
  932.     67,    68,    -1,    70,    71,    72,    73,    74,    75,    76,
  933.     77,    78,     3,     4,    81,    -1,    83,    -1,    -1,    -1,
  934.     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
  935.     -1,    -1,    -1,    24,    25,    26,    -1,    -1,    -1,    30,
  936.     -1,    32,    -1,    -1,    35,    -1,    -1,    -1,    -1,    -1,
  937.     -1,    -1,    -1,    -1,    45,    -1,    47,    -1,    -1,    -1,
  938.     -1,    -1,    -1,    -1,    55,    56,    57,    -1,    -1,    60,
  939.     -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,
  940.     -1,    72,    -1,    74,    75,    -1,    77,    -1,    79,    -1,
  941.     81,    -1,    83
  942. };
  943. /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  944. #line 3 "/usr/lib/bison.simple"
  945.  
  946. /* Skeleton output parser for bison,
  947.    Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
  948.  
  949.    This program is free software; you can redistribute it and/or modify
  950.    it under the terms of the GNU General Public License as published by
  951.    the Free Software Foundation; either version 1, or (at your option)
  952.    any later version.
  953.  
  954.    This program is distributed in the hope that it will be useful,
  955.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  956.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  957.    GNU General Public License for more details.
  958.  
  959.    You should have received a copy of the GNU General Public License
  960.    along with this program; if not, write to the Free Software
  961.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  962.  
  963.  
  964. #ifndef alloca
  965. #ifdef __GNUC__
  966. #define alloca __builtin_alloca
  967. #else /* not GNU C.  */
  968. #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
  969. #include <alloca.h>
  970. #else /* not sparc */
  971. #if defined (MSDOS) && !defined (__TURBOC__)
  972. #include <malloc.h>
  973. #else /* not MSDOS, or __TURBOC__ */
  974. #if defined(_AIX)
  975. #include <malloc.h>
  976.  #pragma alloca
  977. #else /* not MSDOS, __TURBOC__, or _AIX */
  978. #ifdef __hpux
  979. #ifdef __cplusplus
  980. extern "C" {
  981. void *alloca (unsigned int);
  982. };
  983. #else /* not __cplusplus */
  984. void *alloca ();
  985. #endif /* not __cplusplus */
  986. #endif /* __hpux */
  987. #endif /* not _AIX */
  988. #endif /* not MSDOS, or __TURBOC__ */
  989. #endif /* not sparc.  */
  990. #endif /* not GNU C.  */
  991. #endif /* alloca not defined.  */
  992.  
  993. /* This is the parser code that is written into each bison parser
  994.   when the %semantic_parser declaration is not specified in the grammar.
  995.   It was written by Richard Stallman by simplifying the hairy parser
  996.   used when %semantic_parser is specified.  */
  997.  
  998. /* Note: there must be only one dollar sign in this file.
  999.    It is replaced by the list of actions, each action
  1000.    as one case of the switch.  */
  1001.  
  1002. #define yyerrok        (yyerrstatus = 0)
  1003. #define yyclearin    (yychar = YYEMPTY)
  1004. #define YYEMPTY        -2
  1005. #define YYEOF        0
  1006. #define YYACCEPT    return(0)
  1007. #define YYABORT     return(1)
  1008. #define YYERROR        goto yyerrlab1
  1009. /* Like YYERROR except do call yyerror.
  1010.    This remains here temporarily to ease the
  1011.    transition to the new meaning of YYERROR, for GCC.
  1012.    Once GCC version 2 has supplanted version 1, this can go.  */
  1013. #define YYFAIL        goto yyerrlab
  1014. #define YYRECOVERING()  (!!yyerrstatus)
  1015. #define YYBACKUP(token, value) \
  1016. do                                \
  1017.   if (yychar == YYEMPTY && yylen == 1)                \
  1018.     { yychar = (token), yylval = (value);            \
  1019.       yychar1 = YYTRANSLATE (yychar);                \
  1020.       YYPOPSTACK;                        \
  1021.       goto yybackup;                        \
  1022.     }                                \
  1023.   else                                \
  1024.     { yyerror ("syntax error: cannot back up"); YYERROR; }    \
  1025. while (0)
  1026.  
  1027. #define YYTERROR    1
  1028. #define YYERRCODE    256
  1029.  
  1030. #ifndef YYPURE
  1031. #define YYLEX        yylex()
  1032. #endif
  1033.  
  1034. #ifdef YYPURE
  1035. #ifdef YYLSP_NEEDED
  1036. #define YYLEX        yylex(&yylval, &yylloc)
  1037. #else
  1038. #define YYLEX        yylex(&yylval)
  1039. #endif
  1040. #endif
  1041.  
  1042.  
  1043. #ifndef YYPURE
  1044.  
  1045. int    yychar;            /*  the lookahead symbol        */
  1046. YYSTYPE    yylval;            /*  the semantic value of the        */
  1047.  
  1048. #ifdef YYLSP_NEEDED
  1049. YYLTYPE yylloc;            /*  location data for the lookahead    */
  1050. #endif
  1051.  
  1052. int yynerrs;            /*  number of parse errors so far       */
  1053. #endif  /* not YYPURE */
  1054.  
  1055.  
  1056.  
  1057. #ifndef    YYINITDEPTH
  1058. #define YYINITDEPTH 200
  1059. #endif
  1060.  
  1061. /*  YYMAXDEPTH is the maximum size the stacks can grow to
  1062.     (effective only if the built-in stack extension method is used).  */
  1063.  
  1064. #if YYMAXDEPTH == 0
  1065. #undef YYMAXDEPTH
  1066. #endif
  1067.  
  1068. #ifndef YYMAXDEPTH
  1069. #define YYMAXDEPTH 10000
  1070. #endif
  1071.  
  1072. #ifdef __GNUC__
  1073. int yyparse (void);
  1074. #endif
  1075.  
  1076. #if __GNUC__ > 1        /* GNU C and GNU C++ define this.  */
  1077. #define __yy_bcopy(FROM,TO,COUNT)    __builtin_memcpy(TO,FROM,COUNT)
  1078. #else                /* not GNU C or C++ */
  1079. #ifndef __cplusplus
  1080.  
  1081. /* This is the most reliable way to avoid incompatibilities
  1082.    in available built-in functions on various systems.  */
  1083. static void
  1084. __yy_bcopy (from, to, count)
  1085.      char *from;
  1086.      char *to;
  1087.      int count;
  1088. {
  1089.   register char *f = from;
  1090.   register char *t = to;
  1091.   register int i = count;
  1092.  
  1093.   while (i-- > 0)
  1094.     *t++ = *f++;
  1095. }
  1096.  
  1097. #else /* __cplusplus */
  1098.  
  1099. /* This is the most reliable way to avoid incompatibilities
  1100.    in available built-in functions on various systems.  */
  1101. static void
  1102. __yy_bcopy (char *from, char *to, int count)
  1103. {
  1104.   register char *f = from;
  1105.   register char *t = to;
  1106.   register int i = count;
  1107.  
  1108.   while (i-- > 0)
  1109.     *t++ = *f++;
  1110. }
  1111.  
  1112. #endif
  1113. #endif
  1114.  
  1115. #line 184 "/usr/lib/bison.simple"
  1116. int
  1117. yyparse()
  1118. {
  1119.   register int yystate;
  1120.   register int yyn;
  1121.   register short *yyssp;
  1122.   register YYSTYPE *yyvsp;
  1123.   int yyerrstatus; /*  number of tokens to shift before error messages enabled */
  1124.   int yychar1 = 0; /*  lookahead token as an internal (translated) token number */
  1125.  
  1126.   short    yyssa[YYINITDEPTH];    /*  the state stack            */
  1127.   YYSTYPE yyvsa[YYINITDEPTH];    /*  the semantic value stack        */
  1128.  
  1129.   short *yyss = yyssa;        /*  refer to the stacks thru separate pointers */
  1130.   YYSTYPE *yyvs = yyvsa; /*  to allow yyoverflow to reallocate them elsewhere */
  1131.  
  1132. #ifdef YYLSP_NEEDED
  1133.   YYLTYPE yylsa[YYINITDEPTH];    /*  the location stack            */
  1134.   YYLTYPE *yyls = yylsa;
  1135.   YYLTYPE *yylsp;
  1136.  
  1137. #define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
  1138. #else
  1139. #define YYPOPSTACK   (yyvsp--, yyssp--)
  1140. #endif
  1141.  
  1142.   int yystacksize = YYINITDEPTH;
  1143.  
  1144. #ifdef YYPURE
  1145.   int yychar;
  1146.   YYSTYPE yylval;
  1147.   int yynerrs;
  1148. #ifdef YYLSP_NEEDED
  1149.   YYLTYPE yylloc;
  1150. #endif
  1151. #endif
  1152.  
  1153.   YYSTYPE yyval;        /*  the variable used to return        */
  1154.  
  1155.   int yylen;
  1156.  
  1157.  
  1158.   yystate = 0;
  1159.   yyerrstatus = 0;
  1160.   yynerrs = 0;
  1161.   yychar = YYEMPTY;        /* Cause a token to be read.  */
  1162.  
  1163.   /* Initialize stack pointers.
  1164.      Waste one element of value and location stack
  1165.      so that they stay on the same level as the state stack.
  1166.      The wasted elements are never initialized.  */
  1167.  
  1168.   yyssp = yyss - 1;
  1169.   yyvsp = yyvs;
  1170. #ifdef YYLSP_NEEDED
  1171.   yylsp = yyls;
  1172. #endif
  1173.  
  1174. /* In all cases, when you get here, the value and location stacks
  1175.    have just been pushed. so pushing a state here evens the stacks.  */
  1176. yynewstate:
  1177.  
  1178.   *++yyssp = yystate;
  1179.  
  1180.   if (yyssp >= yyss + yystacksize - 1)
  1181.     {
  1182.       YYSTYPE *yyvs1 = yyvs;
  1183.       short *yyss1 = yyss;
  1184. #ifdef YYLSP_NEEDED
  1185.       YYLTYPE *yyls1 = yyls;
  1186. #endif
  1187.  
  1188.       int size = yyssp - yyss + 1;
  1189.  
  1190. #ifdef yyoverflow
  1191.       /* Each stack pointer address is followed by the size of
  1192.      the data in use in that stack, in bytes.  */
  1193. #ifdef YYLSP_NEEDED
  1194.       /* This used to be a conditional around just the two extra args,
  1195.      but that might be undefined if yyoverflow is a macro.  */
  1196.       yyoverflow("parser stack overflow",
  1197.          &yyss1, size * sizeof (*yyssp),
  1198.          &yyvs1, size * sizeof (*yyvsp),
  1199.          &yyls1, size * sizeof (*yylsp),
  1200.          &yystacksize);
  1201. #else
  1202.       yyoverflow("parser stack overflow",
  1203.          &yyss1, size * sizeof (*yyssp),
  1204.          &yyvs1, size * sizeof (*yyvsp),
  1205.          &yystacksize);
  1206. #endif
  1207.  
  1208.       yyss = yyss1; yyvs = yyvs1;
  1209. #ifdef YYLSP_NEEDED
  1210.       yyls = yyls1;
  1211. #endif
  1212. #else /* no yyoverflow */
  1213.       if (yystacksize >= YYMAXDEPTH)
  1214.     {
  1215.       yyerror("parser stack overflow");
  1216.       return 2;
  1217.     }
  1218.       yystacksize *= 2;
  1219.       if (yystacksize > YYMAXDEPTH)
  1220.     yystacksize = YYMAXDEPTH;
  1221.       yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
  1222.       __yy_bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
  1223.       yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
  1224.       __yy_bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
  1225. #ifdef YYLSP_NEEDED
  1226.       yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
  1227.       __yy_bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
  1228. #endif
  1229. #endif /* no yyoverflow */
  1230.  
  1231.       yyssp = yyss + size - 1;
  1232.       yyvsp = yyvs + size - 1;
  1233. #ifdef YYLSP_NEEDED
  1234.       yylsp = yyls + size - 1;
  1235. #endif
  1236.  
  1237.  
  1238.       if (yyssp >= yyss + yystacksize - 1)
  1239.     YYABORT;
  1240.     }
  1241.  
  1242.  
  1243.   goto yybackup;
  1244.  yybackup:
  1245.  
  1246.  
  1247.  
  1248.   yyn = yypact[yystate];
  1249.   if (yyn == YYFLAG)
  1250.     goto yydefault;
  1251.  
  1252.  
  1253.   /* yychar is either YYEMPTY or YYEOF
  1254.      or a valid token in external form.  */
  1255.  
  1256.   if (yychar == YYEMPTY)
  1257.     {
  1258.       yychar = YYLEX;
  1259.     }
  1260.  
  1261.  
  1262.   if (yychar <= 0)        /* This means end of input. */
  1263.     {
  1264.       yychar1 = 0;
  1265.       yychar = YYEOF;        /* Don't call YYLEX any more */
  1266.  
  1267.     }
  1268.   else
  1269.     {
  1270.       yychar1 = YYTRANSLATE(yychar);
  1271.  
  1272.     }
  1273.  
  1274.   yyn += yychar1;
  1275.   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
  1276.     goto yydefault;
  1277.  
  1278.   yyn = yytable[yyn];
  1279.  
  1280.   /* yyn is what to do for this token type in this state.
  1281.      Negative => reduce, -yyn is rule number.
  1282.      Positive => shift, yyn is new state.
  1283.        New state is final state => don't bother to shift,
  1284.        just return success.
  1285.      0, or most negative number => error.  */
  1286.  
  1287.   if (yyn < 0)
  1288.     {
  1289.       if (yyn == YYFLAG)
  1290.     goto yyerrlab;
  1291.       yyn = -yyn;
  1292.       goto yyreduce;
  1293.     }
  1294.   else if (yyn == 0)
  1295.     goto yyerrlab;
  1296.  
  1297.   if (yyn == YYFINAL)
  1298.     YYACCEPT;
  1299.  
  1300.  
  1301.  
  1302.   if (yychar != YYEOF)
  1303.     yychar = YYEMPTY;
  1304.  
  1305.   *++yyvsp = yylval;
  1306. #ifdef YYLSP_NEEDED
  1307.   *++yylsp = yylloc;
  1308. #endif
  1309.  
  1310.   if (yyerrstatus) yyerrstatus--;
  1311.  
  1312.   yystate = yyn;
  1313.   goto yynewstate;
  1314.  
  1315. yydefault:
  1316.  
  1317.   yyn = yydefact[yystate];
  1318.   if (yyn == 0)
  1319.     goto yyerrlab;
  1320.  
  1321. yyreduce:
  1322.   yylen = yyr2[yyn];
  1323.   if (yylen > 0)
  1324.     yyval = yyvsp[1-yylen]; /* implement default value of the action */
  1325.  
  1326.  
  1327.  
  1328.   switch (yyn) {
  1329.  
  1330. case 5:
  1331. #line 272 "fortran.y"
  1332. {
  1333.               if(current_module_hash == -1) {
  1334.                 implied_id_token(&(yyvsp[0]),unnamed_prog);
  1335.                 def_function(
  1336.                      type_PROGRAM,    /* type */
  1337.                      size_DEFAULT,    /* size */
  1338.                      (char *)NULL,    /* size text */
  1339.                      &(yyvsp[0]),        /* name */
  1340.                      (Token*)NULL);    /* args */
  1341.                 current_module_hash =
  1342.                   def_curr_module(&(yyvsp[0]));
  1343.                 current_module_type = type_PROGRAM;
  1344.               }
  1345.  
  1346.               if(curr_stmt_class == tok_END) {
  1347.                 if(prev_stmt_class != tok_RETURN)
  1348.                   do_RETURN(current_module_hash,&(yyvsp[0]));
  1349.                 END_processing(&(yyval));
  1350.                 goto_flag = prev_goto = FALSE;
  1351.               }
  1352.               prev_stmt_class = curr_stmt_class;
  1353.               integer_context = FALSE;
  1354.               true_prev_stmt_line_num = yyval.line_num;
  1355.             ;
  1356.     break;}
  1357. case 10:
  1358. #line 312 "fortran.y"
  1359. {
  1360. #ifdef CHECK_LABELS
  1361.               def_label(&(yyvsp[-1]));
  1362. #endif
  1363.               if(executable_stmt)
  1364.                 prev_goto = goto_flag;
  1365.             ;
  1366.     break;}
  1367. case 11:
  1368. #line 320 "fortran.y"
  1369. {
  1370.               if(executable_stmt) {
  1371.                 if(prev_goto)
  1372.                 syntax_error(yyvsp[0].line_num, NO_COL_NUM,
  1373.                     "No path to this statement");
  1374.                 prev_goto = goto_flag;
  1375.               }
  1376.             ;
  1377.     break;}
  1378. case 12:
  1379. #line 331 "fortran.y"
  1380. {
  1381.                 exec_stmt_count = 0;
  1382.                 executable_stmt = FALSE;
  1383.             ;
  1384.     break;}
  1385. case 13:
  1386. #line 336 "fortran.y"
  1387. {
  1388.                 executable_stmt = FALSE;
  1389.             ;
  1390.     break;}
  1391. case 14:
  1392. #line 340 "fortran.y"
  1393. {    /* handle statement functions correctly */
  1394.               if(is_true(STMT_FUNCTION_EXPR, yyvsp[0].TOK_flags)
  1395.                      && stmt_sequence_no <= SEQ_STMT_FUN) {
  1396.                 stmt_sequence_no = SEQ_STMT_FUN;
  1397.                 executable_stmt = FALSE;
  1398.               }
  1399.               else {
  1400.                 stmt_sequence_no = SEQ_EXEC;
  1401.                 ++exec_stmt_count;
  1402.                 executable_stmt = TRUE;
  1403.               }
  1404.             ;
  1405.     break;}
  1406. case 15:
  1407. #line 353 "fortran.y"
  1408. {
  1409.                 stmt_sequence_no = SEQ_EXEC;
  1410.                 ++exec_stmt_count;
  1411.                 executable_stmt = TRUE;
  1412.             ;
  1413.     break;}
  1414. case 16:
  1415. #line 359 "fortran.y"
  1416. {
  1417.                 executable_stmt = TRUE;
  1418.                 if(stmt_sequence_no == 0)
  1419.                   stmt_sequence_no = SEQ_HEADER;
  1420.                 complex_const_allowed = FALSE; /* turn off flags */
  1421.                 inside_format=FALSE;
  1422.                 integer_context = FALSE;
  1423.                 in_assignment_stmt = FALSE;
  1424.                 yyval.line_num = prev_stmt_line_num; /* best guess */
  1425.                 yyerrok; /* (error message already given) */
  1426.             ;
  1427.     break;}
  1428. case 17:
  1429. #line 373 "fortran.y"
  1430. {
  1431.                 current_module_type = type_PROGRAM;
  1432.             ;
  1433.     break;}
  1434. case 18:
  1435. #line 377 "fortran.y"
  1436. {
  1437.                 current_module_type = type_SUBROUTINE;
  1438.             ;
  1439.     break;}
  1440. case 19:
  1441. #line 381 "fortran.y"
  1442. {
  1443.                 current_module_type = type_SUBROUTINE;
  1444.             ;
  1445.     break;}
  1446. case 20:
  1447. #line 385 "fortran.y"
  1448. {
  1449.                 current_module_type = type_BLOCK_DATA;
  1450.             ;
  1451.     break;}
  1452. case 24:
  1453. #line 398 "fortran.y"
  1454. {
  1455. #ifdef ALLOW_INCLUDE
  1456.               if(f77_standard || !allow_include) {
  1457.                   nonstandard(yyvsp[-2].line_num,yyvsp[-2].col_num);
  1458.               }
  1459.               open_include_file(yyvsp[-1].value.string,yyvsp[-2].line_num);
  1460. #else
  1461.               syntax_error(yyvsp[-2].line_num,yyvsp[-2].col_num,
  1462.                 "statement not permitted");
  1463. #endif
  1464.             ;
  1465.     break;}
  1466. case 25:
  1467. #line 417 "fortran.y"
  1468. {
  1469.                  if(stmt_sequence_no < SEQ_IMPLICIT) {
  1470.                 stmt_sequence_no = SEQ_IMPLICIT;
  1471.                  }
  1472.             ;
  1473.     break;}
  1474. case 26:
  1475. #line 423 "fortran.y"
  1476. {
  1477.                  if(stmt_sequence_no < SEQ_IMPLICIT) {
  1478.                    stmt_sequence_no = SEQ_IMPLICIT;
  1479.                  }
  1480.                  else if(stmt_sequence_no > SEQ_SPECIF) {
  1481.                    check_stmt_sequence(&(yyvsp[0]),SEQ_SPECIF);
  1482.                  }
  1483.             ;
  1484.     break;}
  1485. case 27:
  1486. #line 432 "fortran.y"
  1487. {
  1488.               check_stmt_sequence(&(yyvsp[0]),SEQ_IMPLICIT);
  1489.             ;
  1490.     break;}
  1491. case 28:
  1492. #line 436 "fortran.y"
  1493. {
  1494.                  if(stmt_sequence_no < SEQ_STMT_FUN) {
  1495.                 stmt_sequence_no = SEQ_STMT_FUN;
  1496.                  }
  1497.             ;
  1498.     break;}
  1499. case 29:
  1500. #line 442 "fortran.y"
  1501. {
  1502.               check_stmt_sequence(&(yyvsp[0]),SEQ_SPECIF);
  1503.             ;
  1504.     break;}
  1505. case 30:
  1506. #line 448 "fortran.y"
  1507. {
  1508.                  goto_flag = prev_goto = FALSE;
  1509.             ;
  1510.     break;}
  1511. case 40:
  1512. #line 468 "fortran.y"
  1513. {
  1514.                 goto_flag=TRUE;
  1515.             ;
  1516.     break;}
  1517. case 41:
  1518. #line 472 "fortran.y"
  1519. {
  1520.                 goto_flag=FALSE;
  1521.             ;
  1522.     break;}
  1523. case 64:
  1524. #line 505 "fortran.y"
  1525. {
  1526.                 goto_flag=FALSE;
  1527.             ;
  1528.     break;}
  1529. case 65:
  1530. #line 509 "fortran.y"
  1531. {
  1532.                 prev_goto = goto_flag =FALSE;
  1533.             ;
  1534.     break;}
  1535. case 68:
  1536. #line 518 "fortran.y"
  1537. {    /* Flag DO w/o label or DO WHILE forms here */
  1538.               if(is_true(NONSTD_USAGE_FLAG,yyvsp[0].TOK_flags))
  1539. #ifdef ALLOW_DO_ENDO
  1540.                 if(f77_standard || !allow_do_endo)
  1541.                 nonstandard(yyvsp[0].line_num,yyvsp[0].col_num);
  1542. #else
  1543.                 syntax_error(yyvsp[0].line_num,yyvsp[0].col_num,
  1544.                     "Nonstandard syntax");
  1545. #endif
  1546.             ;
  1547.     break;}
  1548. case 69:
  1549. #line 530 "fortran.y"
  1550. {
  1551. #ifdef ALLOW_DO_ENDO
  1552.                 if(f77_standard || !allow_do_endo)
  1553.                 nonstandard(yyvsp[0].line_num,yyvsp[0].col_num);
  1554. #else
  1555.                 syntax_error(yyvsp[0].line_num,yyvsp[0].col_num,
  1556.                     "Nonstandard syntax");
  1557. #endif
  1558.             ;
  1559.     break;}
  1560. case 73:
  1561. #line 547 "fortran.y"
  1562. {check_seq_header(&(yyvsp[0]));;
  1563.     break;}
  1564. case 74:
  1565. #line 549 "fortran.y"
  1566. {
  1567.                  def_function(
  1568.                       type_PROGRAM,    /* type */
  1569.                       size_DEFAULT,    /* size */
  1570.                       (char *)NULL,    /* size text */
  1571.                       &(yyvsp[-1]),    /* name */
  1572.                       (Token*)NULL);/* args */
  1573.                  current_module_hash =
  1574.                    def_curr_module(&(yyvsp[-1]));
  1575.             ;
  1576.     break;}
  1577. case 75:
  1578. #line 566 "fortran.y"
  1579. {
  1580.               do_ENTRY(&(yyvsp[-1]),(Token*)NULL
  1581.                    ,current_module_hash);
  1582.             ;
  1583.     break;}
  1584. case 76:
  1585. #line 571 "fortran.y"
  1586. {
  1587.               do_ENTRY(&(yyvsp[-4]),&(yyvsp[-2])
  1588.                    ,current_module_hash);
  1589. #ifdef DEBUG_PARSER
  1590.                  if(debug_parser)
  1591.                 print_exprlist("entry stmt",&(yyvsp[-2]));
  1592. #endif
  1593.             ;
  1594.     break;}
  1595. case 78:
  1596. #line 587 "fortran.y"
  1597. {
  1598.                  if(f77_standard) {
  1599.                 nonstandard(yyvsp[-1].line_num,
  1600.                  (unsigned)(yyvsp[-1].col_num+strlen(token_name(yyvsp[-1]))));
  1601.                 msg_tail(": parentheses required");
  1602.                  }
  1603.              def_function(
  1604.                       current_datatype,
  1605.                       current_typesize,
  1606.                       current_len_text,
  1607.                       &(yyvsp[-1]),
  1608.                       (Token*)NULL);
  1609.              current_module_hash=
  1610.                def_curr_module(&(yyvsp[-1]));
  1611.             ;
  1612.     break;}
  1613. case 79:
  1614. #line 604 "fortran.y"
  1615. {
  1616.              def_function(
  1617.                       current_datatype,
  1618.                       current_typesize,
  1619.                       current_len_text,
  1620.                       &(yyvsp[-4]),
  1621.                       &(yyvsp[-2]));
  1622.              current_module_hash=
  1623.                def_curr_module(&(yyvsp[-4]));
  1624. #ifdef DEBUG_PARSER
  1625.              if(debug_parser)
  1626.                print_exprlist("function stmt",&(yyvsp[-2]));
  1627. #endif
  1628.             ;
  1629.     break;}
  1630. case 80:
  1631. #line 619 "fortran.y"
  1632. {
  1633.                  if(f77_standard) {
  1634.                 nonstandard(yyvsp[-1].line_num,
  1635.                   (unsigned)(yyvsp[-1].col_num+strlen(token_name(yyvsp[-1]))));
  1636.                 msg_tail(": parentheses required");
  1637.                  }
  1638.              def_function(
  1639.                       type_UNDECL,
  1640.                       size_DEFAULT,
  1641.                       (char *)NULL,
  1642.                       &(yyvsp[-1]),
  1643.                       (Token*)NULL);
  1644.              current_module_hash=
  1645.                def_curr_module(&(yyvsp[-1]));
  1646.             ;
  1647.     break;}
  1648. case 81:
  1649. #line 636 "fortran.y"
  1650. {
  1651.              def_function(
  1652.                       type_UNDECL,    /* type */
  1653.                       size_DEFAULT,    /* size */
  1654.                       (char *)NULL,    /* size text */
  1655.                       &(yyvsp[-4]),        /* name */
  1656.                       &(yyvsp[-2]));        /* args */
  1657.              current_module_hash=
  1658.                def_curr_module(&(yyvsp[-4]));
  1659. #ifdef DEBUG_PARSER
  1660.              if(debug_parser)
  1661.                print_exprlist("function stmt",&(yyvsp[-2]));
  1662. #endif
  1663.             ;
  1664.     break;}
  1665. case 84:
  1666. #line 659 "fortran.y"
  1667. {
  1668.               check_seq_header(&(yyvsp[0]));
  1669.             ;
  1670.     break;}
  1671. case 89:
  1672. #line 678 "fortran.y"
  1673. {
  1674.               def_function(
  1675.                        type_SUBROUTINE,
  1676.                        size_DEFAULT,
  1677.                        (char *)NULL,
  1678.                        &(yyvsp[-1]),
  1679.                        (Token*)NULL);
  1680.               current_module_hash=
  1681.                 def_curr_module(&(yyvsp[-1]));
  1682.             ;
  1683.     break;}
  1684. case 90:
  1685. #line 690 "fortran.y"
  1686. {
  1687.               def_function(
  1688.                        type_SUBROUTINE,
  1689.                        size_DEFAULT,
  1690.                        (char *)NULL,
  1691.                        &(yyvsp[-4]),
  1692.                        &(yyvsp[-2]));
  1693.               current_module_hash=
  1694.                 def_curr_module(&(yyvsp[-4]));
  1695. #ifdef DEBUG_PARSER
  1696.               if(debug_parser)
  1697.                 print_exprlist("subroutine stmt",&(yyvsp[-2]));
  1698. #endif
  1699.             ;
  1700.     break;}
  1701. case 91:
  1702. #line 707 "fortran.y"
  1703. {
  1704.               check_seq_header(&(yyvsp[0]));
  1705.             ;
  1706.     break;}
  1707. case 92:
  1708. #line 713 "fortran.y"
  1709. {
  1710.                 yyval.next_token = (Token*)NULL;
  1711.             ;
  1712.     break;}
  1713. case 94:
  1714. #line 720 "fortran.y"
  1715. {
  1716.                 yyval.next_token = append_token((Token*)NULL,&(yyvsp[0]));
  1717.             ;
  1718.     break;}
  1719. case 95:
  1720. #line 724 "fortran.y"
  1721. {
  1722.                 yyval.next_token = append_token(yyvsp[-2].next_token,&(yyvsp[0]));
  1723.             ;
  1724.     break;}
  1725. case 96:
  1726. #line 730 "fortran.y"
  1727. {
  1728.                  def_arg_name(&(yyvsp[0]));
  1729.                  primary_id_expr(&(yyvsp[0]),&(yyval));
  1730.             ;
  1731.     break;}
  1732. case 97:
  1733. #line 735 "fortran.y"
  1734. {
  1735.                  yyval.TOK_type = type_byte(class_LABEL,type_LABEL);
  1736.                  yyval.size = size_DEFAULT;
  1737.                  yyval.TOK_flags = 0;
  1738.                  yyval.left_token = (Token *)NULL;
  1739.             ;
  1740.     break;}
  1741. case 98:
  1742. #line 747 "fortran.y"
  1743. {
  1744.               ++block_data_number;
  1745.               (void)sprintf(unnamed_block_data+4,"%02d",
  1746.                     block_data_number%100);
  1747.               implied_id_token(&(yyval),unnamed_block_data);
  1748.  
  1749.               def_function(
  1750.                        type_BLOCK_DATA,
  1751.                        size_DEFAULT,
  1752.                        (char *)NULL,
  1753.                        &(yyval),
  1754.                        (Token*)NULL);
  1755.               current_module_hash=
  1756.                 def_curr_module(&(yyval));
  1757.             ;
  1758.     break;}
  1759. case 99:
  1760. #line 764 "fortran.y"
  1761. {
  1762.               def_function(
  1763.                        type_BLOCK_DATA,
  1764.                        size_DEFAULT,
  1765.                        (char *)NULL,
  1766.                        &(yyvsp[-1]),
  1767.                        (Token*)NULL);
  1768.               current_module_hash=
  1769.                 def_curr_module(&(yyvsp[-1]));
  1770.             ;
  1771.     break;}
  1772. case 100:
  1773. #line 777 "fortran.y"
  1774. {
  1775.               check_seq_header(&(yyvsp[0]));
  1776.             ;
  1777.     break;}
  1778. case 101:
  1779. #line 781 "fortran.y"
  1780. {
  1781.               check_seq_header(&(yyvsp[0]));
  1782.             ;
  1783.     break;}
  1784. case 105:
  1785. #line 796 "fortran.y"
  1786. {
  1787.                  def_array_dim(&(yyvsp[-3]),&(yyvsp[-1]));
  1788.             ;
  1789.     break;}
  1790. case 106:
  1791. #line 803 "fortran.y"
  1792. {
  1793.                  yyval.TOK_dims = 1;
  1794.                  yyval.TOK_elts = yyvsp[0].TOK_elts;
  1795.                  yyval.next_token = append_token((Token*)NULL,&(yyvsp[0]));
  1796.             ;
  1797.     break;}
  1798. case 107:
  1799. #line 809 "fortran.y"
  1800. {
  1801.                  yyval.TOK_dims = yyvsp[-2].TOK_dims + 1; /* one more dimension */
  1802.                  yyval.TOK_elts = yyvsp[-2].TOK_elts * yyvsp[0].TOK_elts;
  1803.                  yyval.next_token = append_token(yyvsp[-2].next_token,&(yyvsp[0]));
  1804.             ;
  1805.     break;}
  1806. case 108:
  1807. #line 817 "fortran.y"
  1808. {
  1809.                   if( datatype_of(yyvsp[0].TOK_type) == type_INTEGER
  1810.                  && is_true(EVALUATED_EXPR,yyvsp[0].TOK_flags) )
  1811.                 yyval.TOK_elts = yyvsp[0].value.integer;
  1812.                   else
  1813.                 yyval.TOK_elts = 0;
  1814.             ;
  1815.     break;}
  1816. case 109:
  1817. #line 825 "fortran.y"
  1818. {    /* avoid getting 0 - 0 + 1 = 1 if bounds nonconstant */
  1819.                   if( datatype_of(yyvsp[-2].TOK_type) == type_INTEGER
  1820.                  && is_true(EVALUATED_EXPR,yyvsp[-2].TOK_flags)
  1821.                  && datatype_of(yyvsp[0].TOK_type) == type_INTEGER
  1822.                  && is_true(EVALUATED_EXPR,yyvsp[0].TOK_flags) )
  1823.                 yyval.TOK_elts = yyvsp[0].value.integer - yyvsp[-2].value.integer + 1;
  1824.                   else
  1825.                 yyval.TOK_elts = 0;
  1826.  
  1827.                   yyval.left_token = add_tree_node(&(yyvsp[-1]),&(yyvsp[-2]),&(yyvsp[0]));
  1828.             ;
  1829.     break;}
  1830. case 110:
  1831. #line 837 "fortran.y"
  1832. {
  1833.                  yyval.TOK_elts = 0;
  1834.                  yyval.left_token = (Token *)NULL;
  1835.             ;
  1836.     break;}
  1837. case 111:
  1838. #line 842 "fortran.y"
  1839. {
  1840.                  yyval.TOK_elts = 0;
  1841.                  yyvsp[0].left_token = (Token *)NULL;
  1842.                  yyval.left_token = add_tree_node(&(yyvsp[-1]),&(yyvsp[-2]),&(yyvsp[0]));
  1843.             ;
  1844.     break;}
  1845. case 112:
  1846. #line 850 "fortran.y"
  1847. {equivalence_flag = TRUE;;
  1848.     break;}
  1849. case 113:
  1850. #line 851 "fortran.y"
  1851. {equivalence_flag = FALSE;;
  1852.     break;}
  1853. case 116:
  1854. #line 859 "fortran.y"
  1855. {
  1856.               equivalence(&(yyvsp[-2]), &(yyvsp[0]));
  1857.             ;
  1858.     break;}
  1859. case 117:
  1860. #line 863 "fortran.y"
  1861. {
  1862.               equivalence(&(yyvsp[-2]), &(yyvsp[0]));
  1863.             ;
  1864.     break;}
  1865. case 118:
  1866. #line 870 "fortran.y"
  1867. {
  1868.                  def_equiv_name(&(yyvsp[0]));
  1869.             ;
  1870.     break;}
  1871. case 119:
  1872. #line 874 "fortran.y"
  1873. {
  1874.                  def_equiv_name(&(yyvsp[0]));
  1875.             ;
  1876.     break;}
  1877. case 120:
  1878. #line 878 "fortran.y"
  1879. {
  1880.                  def_equiv_name(&(yyvsp[0]));
  1881.             ;
  1882.     break;}
  1883. case 124:
  1884. #line 893 "fortran.y"
  1885. {
  1886.                  implied_id_token(&(yyval),blank_com_name);
  1887.                  def_com_block(&(yyval), &(yyvsp[-1]));
  1888.                  if(is_true(COMMA_FLAG,yyvsp[-1].TOK_flags))
  1889.                 syntax_error(
  1890.                          yyvsp[-1].line_num,yyvsp[-1].col_num,
  1891.                          "trailing comma");
  1892. #ifdef DEBUG_PARSER
  1893.                  if(debug_parser)
  1894.                 print_comlist("blank common",&(yyvsp[-1]));
  1895. #endif
  1896.  
  1897.             ;
  1898.     break;}
  1899. case 125:
  1900. #line 907 "fortran.y"
  1901. {
  1902.                  if(is_true(COMMA_FLAG,yyvsp[-1].TOK_flags))
  1903.                 syntax_error(
  1904.                          yyvsp[-1].line_num,yyvsp[-1].col_num,
  1905.                          "trailing comma");
  1906.  
  1907.             ;
  1908.     break;}
  1909. case 126:
  1910. #line 915 "fortran.y"
  1911. {
  1912.                  implied_id_token(&(yyval),blank_com_name);
  1913.                  def_com_block(&(yyval),&(yyvsp[-2]));
  1914.                  if(is_true(COMMA_FLAG,yyvsp[-1].TOK_flags))
  1915.                 syntax_error(
  1916.                          yyvsp[-1].line_num,yyvsp[-1].col_num,
  1917.                          "trailing comma");
  1918. #ifdef DEBUG_PARSER
  1919.                  if(debug_parser)
  1920.                 print_comlist("blank common",&(yyvsp[-2]));
  1921. #endif
  1922.             ;
  1923.     break;}
  1924. case 127:
  1925. #line 933 "fortran.y"
  1926. {
  1927.                  yyval.TOK_flags = yyvsp[0].TOK_flags;
  1928.             ;
  1929.     break;}
  1930. case 128:
  1931. #line 937 "fortran.y"
  1932. {
  1933.                  yyval.TOK_flags = yyvsp[0].TOK_flags;
  1934.                  yyval.line_num = yyvsp[0].line_num;
  1935.                  yyval.col_num = yyvsp[0].col_num;
  1936.             ;
  1937.     break;}
  1938. case 129:
  1939. #line 945 "fortran.y"
  1940. {
  1941.                  def_com_block(&(yyvsp[-1]),&(yyvsp[0]));
  1942.                  yyval.TOK_flags = yyvsp[0].TOK_flags;
  1943.                  yyval.line_num = yyvsp[0].line_num;
  1944.                  yyval.col_num = yyvsp[0].col_num;
  1945. #ifdef DEBUG_PARSER
  1946.                  if(debug_parser)
  1947.                 print_comlist("labeled common",&(yyvsp[0]));
  1948. #endif
  1949.             ;
  1950.     break;}
  1951. case 130:
  1952. #line 958 "fortran.y"
  1953. {
  1954.                  yyval = yyvsp[-1];
  1955.             ;
  1956.     break;}
  1957. case 131:
  1958. #line 963 "fortran.y"
  1959. {
  1960.                  implied_id_token(&(yyval),blank_com_name);
  1961.             ;
  1962.     break;}
  1963. case 132:
  1964. #line 967 "fortran.y"
  1965. {
  1966.                  implied_id_token(&(yyval),blank_com_name);
  1967.             ;
  1968.     break;}
  1969. case 133:
  1970. #line 973 "fortran.y"
  1971. {
  1972.                 yyval.TOK_flags = yyvsp[0].TOK_flags;
  1973.                 yyval.next_token = append_token((Token*)NULL,&(yyvsp[0]));
  1974.             ;
  1975.     break;}
  1976. case 134:
  1977. #line 978 "fortran.y"
  1978. {
  1979.                 if(!is_true(COMMA_FLAG,yyvsp[-1].TOK_flags))
  1980.                 syntax_error(
  1981.                     yyvsp[0].line_num,yyvsp[0].col_num-1,
  1982.                     "missing comma");
  1983.                 yyval.TOK_flags = yyvsp[0].TOK_flags;
  1984.                 yyval.line_num = yyvsp[0].line_num;
  1985.                 yyval.col_num = yyvsp[0].col_num;
  1986.                 yyval.next_token = append_token(yyvsp[-1].next_token,&(yyvsp[0]));
  1987.             ;
  1988.     break;}
  1989. case 135:
  1990. #line 991 "fortran.y"
  1991. {               /* no comma */
  1992.                  yyval.TOK_flags = yyvsp[0].TOK_flags;
  1993.                  make_false(COMMA_FLAG,yyval.TOK_flags);
  1994.             ;
  1995.     break;}
  1996. case 136:
  1997. #line 996 "fortran.y"
  1998. {               /* has comma */
  1999.                  yyval.TOK_flags = yyvsp[-1].TOK_flags;
  2000.                  make_true(COMMA_FLAG,yyval.TOK_flags);
  2001.             ;
  2002.     break;}
  2003. case 137:
  2004. #line 1003 "fortran.y"
  2005. {
  2006.                  def_com_variable(&(yyvsp[0]));
  2007.                  primary_id_expr(&(yyvsp[0]),&(yyval));
  2008.             ;
  2009.     break;}
  2010. case 138:
  2011. #line 1008 "fortran.y"
  2012. {
  2013.                  def_com_variable(&(yyvsp[0]));
  2014.                  primary_id_expr(&(yyvsp[0]),&(yyval));
  2015.             ;
  2016.     break;}
  2017. case 139:
  2018. #line 1021 "fortran.y"
  2019. {
  2020.                 if(is_true(COMMA_FLAG,yyvsp[-1].TOK_flags))
  2021.                 syntax_error(yyvsp[-1].line_num,
  2022.                  (unsigned)(yyvsp[-1].col_num+strlen(token_name(yyvsp[-1]))),
  2023.                     "trailing comma");
  2024.                 if(f77_standard) {
  2025.                 nonstandard(yyvsp[-2].line_num,yyvsp[-2].col_num);
  2026.                 }
  2027.             ;
  2028.     break;}
  2029. case 141:
  2030. #line 1034 "fortran.y"
  2031. {
  2032.                 yyval = yyvsp[0];
  2033.             ;
  2034.     break;}
  2035. case 142:
  2036. #line 1040 "fortran.y"
  2037. {
  2038.                  def_namelist(&(yyvsp[-1]),&(yyvsp[0]));
  2039.                  yyval = yyvsp[0];
  2040.             ;
  2041.     break;}
  2042. case 143:
  2043. #line 1047 "fortran.y"
  2044. {
  2045.                 yyval = yyvsp[-1];
  2046.             ;
  2047.     break;}
  2048. case 144:
  2049. #line 1053 "fortran.y"
  2050. {
  2051.                  yyval.next_token = append_token((Token*)NULL,&(yyvsp[0]));
  2052.             ;
  2053.     break;}
  2054. case 145:
  2055. #line 1057 "fortran.y"
  2056. {
  2057.                 if(!is_true(COMMA_FLAG,yyvsp[-1].TOK_flags))
  2058.                 syntax_error(
  2059.                     yyvsp[0].line_num,yyvsp[0].col_num-1,
  2060.                     "missing comma");
  2061.                 yyval.TOK_flags = yyvsp[0].TOK_flags;
  2062.                 yyval.line_num = yyvsp[0].line_num;
  2063.                 yyval.col_num = yyvsp[0].col_num;
  2064.                 yyval.next_token = append_token(yyvsp[-1].next_token,&(yyvsp[0]));
  2065.             ;
  2066.     break;}
  2067. case 146:
  2068. #line 1070 "fortran.y"
  2069. {               /* no comma */
  2070.                  def_namelist_item(&(yyvsp[0]));
  2071.                  primary_id_expr(&(yyvsp[0]),&(yyval));
  2072.                  make_false(COMMA_FLAG,yyval.TOK_flags);
  2073.             ;
  2074.     break;}
  2075. case 147:
  2076. #line 1076 "fortran.y"
  2077. {               /* has comma */
  2078.                  def_namelist_item(&(yyvsp[-1]));
  2079.                  primary_id_expr(&(yyvsp[-1]),&(yyval));
  2080.                  make_true(COMMA_FLAG,yyval.TOK_flags);
  2081.             ;
  2082.     break;}
  2083. case 152:
  2084. #line 1091 "fortran.y"
  2085. {
  2086.               current_typesize = size_DEFAULT;
  2087.               current_len_text = NULL;
  2088.             ;
  2089.     break;}
  2090. case 153:
  2091. #line 1097 "fortran.y"
  2092. {
  2093.                 current_typesize = yyvsp[0].value.integer;
  2094.                 current_len_text = NULL;
  2095. #if 0 /* defunct feature */
  2096.                 if(local_wordsize > 0) {
  2097.                   /*  recognize REAL*2w as DOUBLE PRECISION */
  2098.                   if(current_datatype == type_REAL
  2099.                  && yyvsp[0].value.integer == type_size[type_DP])
  2100.                 current_datatype = type_DP;
  2101.                   /*  recognize COMPLEX*4w as DOUBLE COMPLEX */
  2102.                   if(current_datatype == type_COMPLEX
  2103.                  && yyvsp[0].value.integer==type_size[type_DCOMPLEX])
  2104.                 current_datatype = type_DCOMPLEX;
  2105.                 }
  2106. #endif
  2107.                  if(f77_standard) {
  2108.                 nonstandard(yyvsp[0].line_num,yyvsp[0].col_num);
  2109.                  }
  2110.             ;
  2111.     break;}
  2112. case 155:
  2113. #line 1121 "fortran.y"
  2114. {
  2115.                  current_datatype = type_INTEGER;
  2116.                  integer_context = TRUE;
  2117.             ;
  2118.     break;}
  2119. case 156:
  2120. #line 1126 "fortran.y"
  2121. {
  2122.                  current_datatype = type_REAL;
  2123.                  integer_context = TRUE;
  2124.             ;
  2125.     break;}
  2126. case 157:
  2127. #line 1131 "fortran.y"
  2128. {
  2129.                  current_datatype = type_COMPLEX;
  2130.                  integer_context = TRUE;
  2131.             ;
  2132.     break;}
  2133. case 158:
  2134. #line 1136 "fortran.y"
  2135. {
  2136.                  current_datatype = type_LOGICAL;
  2137.                  integer_context = TRUE;
  2138.             ;
  2139.     break;}
  2140. case 159:
  2141. #line 1143 "fortran.y"
  2142. {
  2143.                  current_datatype = type_DP;
  2144.                  current_typesize = size_DEFAULT;
  2145.                  current_len_text = NULL;
  2146.             ;
  2147.     break;}
  2148. case 160:
  2149. #line 1149 "fortran.y"
  2150. {
  2151.                  current_datatype = type_DP;
  2152.                  current_typesize = size_DEFAULT;
  2153.                  current_len_text = NULL;
  2154.             ;
  2155.     break;}
  2156. case 161:
  2157. #line 1155 "fortran.y"
  2158. {
  2159.                  current_datatype = type_DCOMPLEX;
  2160.                  current_typesize = size_DEFAULT;
  2161.                  current_len_text = NULL;
  2162.                  if(f77_standard) {
  2163.                 nonstandard(yyvsp[0].line_num,yyvsp[0].col_num);
  2164.                  }
  2165.             ;
  2166.     break;}
  2167. case 162:
  2168. #line 1164 "fortran.y"
  2169. {
  2170.                  current_datatype = type_DCOMPLEX;
  2171.                  current_typesize = size_DEFAULT;
  2172.                  current_len_text = NULL;
  2173.                  if(f77_standard) {
  2174.                 nonstandard(yyvsp[0].line_num,yyvsp[0].col_num);
  2175.                  }
  2176.             ;
  2177.     break;}
  2178. case 163:
  2179. #line 1173 "fortran.y"
  2180. {
  2181.                  current_datatype = type_INTEGER;
  2182.                  current_typesize = 1;
  2183.                  current_len_text = NULL;
  2184.                  if(f77_standard)
  2185.                    nonstandard(yyvsp[0].line_num,yyvsp[0].col_num);
  2186.             ;
  2187.     break;}
  2188. case 164:
  2189. #line 1183 "fortran.y"
  2190. {
  2191.                  current_datatype = type_STRING;
  2192.                  current_typesize = 1;
  2193.                  current_len_text = NULL;
  2194.                  current_size_is_adjustable = 0;
  2195.                  current_size_is_expression = 0;
  2196.                  integer_context = TRUE;
  2197.             ;
  2198.     break;}
  2199. case 165:
  2200. #line 1194 "fortran.y"
  2201. {
  2202.                  current_typesize = yyvsp[0].value.integer;
  2203.                  current_size_is_adjustable = yyvsp[0].size_is_adjustable;
  2204.                  current_size_is_expression = yyvsp[0].size_is_expression;
  2205.                  if(current_size_is_expression) {
  2206.                    if(yyvsp[0].left_token == NULL)
  2207.                  current_len_text = new_tree_text(&(yyvsp[0]));
  2208.                    else
  2209.                  current_len_text = new_tree_text(yyvsp[0].left_token);
  2210.                  }
  2211.                  else
  2212.                    current_len_text = NULL;
  2213.             ;
  2214.     break;}
  2215. case 168:
  2216. #line 1215 "fortran.y"
  2217. {
  2218.                  declare_type(&(yyvsp[0]),
  2219.                       current_datatype,
  2220.                       current_typesize,
  2221.                       current_len_text);
  2222.             ;
  2223.     break;}
  2224. case 169:
  2225. #line 1222 "fortran.y"
  2226. {
  2227.                  declare_type(&(yyvsp[0]),
  2228.                       current_datatype,
  2229.                       current_typesize,
  2230.                       current_len_text);
  2231.             ;
  2232.     break;}
  2233. case 172:
  2234. #line 1235 "fortran.y"
  2235. {
  2236.                  yyvsp[0].size_is_adjustable = current_size_is_adjustable;
  2237.                  yyvsp[0].size_is_expression = current_size_is_expression;
  2238.                  declare_type(&(yyvsp[0]),
  2239.                       current_datatype,
  2240.                       current_typesize,
  2241.                       current_len_text);
  2242.             ;
  2243.     break;}
  2244. case 173:
  2245. #line 1244 "fortran.y"
  2246. {
  2247.                  yyvsp[-2].size_is_adjustable = yyvsp[0].size_is_adjustable;
  2248.                  yyvsp[-2].size_is_expression = yyvsp[0].size_is_expression;
  2249.                  declare_type(&(yyvsp[-2]),
  2250.                       current_datatype,
  2251.                       yyvsp[0].value.integer,
  2252.                       new_tree_text(
  2253.                          yyvsp[0].left_token == NULL?
  2254.                          &(yyvsp[0]): yyvsp[0].left_token )
  2255.                       );
  2256.             ;
  2257.     break;}
  2258. case 174:
  2259. #line 1256 "fortran.y"
  2260. {
  2261.                  yyvsp[0].size_is_adjustable = current_size_is_adjustable;
  2262.                  yyvsp[0].size_is_expression = current_size_is_expression;
  2263.                  declare_type(&(yyvsp[0]),
  2264.                       current_datatype,
  2265.                       current_typesize,
  2266.                       current_len_text);
  2267.             ;
  2268.     break;}
  2269. case 175:
  2270. #line 1265 "fortran.y"
  2271. {
  2272.                  yyvsp[-2].size_is_adjustable = yyvsp[0].size_is_adjustable;
  2273.                  yyvsp[-2].size_is_expression = yyvsp[0].size_is_expression;
  2274.                  declare_type(&(yyvsp[-2]),
  2275.                       current_datatype,
  2276.                       yyvsp[0].value.integer,
  2277.                       new_tree_text(
  2278.                          yyvsp[0].left_token == NULL?
  2279.                          &(yyvsp[0]): yyvsp[0].left_token )
  2280.                       );
  2281.             ;
  2282.     break;}
  2283. case 176:
  2284. #line 1280 "fortran.y"
  2285. {implicit_flag=TRUE;;
  2286.     break;}
  2287. case 177:
  2288. #line 1284 "fortran.y"
  2289. {
  2290.                 implicit_flag=FALSE;
  2291.                 if(implicit_none) {
  2292.                 syntax_error(yyvsp[-2].line_num,yyvsp[-2].col_num,
  2293.                      "conflicts with IMPLICIT NONE");
  2294.                 }
  2295.                 else {
  2296.                 implicit_type_given = TRUE;
  2297.                 }
  2298.             ;
  2299.     break;}
  2300. case 178:
  2301. #line 1296 "fortran.y"
  2302. {
  2303.                 implicit_flag=FALSE;
  2304.                 if(implicit_type_given) {
  2305.                     syntax_error(yyvsp[-2].line_num,yyvsp[-2].col_num,
  2306.                      "conflicts with IMPLICIT statement");
  2307.                 }
  2308.                 else {
  2309.                     if(f77_standard)
  2310.                       nonstandard(yyvsp[-1].line_num,yyvsp[-1].col_num);
  2311.                     implicit_none = TRUE;
  2312.                 }
  2313.             ;
  2314.     break;}
  2315. case 180:
  2316. #line 1311 "fortran.y"
  2317. {initial_flag = TRUE;;
  2318.     break;}
  2319. case 182:
  2320. #line 1317 "fortran.y"
  2321. {implicit_letter_flag = TRUE;;
  2322.     break;}
  2323. case 183:
  2324. #line 1318 "fortran.y"
  2325. {implicit_letter_flag = FALSE;;
  2326.     break;}
  2327. case 186:
  2328. #line 1326 "fortran.y"
  2329. {
  2330.               int c1 = (int)yyvsp[0].subclass;
  2331.  
  2332.               if( (f77_standard && !isalpha(c1))
  2333.                || (!allow_dollarsigns && c1=='$')
  2334.                || (!allow_underscores && c1=='_') ) {
  2335.                 nonstandard(yyvsp[0].line_num,yyvsp[0].col_num);
  2336.                 msg_tail(": nonalphabetic character");
  2337.               }
  2338.  
  2339.                set_implicit_type(current_datatype,
  2340.                          current_typesize,
  2341.                          current_len_text,
  2342.                          c1,c1);
  2343.             ;
  2344.     break;}
  2345. case 187:
  2346. #line 1342 "fortran.y"
  2347. {
  2348.               int c1 = (int)yyvsp[-2].subclass,
  2349.                   c2 = (int)yyvsp[0].subclass;
  2350.  
  2351.               if( (f77_standard && (!isalpha(c1) || !isalpha(c2)))
  2352.                || (!allow_dollarsigns && (c1 == '$' || c2 == '$'))
  2353.                || (!allow_underscores && (c1 == '_' || c2 == '_')))
  2354.               {
  2355.                 if(!isalpha(c1))
  2356.                   nonstandard(yyvsp[-2].line_num,yyvsp[-2].col_num);
  2357.                 else
  2358.                   nonstandard(yyvsp[0].line_num,yyvsp[0].col_num);
  2359.                 msg_tail(": nonalphabetic character");
  2360.               }
  2361.  
  2362.                set_implicit_type(current_datatype,
  2363.                          current_typesize,
  2364.                          current_len_text,
  2365.                          c1,c2);
  2366.             ;
  2367.     break;}
  2368. case 188:
  2369. #line 1367 "fortran.y"
  2370. {
  2371.                  yyvsp[-1].left_token = (Token *)NULL;
  2372.                  yyval.value.integer = size_ADJUSTABLE;
  2373.                  yyval.size_is_adjustable = 1;
  2374.                  yyval.size_is_expression = 0;
  2375.                  yyval.left_token = add_tree_node(&(yyvsp[-2]),&(yyvsp[-1]),
  2376.                               (Token*)NULL);
  2377.             ;
  2378.     break;}
  2379. case 189:
  2380. #line 1377 "fortran.y"
  2381. {
  2382.                  yyval.value.integer = yyvsp[0].value.integer;
  2383.                  yyval.size_is_adjustable = 0;
  2384.                  yyval.size_is_expression = 0;
  2385.             ;
  2386.     break;}
  2387. case 190:
  2388. #line 1383 "fortran.y"
  2389. {
  2390.                  yyval = yyvsp[-1];
  2391.                  yyval.size_is_adjustable = 0;
  2392.                  yyval.size_is_expression = 1;
  2393.                  if( yyval.value.integer <= 0 ){
  2394.                    warning(yyvsp[-1].line_num,yyvsp[-1].col_num,
  2395.                     "invalid length specification");
  2396.                    msg_tail(": substituting 1");
  2397.                    yyval.value.integer = 1;
  2398.                  }
  2399.                  yyval.left_token = add_tree_node(&(yyvsp[-2]),&(yyvsp[-1]),
  2400.                               (Token*)NULL);
  2401.             ;
  2402.     break;}
  2403. case 194:
  2404. #line 1406 "fortran.y"
  2405. {complex_const_allowed = TRUE;;
  2406.     break;}
  2407. case 195:
  2408. #line 1408 "fortran.y"
  2409. {
  2410.                  def_parameter(&(yyvsp[-3]),&(yyvsp[0]));
  2411.                  primary_id_expr(&(yyvsp[-3]),&(yyvsp[-3]));
  2412.                  assignment_stmt_type(&(yyvsp[-3]),&(yyvsp[-1]),&(yyvsp[0]));
  2413.                  complex_const_allowed = FALSE;
  2414.             ;
  2415.     break;}
  2416. case 197:
  2417. #line 1421 "fortran.y"
  2418. {
  2419.                  def_ext_name(&(yyvsp[0]));
  2420.             ;
  2421.     break;}
  2422. case 198:
  2423. #line 1425 "fortran.y"
  2424. {
  2425.                  def_ext_name(&(yyvsp[0]));
  2426.             ;
  2427.     break;}
  2428. case 200:
  2429. #line 1435 "fortran.y"
  2430. {
  2431.                  def_intrins_name(&(yyvsp[0]));
  2432.             ;
  2433.     break;}
  2434. case 201:
  2435. #line 1439 "fortran.y"
  2436. {
  2437.                  def_intrins_name(&(yyvsp[0]));
  2438.             ;
  2439.     break;}
  2440. case 202:
  2441. #line 1446 "fortran.y"
  2442. {
  2443.               global_save = TRUE;
  2444.             ;
  2445.     break;}
  2446. case 206:
  2447. #line 1457 "fortran.y"
  2448. {
  2449.                  save_variable(&(yyvsp[0]));
  2450.             ;
  2451.     break;}
  2452. case 207:
  2453. #line 1461 "fortran.y"
  2454. {
  2455. /***                 def_com_block(&($2),(Token*)NULL);***/
  2456.                  save_com_block(&(yyvsp[-1]));
  2457.             ;
  2458.     break;}
  2459. case 212:
  2460. #line 1477 "fortran.y"
  2461. {complex_const_allowed=TRUE;;
  2462.     break;}
  2463. case 213:
  2464. #line 1479 "fortran.y"
  2465. {complex_const_allowed=FALSE;;
  2466.     break;}
  2467. case 217:
  2468. #line 1488 "fortran.y"
  2469. {
  2470.                  use_lvalue(&(yyvsp[0]));
  2471.             ;
  2472.     break;}
  2473. case 224:
  2474. #line 1504 "fortran.y"
  2475. {
  2476.                  use_parameter(&(yyvsp[0]));
  2477.             ;
  2478.     break;}
  2479. case 226:
  2480. #line 1511 "fortran.y"
  2481. {
  2482.                  use_parameter(&(yyvsp[0]));
  2483.             ;
  2484.     break;}
  2485. case 229:
  2486. #line 1522 "fortran.y"
  2487. {
  2488.                  use_lvalue(&(yyvsp[0]));
  2489.             ;
  2490.     break;}
  2491. case 231:
  2492. #line 1530 "fortran.y"
  2493. {
  2494.                 use_implied_do_index(&(yyvsp[-3]));
  2495.             ;
  2496.     break;}
  2497. case 234:
  2498. #line 1541 "fortran.y"
  2499. {complex_const_allowed = TRUE;
  2500.                     in_assignment_stmt = TRUE;;
  2501.     break;}
  2502. case 235:
  2503. #line 1543 "fortran.y"
  2504. {
  2505.               if( ! (is_true(LVALUE_EXPR,yyvsp[-3].TOK_flags)
  2506.                    || is_true(STMT_FUNCTION_EXPR,yyvsp[-3].TOK_flags) )) {
  2507.                 syntax_error(yyvsp[-3].line_num,yyvsp[-3].col_num,
  2508.                      "left side is not assignable");
  2509.               }
  2510.               else {
  2511.                 assignment_stmt_type(&(yyvsp[-3]),&(yyvsp[-2]),
  2512.                     &(yyvsp[0]));
  2513.               }
  2514.               complex_const_allowed = FALSE;
  2515.               in_assignment_stmt = FALSE;
  2516.             ;
  2517.     break;}
  2518. case 236:
  2519. #line 1557 "fortran.y"
  2520. {
  2521.               if(is_true(STMT_FUNCTION_EXPR, yyvsp[-5].TOK_flags)
  2522.                      && stmt_sequence_no <= SEQ_STMT_FUN)
  2523.                  stmt_function_stmt(&(yyvsp[-5]));
  2524.             ;
  2525.     break;}
  2526. case 241:
  2527. #line 1575 "fortran.y"
  2528. {
  2529.                 do_ASSIGN(&(yyvsp[-1]));
  2530.             ;
  2531.     break;}
  2532. case 245:
  2533. #line 1592 "fortran.y"
  2534. {
  2535.                  do_assigned_GOTO(&(yyvsp[-1]));
  2536.             ;
  2537.     break;}
  2538. case 246:
  2539. #line 1596 "fortran.y"
  2540. {
  2541.                  do_assigned_GOTO(&(yyvsp[-4]));
  2542.             ;
  2543.     break;}
  2544. case 247:
  2545. #line 1600 "fortran.y"
  2546. {
  2547.                  do_assigned_GOTO(&(yyvsp[-5]));
  2548.             ;
  2549.     break;}
  2550. case 248:
  2551. #line 1606 "fortran.y"
  2552. {
  2553.                 integer_context=TRUE;
  2554.             ;
  2555.     break;}
  2556. case 249:
  2557. #line 1610 "fortran.y"
  2558. {
  2559.                 integer_context=TRUE;
  2560.             ;
  2561.     break;}
  2562. case 252:
  2563. #line 1622 "fortran.y"
  2564. {
  2565.               int t=datatype_of(yyvsp[-9].class);
  2566.               if(t != type_INTEGER && t != type_REAL
  2567.                  && t != type_DP && t != type_ERROR ) {
  2568.                 syntax_error(yyvsp[-9].line_num,yyvsp[-9].col_num,
  2569.           "integer, real, or double precision expression required");
  2570.               }
  2571.             ;
  2572.     break;}
  2573. case 253:
  2574. #line 1634 "fortran.y"
  2575. {
  2576.               int t=datatype_of(yyvsp[-1].TOK_type);
  2577.               if(t != type_LOGICAL && t != type_ERROR)
  2578.                  syntax_error(yyvsp[-1].line_num,yyvsp[-1].col_num,
  2579.                       "logical expression required");
  2580.             ;
  2581.     break;}
  2582. case 254:
  2583. #line 1644 "fortran.y"
  2584. {
  2585.               int t=datatype_of(yyvsp[-2].TOK_type);
  2586.               if(t != type_LOGICAL && t != type_ERROR)
  2587.                  syntax_error(yyvsp[-2].line_num,yyvsp[-2].col_num,
  2588.                       "logical expression required");
  2589.             ;
  2590.     break;}
  2591. case 255:
  2592. #line 1652 "fortran.y"
  2593. {complex_const_allowed = TRUE;;
  2594.     break;}
  2595. case 256:
  2596. #line 1653 "fortran.y"
  2597. {
  2598.                 if(is_true(ID_EXPR,yyvsp[-1].TOK_flags)){
  2599.                 use_variable(&(yyvsp[-1]));
  2600.                 }
  2601.                 complex_const_allowed = FALSE;
  2602.  
  2603.                 initial_flag = TRUE;    /* for is_keyword */
  2604.                 yyval = yyvsp[-1]; /* Inherit expr for type checking above */
  2605.             ;
  2606.     break;}
  2607. case 258:
  2608. #line 1666 "fortran.y"
  2609. {complex_const_allowed = TRUE;;
  2610.     break;}
  2611. case 259:
  2612. #line 1667 "fortran.y"
  2613. {
  2614.                 if(is_true(ID_EXPR,yyvsp[-1].TOK_flags)){
  2615.                 use_variable(&(yyvsp[-1]));
  2616.                 }
  2617.                 complex_const_allowed = FALSE;
  2618.  
  2619.                 initial_flag = TRUE;
  2620.             ;
  2621.     break;}
  2622. case 264:
  2623. #line 1697 "fortran.y"
  2624. {
  2625.               if( ! is_true(LVALUE_EXPR,yyvsp[-3].TOK_flags) ) {
  2626.                 syntax_error(yyvsp[-3].line_num,yyvsp[-3].col_num,
  2627.                      "index is not assignable");
  2628.               }
  2629.               else {
  2630.                  use_lvalue(&(yyvsp[-3]));
  2631.                  use_variable(&(yyvsp[-3]));
  2632.               }
  2633.  
  2634.                  if(datatype_of(yyvsp[-3].TOK_type) == type_INTEGER
  2635.                 && datatype_of(yyvsp[-1].TOK_type) != type_INTEGER)
  2636.                    warning(yyvsp[-2].line_num,yyvsp[-2].col_num,
  2637.                   "type mismatch between DO index and bounds");
  2638.  
  2639.                  else if(datatype_of(yyvsp[-3].TOK_type) != type_INTEGER)
  2640.                    if(datatype_of(yyvsp[-1].TOK_type) != type_INTEGER) {
  2641.                  if(port_check)
  2642.                    nonportable(yyvsp[-1].line_num,yyvsp[-1].col_num,
  2643.                            "non-integer DO loop bounds");
  2644.                    }
  2645.                    else {
  2646.                  if(trunc_check)
  2647.                    warning(yyvsp[-3].line_num,yyvsp[-3].col_num,
  2648.                        "DO index is not integer");
  2649.                    }
  2650.             ;
  2651.     break;}
  2652. case 265:
  2653. #line 1726 "fortran.y"
  2654. {complex_const_allowed=TRUE;;
  2655.     break;}
  2656. case 266:
  2657. #line 1727 "fortran.y"
  2658. {
  2659.                 if(is_true(ID_EXPR,yyvsp[-2].TOK_flags)){
  2660.                 use_variable(&(yyvsp[-2]));
  2661.                 }
  2662.                 complex_const_allowed=FALSE;
  2663.                 make_true(NONSTD_USAGE_FLAG,yyval.TOK_flags);
  2664.             ;
  2665.     break;}
  2666. case 267:
  2667. #line 1735 "fortran.y"
  2668. {complex_const_allowed=TRUE;;
  2669.     break;}
  2670. case 268:
  2671. #line 1736 "fortran.y"
  2672. {
  2673.                 if(is_true(ID_EXPR,yyvsp[-2].TOK_flags)){
  2674.                 use_variable(&(yyvsp[-2]));
  2675.                 }
  2676.                 complex_const_allowed=FALSE;
  2677.                 make_true(NONSTD_USAGE_FLAG,yyval.TOK_flags);
  2678.             ;
  2679.     break;}
  2680. case 271:
  2681. #line 1748 "fortran.y"
  2682. {
  2683.                 make_true(NONSTD_USAGE_FLAG,yyval.TOK_flags);
  2684.                 integer_context=FALSE;
  2685.             ;
  2686.     break;}
  2687. case 272:
  2688. #line 1755 "fortran.y"
  2689. {
  2690.                 yyval.TOK_type=do_bounds_type(&(yyvsp[-2]),&(yyvsp[0]),&(yyvsp[0]));
  2691.             ;
  2692.     break;}
  2693. case 273:
  2694. #line 1759 "fortran.y"
  2695. {
  2696.                 yyval.TOK_type=do_bounds_type(&(yyvsp[-4]),&(yyvsp[-2]),&(yyvsp[0]));
  2697.             ;
  2698.     break;}
  2699. case 281:
  2700. #line 1783 "fortran.y"
  2701. {
  2702.                  use_variable(&(yyvsp[0]));
  2703.             ;
  2704.     break;}
  2705. case 283:
  2706. #line 1791 "fortran.y"
  2707. {complex_const_allowed = FALSE;;
  2708.     break;}
  2709. case 285:
  2710. #line 1793 "fortran.y"
  2711. {complex_const_allowed = FALSE;;
  2712.     break;}
  2713. case 287:
  2714. #line 1796 "fortran.y"
  2715. {init_io_ctrl_list();;
  2716.     break;}
  2717. case 288:
  2718. #line 1798 "fortran.y"
  2719. {complex_const_allowed = TRUE;;
  2720.     break;}
  2721. case 294:
  2722. #line 1811 "fortran.y"
  2723. {init_io_ctrl_list();;
  2724.     break;}
  2725. case 295:
  2726. #line 1815 "fortran.y"
  2727. {
  2728.                 if(f77_standard)
  2729.                 nonstandard(yyvsp[-2].line_num,yyvsp[-2].col_num);
  2730.             ;
  2731.     break;}
  2732. case 296:
  2733. #line 1820 "fortran.y"
  2734. {
  2735.                 if(f77_standard)
  2736.                 nonstandard(yyvsp[-4].line_num,yyvsp[-4].col_num);
  2737.             ;
  2738.     break;}
  2739. case 298:
  2740. #line 1829 "fortran.y"
  2741. {complex_const_allowed = TRUE;;
  2742.     break;}
  2743. case 299:
  2744. #line 1830 "fortran.y"
  2745. {complex_const_allowed = FALSE;;
  2746.     break;}
  2747. case 301:
  2748. #line 1834 "fortran.y"
  2749. {
  2750.                 if(f77_standard)
  2751.                 nonstandard(yyvsp[-2].line_num,yyvsp[-2].col_num);
  2752.             ;
  2753.     break;}
  2754. case 302:
  2755. #line 1839 "fortran.y"
  2756. {complex_const_allowed = TRUE;;
  2757.     break;}
  2758. case 303:
  2759. #line 1840 "fortran.y"
  2760. {complex_const_allowed = FALSE;;
  2761.     break;}
  2762. case 304:
  2763. #line 1841 "fortran.y"
  2764. {
  2765.                 if(f77_standard)
  2766.                 nonstandard(yyvsp[-6].line_num,yyvsp[-6].col_num);
  2767.             ;
  2768.     break;}
  2769. case 305:
  2770. #line 1849 "fortran.y"
  2771. {
  2772.                 ++control_item_count;
  2773.             ;
  2774.     break;}
  2775. case 306:
  2776. #line 1853 "fortran.y"
  2777. {
  2778.                 ++control_item_count;
  2779.                 if(! io_warning_given) {
  2780.                   if( io_internal_file ) {
  2781.                 if( (curr_stmt_class == tok_WRITE ||
  2782.                      curr_stmt_class == tok_READ) &&
  2783.                     io_list_directed ) {
  2784.                   if(f77_standard) {
  2785.                     nonstandard(yyvsp[0].line_num,yyvsp[0].col_num);
  2786.         msg_tail(": internal file cannot be used with list-directed I/O");
  2787.                   }
  2788.                   io_warning_given = TRUE;
  2789.                 }
  2790.                   }
  2791.                 }
  2792.             ;
  2793.     break;}
  2794. case 307:
  2795. #line 1875 "fortran.y"
  2796. {
  2797.                 use_io_keyword(&(yyvsp[-2]),&(yyvsp[0]),curr_stmt_class);
  2798.             ;
  2799.     break;}
  2800. case 308:
  2801. #line 1879 "fortran.y"
  2802. {
  2803.                 if( yyvsp[0].class == '*' ) {
  2804.                   if(control_item_count == 1) /* format id */
  2805.                 {
  2806.                   io_list_directed = TRUE;
  2807.                 }
  2808.                 }
  2809.                 else if( is_true(ID_EXPR,yyvsp[0].TOK_flags)){
  2810.  
  2811.                 if(control_item_count == 0 &&
  2812.                  datatype_of(yyvsp[0].TOK_type) == type_STRING) {
  2813.                     /* unit id=char variable is
  2814.                        an internal file.  I/O goes in
  2815.                        and out of the variable. */
  2816.                   io_internal_file = TRUE;
  2817.                   if(curr_stmt_class == tok_WRITE) {
  2818.                     use_lvalue(&(yyvsp[0]));
  2819.                   }
  2820.                 }
  2821.  
  2822.                     /* format id=namelist means
  2823.                        I/O with variables of namelist. */
  2824.                 else if( control_item_count == 1 &&
  2825.                  datatype_of(yyvsp[0].TOK_type) == type_NAMELIST) {
  2826.                     ref_namelist(&(yyvsp[0]),curr_stmt_class);
  2827.                 }
  2828.  
  2829.                 use_variable(&(yyvsp[0]));
  2830.                 }
  2831.             ;
  2832.     break;}
  2833. case 309:
  2834. #line 1919 "fortran.y"
  2835. {
  2836.                 if( yyvsp[0].class != '*'
  2837.                    && is_true(ID_EXPR,yyvsp[0].TOK_flags)){
  2838.                 use_variable(&(yyvsp[0]));
  2839.                 }
  2840.                 ++control_item_count;
  2841.             ;
  2842.     break;}
  2843. case 310:
  2844. #line 1927 "fortran.y"
  2845. {
  2846.                 use_io_keyword(&(yyvsp[-2]),&(yyvsp[0]),curr_stmt_class);
  2847.                 ++control_item_count;
  2848.             ;
  2849.     break;}
  2850. case 311:
  2851. #line 1932 "fortran.y"
  2852. {
  2853.                 ++control_item_count;
  2854.             ;
  2855.     break;}
  2856. case 312:
  2857. #line 1938 "fortran.y"
  2858. {
  2859.                 use_io_keyword(&(yyvsp[-2]),&(yyvsp[0]),curr_stmt_class);
  2860.             ;
  2861.     break;}
  2862. case 313:
  2863. #line 1942 "fortran.y"
  2864. {
  2865.                 use_special_open_keywd(&(yyvsp[0]));
  2866.             ;
  2867.     break;}
  2868. case 316:
  2869. #line 1953 "fortran.y"
  2870. {
  2871.                 if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){
  2872.                 if( curr_stmt_class == tok_READ ||
  2873.                     curr_stmt_class == tok_ACCEPT )
  2874.                     use_lvalue(&(yyvsp[0]));
  2875.                 else
  2876.                     use_variable(&(yyvsp[0]));
  2877.                 }
  2878.             ;
  2879.     break;}
  2880. case 318:
  2881. #line 1967 "fortran.y"
  2882. {
  2883.               if( ! is_true(LVALUE_EXPR,yyvsp[-3].TOK_flags) ) {
  2884.                 syntax_error(yyvsp[-3].line_num,yyvsp[-3].col_num,
  2885.                      "index is not assignable");
  2886.               }
  2887.               else {
  2888.                  use_implied_do_index(&(yyvsp[-3]));
  2889.               }
  2890.             ;
  2891.     break;}
  2892. case 319:
  2893. #line 1979 "fortran.y"
  2894. {init_io_ctrl_list();;
  2895.     break;}
  2896. case 321:
  2897. #line 1984 "fortran.y"
  2898. {init_io_ctrl_list();;
  2899.     break;}
  2900. case 323:
  2901. #line 1989 "fortran.y"
  2902. {init_io_ctrl_list();;
  2903.     break;}
  2904. case 325:
  2905. #line 1995 "fortran.y"
  2906. {
  2907.                 if( yyvsp[-1].class != '*'
  2908.                    && is_true(ID_EXPR,yyvsp[-1].TOK_flags)){
  2909.                 use_variable(&(yyvsp[-1]));
  2910.                 }
  2911.             ;
  2912.     break;}
  2913. case 327:
  2914. #line 2003 "fortran.y"
  2915. {init_io_ctrl_list();;
  2916.     break;}
  2917. case 328:
  2918. #line 2008 "fortran.y"
  2919. {
  2920.                 if( yyvsp[-1].class != '*'
  2921.                    && is_true(ID_EXPR,yyvsp[-1].TOK_flags)){
  2922.                 use_variable(&(yyvsp[-1]));
  2923.                 }
  2924.             ;
  2925.     break;}
  2926. case 330:
  2927. #line 2016 "fortran.y"
  2928. {init_io_ctrl_list();;
  2929.     break;}
  2930. case 331:
  2931. #line 2017 "fortran.y"
  2932. {init_io_ctrl_list();;
  2933.     break;}
  2934. case 332:
  2935. #line 2022 "fortran.y"
  2936. {
  2937.                 if( yyvsp[-1].class != '*'
  2938.                    && is_true(ID_EXPR,yyvsp[-1].TOK_flags)){
  2939.                 use_variable(&(yyvsp[-1]));
  2940.                 }
  2941.             ;
  2942.     break;}
  2943. case 334:
  2944. #line 2030 "fortran.y"
  2945. {init_io_ctrl_list();;
  2946.     break;}
  2947. case 337:
  2948. #line 2044 "fortran.y"
  2949. {
  2950.                 if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){
  2951.                  use_variable(&(yyvsp[0]));
  2952.                 }
  2953.             ;
  2954.     break;}
  2955. case 339:
  2956. #line 2053 "fortran.y"
  2957. {inside_format=TRUE;;
  2958.     break;}
  2959. case 340:
  2960. #line 2054 "fortran.y"
  2961. {
  2962.               inside_format=FALSE;
  2963.             ;
  2964.     break;}
  2965. case 359:
  2966. #line 2090 "fortran.y"
  2967. {
  2968.               if(f77_standard || !allow_format_dollarsigns)
  2969.                  nonstandard(yyvsp[0].line_num,yyvsp[0].col_num);
  2970.             ;
  2971.     break;}
  2972. case 364:
  2973. #line 2105 "fortran.y"
  2974. {inside_format=FALSE;;
  2975.     break;}
  2976. case 365:
  2977. #line 2106 "fortran.y"
  2978. {inside_format=TRUE;;
  2979.     break;}
  2980. case 366:
  2981. #line 2107 "fortran.y"
  2982. {
  2983.               if(f77_standard || !allow_variable_format)
  2984.                  nonstandard(yyvsp[-4].line_num,yyvsp[-4].col_num);
  2985.             ;
  2986.     break;}
  2987. case 367:
  2988. #line 2116 "fortran.y"
  2989. {
  2990.               check_stmt_sequence(&(yyvsp[-3]),SEQ_STMT_FUN);
  2991.  
  2992.                 def_stmt_function(&(yyvsp[-3]),&(yyvsp[-1]));
  2993.                 primary_id_expr(&(yyvsp[-3]),&(yyval));
  2994. #ifdef DEBUG_PARSER
  2995.                 if(debug_parser)
  2996.                   print_exprlist("stmt function",&(yyvsp[-1]));
  2997. #endif
  2998.             ;
  2999.     break;}
  3000. case 368:
  3001. #line 2130 "fortran.y"
  3002. {
  3003.                 yyval.next_token = (Token*)NULL;
  3004.             ;
  3005.     break;}
  3006. case 370:
  3007. #line 2137 "fortran.y"
  3008. {
  3009.                 yyval.next_token = append_token((Token*)NULL,&(yyvsp[0]));
  3010.             ;
  3011.     break;}
  3012. case 371:
  3013. #line 2142 "fortran.y"
  3014. {
  3015.                 yyval.next_token = append_token(yyvsp[-2].next_token,&(yyvsp[0]));
  3016.             ;
  3017.     break;}
  3018. case 373:
  3019. #line 2152 "fortran.y"
  3020. {
  3021.                  call_subr(&(yyvsp[0]),(Token*)NULL);
  3022.                  complex_const_allowed = FALSE;
  3023.             ;
  3024.     break;}
  3025. case 375:
  3026. #line 2158 "fortran.y"
  3027. {
  3028.                  call_subr(&(yyvsp[-2]),(Token*)NULL);
  3029.                  complex_const_allowed = FALSE;
  3030.             ;
  3031.     break;}
  3032. case 377:
  3033. #line 2164 "fortran.y"
  3034. {
  3035.                  call_subr(&(yyvsp[-3]),&(yyvsp[-1]));
  3036. #ifdef DEBUG_PARSER
  3037.                  if(debug_parser)
  3038.                 print_exprlist("call stmt",&(yyvsp[-1]));
  3039. #endif
  3040.                  complex_const_allowed = FALSE;
  3041.             ;
  3042.     break;}
  3043. case 379:
  3044. #line 2175 "fortran.y"
  3045. {
  3046.                  complex_const_allowed = TRUE;
  3047.                  yyval = yyvsp[0];
  3048.             ;
  3049.     break;}
  3050. case 380:
  3051. #line 2181 "fortran.y"
  3052. {
  3053.                 yyval.next_token = append_token((Token*)NULL,&(yyvsp[0]));
  3054.                 yyval.left_token = (Token *)NULL;
  3055.             ;
  3056.     break;}
  3057. case 381:
  3058. #line 2186 "fortran.y"
  3059. {
  3060.                 yyval.next_token = append_token(yyvsp[-2].next_token,&(yyvsp[0]));
  3061.             ;
  3062.     break;}
  3063. case 382:
  3064. #line 2192 "fortran.y"
  3065. {
  3066.                 if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){
  3067.                  use_actual_arg(&(yyvsp[0]));
  3068.                  use_variable(&(yyvsp[0]));
  3069.                 }
  3070.             ;
  3071.     break;}
  3072. case 383:
  3073. #line 2199 "fortran.y"
  3074. {
  3075.               yyval = yyvsp[0];
  3076.               yyval.left_token = (Token *)NULL;
  3077.             ;
  3078.     break;}
  3079. case 384:
  3080. #line 2207 "fortran.y"
  3081. {
  3082.                  do_RETURN(current_module_hash,&(yyvsp[-1]));
  3083.             ;
  3084.     break;}
  3085. case 385:
  3086. #line 2211 "fortran.y"
  3087. {
  3088.                  do_RETURN(current_module_hash,&(yyvsp[-2]));
  3089.             ;
  3090.     break;}
  3091. case 386:
  3092. #line 2218 "fortran.y"
  3093. {
  3094.                 if(!is_true(COMPLEX_FLAG,yyvsp[-3].TOK_flags))
  3095.                   complex_const_allowed=FALSE;
  3096.                 if(is_true(IN_ASSIGN,yyvsp[-3].TOK_flags))
  3097.                   in_assignment_stmt = TRUE;
  3098.  
  3099.                 if(yyvsp[-1].next_token == NULL)
  3100.                   call_func(&(yyvsp[-3]),(Token *)NULL);
  3101.                 else
  3102.                   call_func(&(yyvsp[-3]),&(yyvsp[-1]));
  3103.                 func_ref_expr(&(yyvsp[-3]),&(yyvsp[-1]),&(yyval));
  3104.                 yyval.left_token = add_tree_node(
  3105.                            &(yyvsp[-2]),&(yyvsp[-3]),
  3106.                            (yyvsp[-1].next_token == NULL?
  3107.                             empty_token(&(yyvsp[-1])) :
  3108.                             yyvsp[-1].next_token) );
  3109. #ifdef DEBUG_PARSER
  3110.                 if(debug_parser)
  3111.                     print_exprlist("function",&(yyvsp[-1]));
  3112. #endif
  3113.             ;
  3114.     break;}
  3115. case 387:
  3116. #line 2246 "fortran.y"
  3117. {
  3118.               if(complex_const_allowed)/* save context */
  3119.                 make_true(COMPLEX_FLAG,yyval.TOK_flags);
  3120.               complex_const_allowed=TRUE;
  3121.               if(in_assignment_stmt)
  3122.                 make_true(IN_ASSIGN,yyval.TOK_flags);
  3123.               in_assignment_stmt = FALSE;
  3124.             ;
  3125.     break;}
  3126. case 388:
  3127. #line 2256 "fortran.y"
  3128. {
  3129.                 yyval.class = 0;
  3130.                 yyval.next_token = (Token *)NULL;
  3131.                 yyval.left_token = (Token *)NULL;
  3132.             ;
  3133.     break;}
  3134. case 390:
  3135. #line 2265 "fortran.y"
  3136. {
  3137.                 yyval.next_token = append_token((Token*)NULL,&(yyvsp[0]));
  3138.                 yyval.left_token = (Token *)NULL;
  3139.             ;
  3140.     break;}
  3141. case 391:
  3142. #line 2270 "fortran.y"
  3143. {
  3144.                 yyval.next_token = append_token(yyvsp[-2].next_token,&(yyvsp[0]));
  3145.             ;
  3146.     break;}
  3147. case 392:
  3148. #line 2278 "fortran.y"
  3149. {
  3150.               int t=datatype_of(yyvsp[0].TOK_type);
  3151.               if( t != type_ERROR){
  3152.                 if( ! is_const_type(t) ) {
  3153.                   syntax_error(yyvsp[0].line_num,yyvsp[0].col_num,
  3154.               "arithmetic, char, or logical expression expected");
  3155.                 }
  3156.                 else {
  3157.                   if( !is_true(PARAMETER_EXPR,yyvsp[0].TOK_flags) ) {
  3158.                 syntax_error(yyvsp[0].line_num,yyvsp[0].col_num,
  3159.                        "constant expression expected");
  3160.                   }
  3161.                 /* Here we allow, with some warnings, expr
  3162.                    containing intrins func or **REAL in
  3163.                    PARAMETER defn. */
  3164.                   else if( !is_true(CONST_EXPR,yyvsp[0].TOK_flags) ) {
  3165.                 if(f77_standard) {
  3166.                   nonstandard(yyvsp[0].line_num,yyvsp[0].col_num);
  3167.                   msg_tail(
  3168.              "intrinsic function or **REAL in PARAMETER defn");
  3169.                 }
  3170.                   }
  3171.                 }
  3172.               }
  3173.             ;
  3174.     break;}
  3175. case 393:
  3176. #line 2307 "fortran.y"
  3177. {
  3178.               yyval.next_token = (Token *) NULL;
  3179. #ifdef DEBUG_PARSER
  3180.                 if(debug_parser) {
  3181.                 (void)fprintf(list_fd,
  3182.                     "\nexpr: class=0x%x subclass=0x%x",
  3183.                     yyvsp[0].class,
  3184.                     yyvsp[0].subclass);
  3185.                 }
  3186. #endif
  3187.             ;
  3188.     break;}
  3189. case 395:
  3190. #line 2324 "fortran.y"
  3191. {
  3192.                 do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0])
  3193.                      ,&(yyval));
  3194.             ;
  3195.     break;}
  3196. case 396:
  3197. #line 2329 "fortran.y"
  3198. {
  3199.                 do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0])
  3200.                      ,&(yyval));
  3201.             ;
  3202.     break;}
  3203. case 398:
  3204. #line 2338 "fortran.y"
  3205. {
  3206.                 do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0])
  3207.                      ,&(yyval));
  3208.             ;
  3209.     break;}
  3210. case 400:
  3211. #line 2347 "fortran.y"
  3212. {
  3213.                 do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0])
  3214.                      ,&(yyval));
  3215.             ;
  3216.     break;}
  3217. case 402:
  3218. #line 2356 "fortran.y"
  3219. {
  3220.                 do_unexpr(&(yyvsp[-1]),&(yyvsp[0]),&(yyval));
  3221.             ;
  3222.     break;}
  3223. case 404:
  3224. #line 2364 "fortran.y"
  3225. {
  3226.                 do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0])
  3227.                      ,&(yyval));
  3228.             ;
  3229.     break;}
  3230. case 406:
  3231. #line 2374 "fortran.y"
  3232. {
  3233.                 do_unexpr(&(yyvsp[-1]),&(yyvsp[0]),&(yyval));
  3234.             ;
  3235.     break;}
  3236. case 407:
  3237. #line 2378 "fortran.y"
  3238. {
  3239.                 do_unexpr(&(yyvsp[-1]),&(yyvsp[0]),&(yyval));
  3240.             ;
  3241.     break;}
  3242. case 408:
  3243. #line 2382 "fortran.y"
  3244. {
  3245.                 do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0])
  3246.                      ,&(yyval));
  3247.             ;
  3248.     break;}
  3249. case 409:
  3250. #line 2387 "fortran.y"
  3251. {
  3252.                 do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0])
  3253.                      ,&(yyval));
  3254.             ;
  3255.     break;}
  3256. case 411:
  3257. #line 2396 "fortran.y"
  3258. {
  3259.                 do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0])
  3260.                      ,&(yyval));
  3261.                 if(div_check &&
  3262.                    !is_true(CONST_EXPR,yyvsp[0].TOK_flags)){
  3263.                 warning(yyvsp[-1].line_num,yyvsp[-1].col_num,
  3264.                     "Possible division by zero");
  3265.                 }
  3266.             ;
  3267.     break;}
  3268. case 412:
  3269. #line 2406 "fortran.y"
  3270. {
  3271.                 do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0])
  3272.                      ,&(yyval));
  3273.             ;
  3274.     break;}
  3275. case 414:
  3276. #line 2415 "fortran.y"
  3277. {
  3278.                 do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0])
  3279.                      ,&(yyval));
  3280.             ;
  3281.     break;}
  3282. case 416:
  3283. #line 2424 "fortran.y"
  3284. {
  3285.                 do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0])
  3286.                      ,&(yyval));
  3287.             ;
  3288.     break;}
  3289. case 421:
  3290. #line 2439 "fortran.y"
  3291. {
  3292.                 yyval.TOK_flags = 0;
  3293.                 yyval.left_token = (Token *)NULL;
  3294.                 make_true(CONST_EXPR,yyval.TOK_flags);
  3295.                 make_true(PARAMETER_EXPR,yyval.TOK_flags);
  3296.                 make_true(LIT_CONST,yyval.TOK_flags);
  3297.                 make_true(EVALUATED_EXPR,yyval.TOK_flags);
  3298.             ;
  3299.     break;}
  3300. case 422:
  3301. #line 2448 "fortran.y"
  3302. {
  3303.                 yyval = yyvsp[-1];
  3304.                 if(is_true(LVALUE_EXPR,yyvsp[-1].TOK_flags)) {
  3305.                 if(pretty_flag) {
  3306.                   ugly_code(yyvsp[-1].line_num,yyvsp[-1].col_num,
  3307.                       "Extraneous parentheses");
  3308.                 }
  3309.                 use_variable(&(yyvsp[-1]));
  3310.                 make_false(LVALUE_EXPR,yyval.TOK_flags);
  3311.                 make_false(ARRAY_ID_EXPR,yyval.TOK_flags);
  3312.                 make_false(ARRAY_ELEMENT_EXPR,yyval.TOK_flags);
  3313.                 make_false(ID_EXPR,yyval.TOK_flags);
  3314.                 }
  3315.                 yyval.left_token = add_tree_node(&(yyvsp[-2]),&(yyvsp[-1]),
  3316.                               (Token*)NULL);
  3317.             ;
  3318.     break;}
  3319. case 423:
  3320. #line 2471 "fortran.y"
  3321. {
  3322.                 yyval.size = size_DEFAULT;
  3323.             ;
  3324.     break;}
  3325. case 424:
  3326. #line 2476 "fortran.y"
  3327. {
  3328.                 yyval.TOK_type = type_byte(class_VAR,type_STRING);
  3329.             ;
  3330.     break;}
  3331. case 425:
  3332. #line 2481 "fortran.y"
  3333. {
  3334.                 yyval.TOK_type = type_byte(class_VAR,type_HOLLERITH);
  3335.                 if(port_check && hollerith_check) {
  3336.                 warning(yyvsp[0].line_num,yyvsp[0].col_num,
  3337.                 "hollerith constant may not be portable");
  3338.                 }
  3339.             ;
  3340.     break;}
  3341. case 426:
  3342. #line 2490 "fortran.y"
  3343. {
  3344.                 yyval.TOK_type = type_byte(class_VAR,type_LOGICAL);
  3345.                 yyval.size = size_DEFAULT;
  3346.             ;
  3347.     break;}
  3348. case 427:
  3349. #line 2497 "fortran.y"
  3350. {
  3351.                 yyval.TOK_type = type_byte(class_VAR,type_INTEGER);
  3352.             ;
  3353.     break;}
  3354. case 428:
  3355. #line 2501 "fortran.y"
  3356. {
  3357.                 yyval.TOK_type = type_byte(class_VAR,type_REAL);
  3358.             ;
  3359.     break;}
  3360. case 429:
  3361. #line 2505 "fortran.y"
  3362. {
  3363.                 yyval.TOK_type = type_byte(class_VAR,type_DP);
  3364.             ;
  3365.     break;}
  3366. case 430:
  3367. #line 2509 "fortran.y"
  3368. {
  3369.                 yyval.TOK_type = type_byte(class_VAR,type_COMPLEX);
  3370.             ;
  3371.     break;}
  3372. case 431:
  3373. #line 2513 "fortran.y"
  3374. {
  3375.                 yyval.TOK_type = type_byte(class_VAR,type_DCOMPLEX);
  3376.             ;
  3377.     break;}
  3378. case 432:
  3379. #line 2520 "fortran.y"
  3380. {
  3381.                 if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){
  3382.                 use_variable(&(yyvsp[0]));
  3383.                 }
  3384.                 if(datatype_of(yyvsp[0].TOK_type) != type_INTEGER) {
  3385.                 syntax_error(
  3386.                     yyvsp[0].line_num,yyvsp[0].col_num,
  3387.                     "expression must be integer type");
  3388.                 }
  3389.             ;
  3390.     break;}
  3391. case 433:
  3392. #line 2534 "fortran.y"
  3393. {
  3394.                 if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){
  3395.                 use_variable(&(yyvsp[0]));
  3396.                 }
  3397.                 {
  3398.                 int t=datatype_of(yyvsp[0].TOK_type);
  3399.                     if(t != type_INTEGER && t != type_REAL
  3400.                     && t != type_DP ) {
  3401.                     syntax_error(
  3402.                       yyvsp[0].line_num,yyvsp[0].col_num,
  3403.         "expression must be integer, real, or double precision type");
  3404.                     }
  3405.                 }
  3406.             ;
  3407.     break;}
  3408. case 434:
  3409. #line 2554 "fortran.y"
  3410. {
  3411.                 if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){
  3412.                 use_variable(&(yyvsp[0]));
  3413.                 }
  3414.                 if( ! is_true(CONST_EXPR,yyvsp[0].TOK_flags) ) {
  3415.                 syntax_error(
  3416.                     yyvsp[0].line_num,yyvsp[0].col_num,
  3417.                     "constant expression expected");
  3418.                 }
  3419.                 else {
  3420.                   if(datatype_of(yyvsp[0].TOK_type) != type_INTEGER){
  3421.                 syntax_error(
  3422.                     yyvsp[0].line_num,yyvsp[0].col_num,
  3423.                     "integer expression expected");
  3424.                   }
  3425.                   else {
  3426.                 yyval.value.integer = int_expr_value(&(yyvsp[0]));
  3427.                   }
  3428.                 }
  3429.             ;
  3430.     break;}
  3431. case 435:
  3432. #line 2578 "fortran.y"
  3433. {
  3434.                 if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){
  3435.                 use_variable(&(yyvsp[0]));
  3436.                 }
  3437.  
  3438.                 if( datatype_of(yyvsp[0].TOK_type) != type_INTEGER ){
  3439.                 syntax_error(
  3440.                     yyvsp[0].line_num,yyvsp[0].col_num,
  3441.                     "integer dimension expected");
  3442.                 yyval.value.integer = 0;
  3443.                 }
  3444.                 else {
  3445.                   if( is_true(EVALUATED_EXPR,yyvsp[0].TOK_flags) )
  3446.                 yyval.value.integer =
  3447.                   int_expr_value(&(yyvsp[0]));
  3448.                   else        /* must be dummy */
  3449.                 yyval.value.integer = 0;
  3450.                 }
  3451.             ;
  3452.     break;}
  3453. case 436:
  3454. #line 2604 "fortran.y"
  3455. {
  3456.                 ref_array(&(yyvsp[-3]),&(yyvsp[-1]));
  3457. #ifdef DEBUG_PARSER
  3458.                 if(debug_parser)
  3459.                     print_exprlist("array lvalue",&(yyvsp[-1]));
  3460. #endif
  3461.                 make_false(ARRAY_ID_EXPR,yyval.TOK_flags);
  3462.                 make_true(ARRAY_ELEMENT_EXPR,yyval.TOK_flags);
  3463.                 yyval.left_token = add_tree_node(
  3464.                            &(yyvsp[-2]),&(yyvsp[-3]),yyvsp[-1].next_token);
  3465.                 yyval.next_token = (Token *) NULL;
  3466.             ;
  3467.     break;}
  3468. case 437:
  3469. #line 2620 "fortran.y"
  3470. {
  3471.                 ref_array(&(yyvsp[-3]),&(yyvsp[-1]));
  3472. #ifdef DEBUG_PARSER
  3473.                 if(debug_parser)
  3474.                     print_exprlist("array",&(yyvsp[-1]));
  3475. #endif
  3476.                 make_false(ARRAY_ID_EXPR,yyval.TOK_flags);
  3477.                 make_true(ARRAY_ELEMENT_EXPR,yyval.TOK_flags);
  3478.                 yyval.left_token = add_tree_node(
  3479.                            &(yyvsp[-2]),&(yyvsp[-3]),yyvsp[-1].next_token);
  3480.                 yyval.next_token = (Token *) NULL;
  3481.             ;
  3482.     break;}
  3483. case 438:
  3484. #line 2636 "fortran.y"
  3485. {
  3486.                 yyval.next_token = append_token((Token*)NULL,&(yyvsp[0]));
  3487.             ;
  3488.     break;}
  3489. case 439:
  3490. #line 2640 "fortran.y"
  3491. {
  3492.                 yyval.next_token = append_token(yyvsp[-2].next_token,&(yyvsp[0]));
  3493.             ;
  3494.     break;}
  3495. case 440:
  3496. #line 2646 "fortran.y"
  3497. {
  3498.                 if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){
  3499.                  use_variable(&(yyvsp[0]));
  3500.                 }
  3501.                 if(datatype_of(yyvsp[0].TOK_type) != type_INTEGER)
  3502.                   if(trunc_check)
  3503.                  warning(yyvsp[0].line_num,yyvsp[0].col_num,
  3504.                      "subscript is not integer");
  3505.             ;
  3506.     break;}
  3507. case 441:
  3508. #line 2660 "fortran.y"
  3509. {
  3510.                 if(!is_true(COMPLEX_FLAG,yyvsp[-1].TOK_flags))
  3511.                   complex_const_allowed=FALSE;
  3512.                 /* set flag to keep more than just id for
  3513.                    arg list text */
  3514.                 if(is_true(ID_EXPR,yyvsp[-1].TOK_flags))
  3515.                    make_true(ARRAY_ELEMENT_EXPR,yyval.TOK_flags);
  3516.                 yyval.size=substring_size(&(yyvsp[-1]),&(yyvsp[0]));
  3517.                 yyval.left_token = add_tree_node(
  3518.                            &save_token,&(yyvsp[-1]),&(yyvsp[0]));
  3519.                 yyval.next_token = (Token *) NULL;
  3520.             ;
  3521.     break;}
  3522. case 442:
  3523. #line 2675 "fortran.y"
  3524. {
  3525.                 yyval.size=substring_size(&(yyvsp[-1]),&(yyvsp[0]));
  3526.                 yyval.left_token = add_tree_node(
  3527.                            &save_token,&(yyvsp[-1]),&(yyvsp[0]));
  3528.                 yyval.next_token = (Token *) NULL;
  3529.             ;
  3530.     break;}
  3531. case 443:
  3532. #line 2683 "fortran.y"
  3533. {
  3534.                 yyval.size=substring_size(&(yyvsp[-1]),&(yyvsp[0]));
  3535.                 yyval.left_token = add_tree_node(
  3536.                            &save_token,&(yyvsp[-1]),&(yyvsp[0]));
  3537.                 yyval.next_token = (Token *) NULL;
  3538.             ;
  3539.     break;}
  3540. case 444:
  3541. #line 2692 "fortran.y"
  3542. {
  3543.                 yyval.size=substring_size(&(yyvsp[-1]),&(yyvsp[0]));
  3544.             ;
  3545.     break;}
  3546. case 445:
  3547. #line 2696 "fortran.y"
  3548. {
  3549.                 yyval.size=substring_size(&(yyvsp[-1]),&(yyvsp[0]));
  3550.             ;
  3551.     break;}
  3552. case 446:
  3553. #line 2705 "fortran.y"
  3554. {
  3555.                 yyval.TOK_start=1;
  3556.                 yyval.TOK_end=0; /* 0 means LEN */
  3557.  
  3558.                 save_token = yyvsp[-2]; /* Save the paren for tree node */
  3559.                 yyval.left_token =
  3560.                   add_tree_node(&(yyvsp[-1]),
  3561.                      empty_token(&(yyvsp[-2])),empty_token(&(yyvsp[0])));
  3562.                 /* Nullify next_token so it looks like
  3563.                    a tokenlist */
  3564.                 yyval.next_token = (Token *)NULL;
  3565.             ;
  3566.     break;}
  3567. case 447:
  3568. #line 2719 "fortran.y"
  3569. {
  3570.                 yyval.TOK_start=yyvsp[-2].value.integer;
  3571.                 yyval.TOK_end=0; /* 0 means LEN */
  3572.  
  3573.                 save_token = yyvsp[-3]; /* Save the paren for tree node */
  3574.                 yyval.left_token =
  3575.                   add_tree_node(&(yyvsp[-1]),&(yyvsp[-2]),empty_token(&(yyvsp[0])));
  3576.                 yyval.next_token = (Token *)NULL;
  3577.             ;
  3578.     break;}
  3579. case 448:
  3580. #line 2729 "fortran.y"
  3581. {
  3582.                 yyval.TOK_start=1;
  3583.                 yyval.TOK_end=yyvsp[-1].value.integer;
  3584.  
  3585.                 save_token = yyvsp[-3]; /* Save the paren for tree node */
  3586.                 yyval.left_token =
  3587.                   add_tree_node(&(yyvsp[-2]),empty_token(&(yyvsp[-3])),&(yyvsp[-1]));
  3588.                 yyval.next_token = (Token *)NULL;
  3589.             ;
  3590.     break;}
  3591. case 449:
  3592. #line 2739 "fortran.y"
  3593. {
  3594.                 yyval.TOK_start=yyvsp[-3].value.integer;
  3595.                 yyval.TOK_end=yyvsp[-1].value.integer;
  3596.  
  3597.                 save_token = yyvsp[-4]; /* Save the paren for tree node */
  3598.                 yyval.left_token =
  3599.                   add_tree_node(&(yyvsp[-2]),&(yyvsp[-3]),&(yyvsp[-1]));
  3600.                 yyval.next_token = (Token *)NULL;
  3601.             ;
  3602.     break;}
  3603. case 450:
  3604. #line 2751 "fortran.y"
  3605. {
  3606.               if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){
  3607.                 use_variable(&(yyvsp[0]));
  3608.               }
  3609.                 /* check validity and replace nonconst
  3610.                    value by size_UNKNOWN. */
  3611.               if(is_true(CONST_EXPR,yyvsp[0].TOK_flags)) {
  3612.                 if( (yyval.value.integer=int_expr_value(&(yyvsp[0]))) < 1) {
  3613.                   syntax_error(yyvsp[0].line_num,yyvsp[0].col_num,
  3614.                        "invalid substring index");
  3615.                 }
  3616.               }
  3617.               else  /* (no longer need ID hash index) */
  3618.                 yyval.value.integer=size_UNKNOWN;
  3619.             ;
  3620.     break;}
  3621. case 453:
  3622. #line 2776 "fortran.y"
  3623. {
  3624.                 ref_variable(&(yyvsp[0]));
  3625.                 primary_id_expr(&(yyvsp[0]),&(yyval));
  3626.             ;
  3627.     break;}
  3628. case 454:
  3629. #line 2783 "fortran.y"
  3630. {
  3631.                 ref_variable(&(yyvsp[0]));
  3632.                 primary_id_expr(&(yyvsp[0]),&(yyval));
  3633.             ;
  3634.     break;}
  3635. case 463:
  3636. #line 2809 "fortran.y"
  3637. {
  3638.               if(yyvsp[0].value.integer == 0) {
  3639.                 warning(yyvsp[0].line_num,yyvsp[0].col_num,
  3640.                     "nonzero integer expected");
  3641.                 msg_tail(": substituting 1");
  3642.                 yyval.value.integer = 1;
  3643.               }
  3644.               yyval.left_token = (Token *)NULL;
  3645.             ;
  3646.     break;}
  3647. case 464:
  3648. #line 2825 "fortran.y"
  3649. {
  3650.                 integer_context=TRUE;
  3651.             ;
  3652.     break;}
  3653. case 465:
  3654. #line 2832 "fortran.y"
  3655. {
  3656.                 integer_context=FALSE;
  3657.                 yyval.TOK_type = type_byte(class_LABEL,type_LABEL);
  3658.                 yyval.size = size_DEFAULT;
  3659.                 yyval.TOK_flags = 0;
  3660.             ;
  3661.     break;}
  3662. }
  3663. #line 465 "/usr/lib/bison.simple"
  3664.  
  3665.   yyvsp -= yylen;
  3666.   yyssp -= yylen;
  3667. #ifdef YYLSP_NEEDED
  3668.   yylsp -= yylen;
  3669. #endif
  3670.  
  3671.  
  3672.   *++yyvsp = yyval;
  3673.  
  3674. #ifdef YYLSP_NEEDED
  3675.   yylsp++;
  3676.   if (yylen == 0)
  3677.     {
  3678.       yylsp->first_line = yylloc.first_line;
  3679.       yylsp->first_column = yylloc.first_column;
  3680.       yylsp->last_line = (yylsp-1)->last_line;
  3681.       yylsp->last_column = (yylsp-1)->last_column;
  3682.       yylsp->text = 0;
  3683.     }
  3684.   else
  3685.     {
  3686.       yylsp->last_line = (yylsp+yylen-1)->last_line;
  3687.       yylsp->last_column = (yylsp+yylen-1)->last_column;
  3688.     }
  3689. #endif
  3690.  
  3691.   /* Now "shift" the result of the reduction.
  3692.      Determine what state that goes to,
  3693.      based on the state we popped back to
  3694.      and the rule number reduced by.  */
  3695.  
  3696.   yyn = yyr1[yyn];
  3697.  
  3698.   yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
  3699.   if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
  3700.     yystate = yytable[yystate];
  3701.   else
  3702.     yystate = yydefgoto[yyn - YYNTBASE];
  3703.  
  3704.   goto yynewstate;
  3705.  
  3706. yyerrlab:   /* here on detecting error */
  3707.  
  3708.   if (! yyerrstatus)
  3709.     {
  3710.       ++yynerrs;
  3711.  
  3712. #ifdef YYERROR_VERBOSE
  3713.       yyn = yypact[yystate];
  3714.  
  3715.       if (yyn > YYFLAG && yyn < YYLAST)
  3716.     {
  3717.       int size = 0;
  3718.       char *msg;
  3719.       int x, count;
  3720.  
  3721.       count = 0;
  3722.       for (x = (yyn < 0 ? -yyn : 0);
  3723.            x < (sizeof(yytname) / sizeof(char *)); x++)
  3724.         if (yycheck[x + yyn] == x)
  3725.           size += strlen(yytname[x]) + 15, count++;
  3726.       msg = (char *) malloc(size + 15);
  3727.       if (msg != 0)
  3728.         {
  3729.           strcpy(msg, "parse error");
  3730.  
  3731.           if (count < 5)
  3732.         {
  3733.           count = 0;
  3734.           for (x = (yyn < 0 ? -yyn : 0);
  3735.                x < (sizeof(yytname) / sizeof(char *)); x++)
  3736.             if (yycheck[x + yyn] == x)
  3737.               {
  3738.             strcat(msg, count == 0 ? ", expecting `" : " or `");
  3739.             strcat(msg, yytname[x]);
  3740.             strcat(msg, "'");
  3741.             count++;
  3742.               }
  3743.         }
  3744.           yyerror(msg);
  3745.           free(msg);
  3746.         }
  3747.       else
  3748.         yyerror ("parse error; also virtual memory exceeded");
  3749.     }
  3750.       else
  3751. #endif /* YYERROR_VERBOSE */
  3752.     yyerror("parse error");
  3753.     }
  3754.  
  3755.   goto yyerrlab1;
  3756. yyerrlab1:   /* here on error raised explicitly by an action */
  3757.  
  3758.   if (yyerrstatus == 3)
  3759.     {
  3760.  
  3761.       if (yychar == YYEOF)
  3762.     YYABORT;
  3763.  
  3764.  
  3765.       yychar = YYEMPTY;
  3766.     }
  3767.  
  3768.   /* Else will try to reuse lookahead token
  3769.      after shifting the error token.  */
  3770.  
  3771.   yyerrstatus = 3;        /* Each real token shifted decrements this */
  3772.  
  3773.   goto yyerrhandle;
  3774.  
  3775. yyerrdefault: /* current state does not do anything special for the error token. */
  3776.  
  3777. #if 0
  3778.   /* This is wrong; only states that explicitly want error tokens
  3779.      should shift them.  */
  3780.   yyn = yydefact[yystate]; /* If its default is to accept any token, ok.  Otherwise pop it.*/
  3781.   if (yyn) goto yydefault;
  3782. #endif
  3783.  
  3784. yyerrpop: /* pop the current state because it cannot handle the error token */
  3785.  
  3786.   if (yyssp == yyss) YYABORT;
  3787.   yyvsp--;
  3788.   yystate = *--yyssp;
  3789. #ifdef YYLSP_NEEDED
  3790.   yylsp--;
  3791. #endif
  3792.  
  3793.  
  3794. yyerrhandle:
  3795.  
  3796.   yyn = yypact[yystate];
  3797.   if (yyn == YYFLAG)
  3798.     goto yyerrdefault;
  3799.  
  3800.   yyn += YYTERROR;
  3801.   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
  3802.     goto yyerrdefault;
  3803.  
  3804.   yyn = yytable[yyn];
  3805.   if (yyn < 0)
  3806.     {
  3807.       if (yyn == YYFLAG)
  3808.     goto yyerrpop;
  3809.       yyn = -yyn;
  3810.       goto yyreduce;
  3811.     }
  3812.   else if (yyn == 0)
  3813.     goto yyerrpop;
  3814.  
  3815.   if (yyn == YYFINAL)
  3816.     YYACCEPT;
  3817.  
  3818.  
  3819.   *++yyvsp = yylval;
  3820. #ifdef YYLSP_NEEDED
  3821.   *++yylsp = yylloc;
  3822. #endif
  3823.  
  3824.   yystate = yyn;
  3825.   goto yynewstate;
  3826. }
  3827. #line 2842 "fortran.y"
  3828.  
  3829. void
  3830. init_parser()            /* Initialize various flags & counters */
  3831. {
  3832.     initial_flag = TRUE;    /* set flag for keyword test */
  3833.     implicit_flag=FALSE;    /* clear flags for IMPLICIT stmt */
  3834.     implicit_letter_flag = FALSE;
  3835.     implicit_type_given = FALSE;
  3836.     implicit_none = FALSE;
  3837.     global_save = FALSE;
  3838.     prev_token_class = EOS;
  3839.     complex_const_allowed = FALSE;
  3840.     stmt_sequence_no = 0;
  3841.     true_prev_stmt_line_num = 0;
  3842. }
  3843.  
  3844.                 /* Handle unary expressions: link
  3845.                    into a tree and propagate type.
  3846.                  */
  3847. PRIVATE void
  3848. do_unexpr(op,expr,result)
  3849.      Token *op,*expr,*result;
  3850. {
  3851.   unexpr_type(op,expr,result);
  3852.  
  3853.   result->left_token = add_tree_node(op, expr, (Token*)NULL);
  3854. }
  3855.                 /* Handle binary expressions: link
  3856.                    into a tree and propagate type.
  3857.                  */
  3858. PRIVATE void
  3859. do_binexpr(l_expr,op,r_expr,result)
  3860.      Token *l_expr,*op,*r_expr,*result;
  3861. {
  3862.   binexpr_type(l_expr,op,r_expr,result); /* Propagate the type */
  3863.  
  3864.   result->left_token = add_tree_node(op, l_expr, r_expr);
  3865. }
  3866.  
  3867.  
  3868.             /* Changes a token to empty and replaces
  3869.                src_text by null string, value by 0.  Other
  3870.                info (line, col, etc.)  unchanged. */
  3871.  
  3872. PRIVATE Token *
  3873. empty_token(t)
  3874.      Token *t;
  3875. {
  3876. #ifdef DEBUG_EMPTY_TOKEN
  3877.   static char *nullstring="(empty)"; /* for debugging.  */
  3878. #else
  3879.   static char *nullstring=""; /* for operation.  */
  3880. #endif
  3881.   t->class = tok_empty;
  3882.   t->subclass = 0;
  3883.   t->value.integer = 0;
  3884.   t->left_token = (Token *) NULL;
  3885.   t->src_text = nullstring;
  3886.  
  3887.   return t;
  3888. }
  3889.  
  3890.         /* Propagate non-integer type if any of DO loop
  3891.            bounds are non-integer. */
  3892. PRIVATE int
  3893. do_bounds_type(t1,t2,t3)
  3894.      Token *t1, *t2, *t3;
  3895. {
  3896.   int result_type;
  3897.        if(datatype_of(t1->TOK_type) != type_INTEGER)result_type = t1->TOK_type;
  3898.   else if(datatype_of(t2->TOK_type) != type_INTEGER)result_type = t2->TOK_type;
  3899.   else if(datatype_of(t3->TOK_type) != type_INTEGER)result_type = t3->TOK_type;
  3900.   else result_type = t1->TOK_type;
  3901.   return result_type;
  3902. }
  3903.  
  3904.  
  3905. #ifdef DEBUG_PARSER
  3906. PRIVATE void
  3907. print_exprlist(s,t)
  3908.     char *s;
  3909.     Token *t;
  3910. {
  3911.  
  3912.     (void)fprintf(list_fd,"\n%s arglist: ",s);
  3913.  
  3914.     if(t == NULL)
  3915.         (void)fprintf(list_fd,"(empty)");
  3916.     else {
  3917.         while( (t=t->next_token) != NULL) {
  3918.           fprintf(list_fd,"%s ",type_name[datatype_of(t->TOK_type)]);
  3919.           if( is_true(ID_EXPR,t->TOK_flags) )
  3920.             (void)fprintf(list_fd,"(%s) ",token_name(*t));
  3921.         }
  3922.     }
  3923. }
  3924.  
  3925. PRIVATE void
  3926. print_comlist(s,t)
  3927.     char *s;
  3928.     Token *t;
  3929. {
  3930.  
  3931.     (void)fprintf(list_fd,"\n%s varlist: ",s);
  3932.  
  3933.     if(t == NULL)
  3934.         (void)fprintf(list_fd,"(empty)");
  3935.     else {
  3936.         while( (t=t->next_token) != NULL) {
  3937.           fprintf(list_fd,"%s ",type_name[datatype_of(t->TOK_type)]);
  3938.           if( is_true(ID_EXPR,t->TOK_flags) )
  3939.             (void)fprintf(list_fd,"(%s) ",token_name(*t));
  3940.         }
  3941.       }
  3942. }
  3943. #endif
  3944.  
  3945. /* After having parsed prog_stmt, function_stmt, subroutine_stmt,
  3946.    block_data_stmt, the stmt_sequence_no is set to the value SEQ_HEADER.
  3947. */
  3948.  
  3949. void
  3950. check_seq_header(t)
  3951.      Token *t;
  3952. {
  3953.     if(stmt_sequence_no >= SEQ_HEADER) {
  3954.        syntax_error( (t == (Token *) NULL? line_num: t->line_num),
  3955.             NO_COL_NUM,
  3956.             "missing END statement inserted");
  3957.        msg_tail( (t == (Token *) NULL? "at end of file":
  3958.               "prior to statement") );
  3959.  
  3960.        END_processing(t);
  3961.     }
  3962.     stmt_sequence_no = SEQ_HEADER;
  3963. }
  3964.  
  3965. PRIVATE void
  3966. check_stmt_sequence(t,seq_num)
  3967.      Token *t;
  3968.      int seq_num;
  3969. {
  3970.     if(stmt_sequence_no > seq_num) {
  3971.      syntax_error(t->line_num, NO_COL_NUM,
  3972.               "Statement out of order.");
  3973.     }
  3974.     else {
  3975.     stmt_sequence_no = seq_num;
  3976.     }
  3977. }
  3978.  
  3979. PRIVATE void
  3980. init_io_ctrl_list()
  3981. {
  3982.   control_item_count = 0;
  3983.   io_internal_file = FALSE;
  3984.   io_list_directed = FALSE;
  3985.   io_warning_given = FALSE;
  3986. }
  3987.  
  3988.  
  3989.     /* After having parsed end_stmt, common block lists and
  3990.        subprogram argument lists are copied over into global symbol
  3991.        table, the local symbol table is printed out and then cleared,
  3992.        and stmt_sequence_no is set to zero for start of next module.
  3993.     */
  3994.  
  3995. PRIVATE void
  3996. END_processing(t)
  3997.     Token *t;
  3998. {
  3999.   ++tot_module_count;
  4000.   if(current_module_hash != -1) {
  4001.     if(exec_stmt_count == 0 &&
  4002.        current_module_type != type_BLOCK_DATA) {
  4003.       warning(t == (Token *)NULL? line_num: t->line_num, NO_COL_NUM,
  4004.           "Module contains no executable statements");
  4005.     }
  4006.     if(do_list && t != (Token *)NULL)
  4007.         (void)flush_line_out(t->line_num);
  4008.     check_loose_ends(current_module_hash);
  4009.     process_lists(current_module_hash);
  4010.     debug_symtabs();
  4011.     print_loc_symbols(current_module_hash);
  4012.     init_symtab();
  4013.   }
  4014.   exec_stmt_count = 0;
  4015.   stmt_sequence_no = 0;
  4016.   current_module_hash = -1;
  4017.   implicit_type_given = FALSE;
  4018.   implicit_none = FALSE;
  4019.   true_prev_stmt_line_num = 0;
  4020.   integer_context = FALSE;
  4021.   global_save = FALSE;
  4022. }
  4023.  
  4024.         /* Routine to create a node for an expr tree.  Returns
  4025.            a pointer to the newly created node.
  4026.          */
  4027. PRIVATE Token *
  4028. add_tree_node(node,left,right)
  4029.      Token *node,*left,*right;
  4030. {
  4031.   Token *new_node, *new_left, *new_right;
  4032.  
  4033.   new_node=new_token();
  4034.  
  4035.   *new_node = *node;        /* Make a permanent copy of root */
  4036.  
  4037.         /* Add the children.  If child's left_token pointer is
  4038.            null, then that expression is a primary.  Otherwise
  4039.            it is the root node of a subtree.
  4040.          */
  4041.   if(left->left_token == (Token *)NULL) {
  4042.     new_left=new_token();
  4043.     *new_left = *left;            /* Copy primary to permanent space */
  4044.   }
  4045.   else {
  4046.     new_left = left->left_token;    /* No copying needed in this case */
  4047.   }
  4048.  
  4049.   if(right == (Token *)NULL) {
  4050.     new_right = (Token *)NULL;        /* No right child */
  4051.   }
  4052.   else if(right->left_token == (Token *)NULL
  4053.       || node->class == '(') { /* Paren means right child is expr list */
  4054.     new_right=new_token();
  4055.     *new_right = *right;        /* Copy primary to permanent space */
  4056.   }
  4057.   else {
  4058.     new_right = right->left_token;    /* No copying needed in this case */
  4059.   }
  4060.  
  4061.   new_node->left_token = new_left;    /* Link children onto the new root */
  4062.   new_node->next_token = new_right;
  4063.   return new_node;
  4064. }
  4065.  
  4066. PRIVATE Token *
  4067. append_token(tlist,t)
  4068.      Token *tlist, *t;
  4069. {
  4070.     Token *tcopy;
  4071.  
  4072.     tcopy=new_token();
  4073.  
  4074.     *tcopy = *t;        /* make permanent copy of token */
  4075.     tcopy->next_token = tlist; /* link it onto front of list */
  4076.     return tcopy;        /* return it as new tlist */
  4077. }
  4078.