home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / octave-1.1.1p1-src.tgz / tar.out / fsf / octave / src / parse.cc < prev    next >
C/C++ Source or Header  |  1996-09-28  |  97KB  |  2,992 lines

  1.  
  2. /*  A Bison parser, made from parse.y with Bison version GNU Bison version 1.22
  3.   */
  4.  
  5. #define YYBISON 1  /* Identify Bison output.  */
  6.  
  7. #define    EXPR_AND_AND    258
  8. #define    EXPR_OR_OR    259
  9. #define    EXPR_AND    260
  10. #define    EXPR_OR    261
  11. #define    EXPR_NOT    262
  12. #define    EXPR_LT    263
  13. #define    EXPR_LE    264
  14. #define    EXPR_EQ    265
  15. #define    EXPR_NE    266
  16. #define    EXPR_GE    267
  17. #define    EXPR_GT    268
  18. #define    LEFTDIV    269
  19. #define    EMUL    270
  20. #define    EDIV    271
  21. #define    ELEFTDIV    272
  22. #define    QUOTE    273
  23. #define    TRANSPOSE    274
  24. #define    PLUS_PLUS    275
  25. #define    MINUS_MINUS    276
  26. #define    POW    277
  27. #define    EPOW    278
  28. #define    NUM    279
  29. #define    IMAG_NUM    280
  30. #define    NAME    281
  31. #define    SCREW    282
  32. #define    END    283
  33. #define    PLOT    284
  34. #define    TEXT    285
  35. #define    STYLE    286
  36. #define    FOR    287
  37. #define    WHILE    288
  38. #define    IF    289
  39. #define    ELSEIF    290
  40. #define    ELSE    291
  41. #define    BREAK    292
  42. #define    CONTINUE    293
  43. #define    FUNC_RET    294
  44. #define    UNWIND    295
  45. #define    CLEANUP    296
  46. #define    GLOBAL    297
  47. #define    TEXT_ID    298
  48. #define    LEXICAL_ERROR    299
  49. #define    FCN    300
  50. #define    SCREW_TWO    301
  51. #define    ELLIPSIS    302
  52. #define    ALL_VA_ARGS    303
  53. #define    END_OF_INPUT    304
  54. #define    USING    305
  55. #define    TITLE    306
  56. #define    WITH    307
  57. #define    COLON    308
  58. #define    OPEN_BRACE    309
  59. #define    CLOSE_BRACE    310
  60. #define    CLEAR    311
  61. #define    UNARY    312
  62.  
  63. #line 27 "parse.y"
  64.  
  65. #define YYDEBUG 1
  66.  
  67. #ifdef HAVE_CONFIG_H
  68. #include "config.h"
  69. #endif
  70.  
  71. #include <strstream.h>
  72.  
  73. #include "SLStack.h"
  74.  
  75. #include "Matrix.h"
  76.  
  77. #include "octave-hist.h"
  78. #include "user-prefs.h"
  79. #include "tree-base.h"
  80. #include "tree-expr.h"
  81. #include "tree-cmd.h"
  82. #include "tree-const.h"
  83. #include "tree-misc.h"
  84. #include "variables.h"
  85. #include "tree-plot.h"
  86. #include "octave.h"
  87. #include "symtab.h"
  88. #include "parse.h"
  89. #include "token.h"
  90. #include "error.h"
  91. #include "pager.h"
  92. #include "input.h"
  93. #include "utils.h"
  94. #include "lex.h"
  95.  
  96. // Nonzero means we're in the middle of defining a function.
  97. int defining_func = 0;
  98.  
  99. // Nonzero means we're in the middle of defining a loop.
  100. int looping = 0;
  101.  
  102. // Nonzero means we're in the middle of defining a conditional expression.
  103. int iffing = 0;
  104.  
  105. // Nonzero means we need to do some extra lookahead to avoid being
  106. // screwed by bogus function syntax.
  107. int maybe_screwed = 0;
  108.  
  109. // Nonzero means we need to do some extra lookahead to avoid being
  110. // screwed by bogus function syntax.
  111. int maybe_screwed_again = 0;
  112.  
  113. // Temporary symbol table pointer used to cope with bogus function syntax.
  114. symbol_table *tmp_local_sym_tab = 0;
  115.  
  116. // Stack to hold list of literal matrices.
  117. SLStack <tree_matrix *> ml;
  118.  
  119. // A nonzero element corresponding to an element of ml means we just
  120. // started reading a new matrix.  This should probably be part of a
  121. // new struct for matrix lists... 
  122. SLStack <int> mlnm;
  123.  
  124. // The current input line number.
  125. int input_line_number = 0;
  126.  
  127. // The column of the current token.
  128. int current_input_column = 1;
  129.  
  130. // Buffer for help text snagged from function files.
  131. char *help_buf = 0;
  132.  
  133. // Nonzero means we're working on a plot command.
  134. int plotting = 0;
  135.  
  136. // Nonzero means we've seen something that means we must be past the
  137. // range part of a plot command.
  138. int past_plot_range = 0;
  139.  
  140. // Nonzero means we're looking at the range part of a plot command.
  141. int in_plot_range = 0;
  142.  
  143. // Nonzero means we're looking at the using part of a plot command.
  144. int in_plot_using = 0;
  145.  
  146. // Nonzero means we're looking at the style part of a plot command.
  147. int in_plot_style = 0;
  148.  
  149. // Nonzero means we're looking at an indirect reference to a structure
  150. // element.
  151. int looking_at_indirect_ref = 0;
  152.  
  153. // Forward declarations for some functions defined at the bottom of
  154. // the file.
  155.  
  156. // Generic error messages.
  157. static void yyerror (char *s);
  158.  
  159. // Error mesages for mismatched end tokens.
  160. static void end_error (char *type, token::end_tok_type ettype, int l, int c);
  161.  
  162. // Check to see that end tokens are properly matched.
  163. static int check_end (token *tok, token::end_tok_type expected);
  164.  
  165. // Try to figure out early if an expression should become an
  166. // assignment to the builtin variable ans.
  167. static tree_expression *maybe_convert_to_ans_assign (tree_expression *expr);
  168.  
  169. // Maybe print a warning if an assignment expression is used as the
  170. // test in a logical expression.
  171. static void maybe_warn_assign_as_truth_value (tree_expression *expr);
  172.  
  173. // Build a binary expression.
  174. static tree_expression *make_binary_op
  175.      (int op, tree_expression *op1,    token *tok_val, tree_expression *op2);
  176.  
  177. // Build a prefix expression.
  178. static tree_expression *make_prefix_op
  179.      (int op, tree_identifier *op1, token *tok_val);
  180.  
  181. // Build a postfix expression.
  182. static tree_expression *make_postfix_op
  183.      (int op, tree_identifier *op1, token *tok_val);
  184.  
  185. // Build a binary expression.
  186. static tree_expression *make_unary_op
  187.      (int op, tree_expression *op1, token *tok_val);
  188.  
  189. // Make an expression that handles assignment of multiple values.
  190. static tree_expression *make_multi_val_ret
  191.      (tree_expression *rhs, int l = -1, int c = -1);
  192.  
  193. // Make an index expression.
  194. static tree_index_expression *make_index_expression
  195.      (tree_indirect_ref *indir, tree_argument_list *args);
  196.  
  197. #define ABORT_PARSE \
  198.   do \
  199.     { \
  200.       global_command = 0; \
  201.       yyerrok; \
  202.       if (interactive) \
  203.     YYACCEPT; \
  204.       else \
  205.     YYABORT; \
  206.     } \
  207.   while (0)
  208.  
  209.  
  210. #line 176 "parse.y"
  211. typedef union
  212. {
  213. // The type of the basic tokens returned by the lexer.
  214.   token *tok_val;
  215.  
  216. // Types for the nonterminals we generate.
  217.   tree *tree_type;
  218.   tree_expression *tree_expression_type;
  219.   tree_constant *tree_constant_type;
  220.   tree_matrix *tree_matrix_type;
  221.   tree_identifier *tree_identifier_type;
  222.   tree_indirect_ref *tree_indirect_ref_type;
  223.   tree_function *tree_function_type;
  224.   tree_index_expression *tree_index_expression_type;
  225.   tree_colon_expression *tree_colon_expression_type;
  226.   tree_argument_list *tree_argument_list_type;
  227.   tree_parameter_list *tree_parameter_list_type;
  228.   tree_command *tree_command_type;
  229.   tree_if_command *tree_if_command_type;
  230.   tree_if_clause *tree_if_clause_type;
  231.   tree_if_command_list *tree_if_command_list_type;
  232.   tree_global *tree_global_type;
  233.   tree_global_init_list *tree_global_init_list_type;
  234.   tree_global_command *tree_global_command_type;
  235.   tree_statement *tree_statement_type;
  236.   tree_statement_list *tree_statement_list_type;
  237.   tree_plot_command *tree_plot_command_type;
  238.   subplot *subplot_type;
  239.   subplot_list *subplot_list_type;
  240.   plot_limits *plot_limits_type;
  241.   plot_range *plot_range_type;
  242.   subplot_using *subplot_using_type;
  243.   subplot_style *subplot_style_type;
  244. } YYSTYPE;
  245.  
  246. #ifndef YYLTYPE
  247. typedef
  248.   struct yyltype
  249.     {
  250.       int timestamp;
  251.       int first_line;
  252.       int first_column;
  253.       int last_line;
  254.       int last_column;
  255.       char *text;
  256.    }
  257.   yyltype;
  258.  
  259. #define YYLTYPE yyltype
  260. #endif
  261.  
  262. #include <stdio.h>
  263.  
  264. #ifndef __cplusplus
  265. #ifndef __STDC__
  266. #define const
  267. #endif
  268. #endif
  269.  
  270.  
  271.  
  272. #define    YYFINAL        330
  273. #define    YYFLAG        -32768
  274. #define    YYNTBASE    72
  275.  
  276. #define YYTRANSLATE(x) ((unsigned)(x) <= 312 ? yytranslate[x] : 141)
  277.  
  278. static const char yytranslate[] = {     0,
  279.      2,     2,     2,     2,     2,     2,     2,     2,     2,    65,
  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,     2,     2,     2,     2,    68,
  283.     69,     7,     6,    64,     5,    71,     8,     2,     2,     2,
  284.      2,     2,     2,     2,     2,     2,     2,     4,    63,     2,
  285.      3,     2,     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.     67,     2,    70,     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,     2,     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,     9,    10,    11,
  305.     12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
  306.     22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
  307.     32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
  308.     42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
  309.     52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
  310.     62,    66
  311. };
  312.  
  313. #if YYDEBUG != 0
  314. static const short yyprhs[] = {     0,
  315.      0,     2,     4,     7,     9,    11,    13,    16,    19,    21,
  316.     23,    25,    27,    29,    32,    35,    37,    40,    43,    47,
  317.     51,    53,    56,    59,    61,    64,    67,    69,    71,    74,
  318.     76,    79,    80,    82,    84,    87,    90,    92,    96,   100,
  319.    102,   104,   107,   110,   114,   116,   119,   123,   129,   134,
  320.    139,   143,   146,   147,   149,   153,   155,   158,   160,   162,
  321.    164,   167,   170,   173,   176,   179,   182,   186,   190,   194,
  322.    198,   202,   206,   208,   211,   214,   218,   221,   224,   228,
  323.    234,   235,   237,   240,   242,   246,   248,   252,   253,   255,
  324.    257,   259,   261,   263,   271,   277,   285,   287,   289,   291,
  325.    295,   297,   300,   304,   307,   313,   317,   318,   320,   322,
  326.    324,   326,   329,   332,   335,   336,   340,   344,   351,   353,
  327.    355,   358,   361,   364,   367,   371,   375,   379,   383,   387,
  328.    391,   395,   399,   403,   407,   411,   415,   419,   423,   427,
  329.    431,   435,   439,   443,   447,   449,   451,   453,   457,   459,
  330.    461,   463,   466,   470,   472,   475,   478,   481,   484,   487,
  331.    491,   495,   498,   500,   503,   504,   505,   506,   507,   512,
  332.    517,   523,   528,   532,   535,   539,   542,   547,   550,   553,
  333.    557,   562,   567,   571,   573,   575,   577,   579,   580,   585,
  334.    587,   591,   596,   599,   602,   606,   609,   614,   617,   621,
  335.    624,   628,   630,   632,   634,   636,   640,   644,   648,   653,
  336.    655,   658,   660,   664,   666,   669,   671
  337. };
  338.  
  339. static const short yyrhs[] = {    73,
  340.      0,    55,     0,    75,    74,     0,    74,     0,    65,     0,
  341.     75,     0,    75,    65,     0,    75,    55,     0,    50,     0,
  342.      1,     0,    77,     0,    78,     0,    76,     0,    76,    77,
  343.      0,    76,    78,     0,    84,     0,    77,    84,     0,    78,
  344.     84,     0,    76,    77,    84,     0,    76,    78,    84,     0,
  345.     63,     0,    77,    64,     0,    77,    63,     0,    64,     0,
  346.     78,    63,     0,    78,    64,     0,    64,     0,    65,     0,
  347.     79,   108,     0,    63,     0,    80,   108,     0,     0,    82,
  348.      0,    83,     0,    83,    79,     0,    83,    80,     0,    84,
  349.      0,    83,    79,    84,     0,    83,    80,    84,     0,   101,
  350.      0,    96,     0,    35,    62,     0,    35,    88,     0,    35,
  351.     86,    88,     0,    87,     0,    87,    87,     0,    87,    87,
  352.     87,     0,    60,   110,    59,   110,    61,     0,    60,    59,
  353.    110,    61,     0,    60,   110,    59,    61,     0,    60,    59,
  354.     61,     0,    60,    61,     0,     0,    89,     0,    88,    64,
  355.     89,     0,   110,     0,   110,    90,     0,    91,     0,    93,
  356.      0,    94,     0,    91,    93,     0,    93,    91,     0,    91,
  357.     94,     0,    94,    91,     0,    93,    94,     0,    94,    93,
  358.      0,    91,    93,    94,     0,    91,    94,    93,     0,    93,
  359.     91,    94,     0,    93,    94,    91,     0,    94,    91,    93,
  360.      0,    94,    93,    91,     0,    92,     0,    92,   110,     0,
  361.     56,   110,     0,    92,    59,   110,     0,    57,   110,     0,
  362.     58,    37,     0,    58,    37,   110,     0,    58,    37,   110,
  363.     95,   110,     0,     0,   110,     0,    48,    98,     0,    99,
  364.      0,    98,   100,    99,     0,   134,     0,   134,     3,   110,
  365.      0,     0,    64,     0,    85,     0,   120,     0,    97,     0,
  366.    102,     0,    46,   107,    81,    47,   107,    81,    34,     0,
  367.     39,   110,   107,    81,    34,     0,    38,   131,     3,   110,
  368.    107,    81,    34,     0,    43,     0,    44,     0,    45,     0,
  369.     40,   103,    34,     0,   104,     0,   104,   106,     0,   110,
  370.    107,    81,     0,   104,   105,     0,    41,   107,   110,   107,
  371.     81,     0,    42,   107,    81,     0,     0,   108,     0,    64,
  372.      0,    63,     0,    65,     0,   108,    64,     0,   108,    63,
  373.      0,   108,    65,     0,     0,   131,     3,   110,     0,    30,
  374.      3,   110,     0,    67,   109,   139,    52,     3,   110,     0,
  375.    111,     0,   112,     0,   134,    26,     0,   134,    27,     0,
  376.    111,    24,     0,   111,    25,     0,   111,    28,   111,     0,
  377.    111,    29,   111,     0,   111,     6,   111,     0,   111,     5,
  378.    111,     0,   111,     7,   111,     0,   111,     8,   111,     0,
  379.    111,    21,   111,     0,   111,    22,   111,     0,   111,    20,
  380.    111,     0,   111,    23,   111,     0,   111,    14,   111,     0,
  381.    111,    15,   111,     0,   111,    16,   111,     0,   111,    18,
  382.    111,     0,   111,    19,   111,     0,   111,    17,   111,     0,
  383.    111,     9,   111,     0,   111,    10,   111,     0,   111,    11,
  384.    111,     0,   111,    12,   111,     0,    30,     0,    31,     0,
  385.     36,     0,    68,   110,    69,     0,   114,     0,   131,     0,
  386.    136,     0,    67,    70,     0,    67,    63,    70,     0,   113,
  387.      0,    26,   134,     0,    27,   134,     0,    13,   111,     0,
  388.      6,   111,     0,     5,   111,     0,   111,     4,   111,     0,
  389.    113,     4,   111,     0,   134,   115,     0,    36,     0,   115,
  390.     36,     0,     0,     0,     0,     0,    51,   116,   119,   121,
  391.      0,    51,   116,   119,   125,     0,    33,   118,   116,     3,
  392.    125,     0,   123,   116,     3,   125,     0,    67,   118,   117,
  393.      0,   122,    70,     0,   122,    53,    70,     0,   124,    70,
  394.      0,   124,    64,    53,    70,     0,   122,   134,     0,   122,
  395.      1,     0,   124,    64,   134,     0,   134,   118,   117,   126,
  396.      0,   132,   107,    81,   127,     0,   107,    81,   127,     0,
  397.     34,     0,    55,     0,   129,     0,   134,     0,     0,   129,
  398.     71,   130,    49,     0,   128,     0,   128,    68,    69,     0,
  399.    128,    68,   135,    69,     0,   128,    67,     0,    68,    69,
  400.      0,    68,    53,    69,     0,   133,    69,     0,   133,    64,
  401.     53,    69,     0,    68,   134,     0,   133,    64,   134,     0,
  402.     68,     1,     0,   133,    64,     1,     0,    32,     0,     4,
  403.      0,   110,     0,    54,     0,   135,    64,     4,     0,   135,
  404.     64,   110,     0,   135,    64,    54,     0,    67,   109,   137,
  405.     70,     0,   138,     0,   138,    63,     0,   139,     0,   138,
  406.     63,   139,     0,   140,     0,   140,    64,     0,   110,     0,
  407.    140,    64,   110,     0
  408. };
  409.  
  410. #endif
  411.  
  412. #if YYDEBUG != 0
  413. static const short yyrline[] = { 0,
  414.    290,   296,   302,   304,   308,   310,   312,   314,   318,   320,
  415.    323,   325,   327,   329,   334,   338,   340,   342,   344,   350,
  416.    354,   355,   356,   359,   360,   361,   364,   365,   366,   369,
  417.    370,   373,   375,   379,   381,   383,   390,   395,   397,   405,
  418.    407,   409,   417,   434,   453,   455,   457,   461,   463,   465,
  419.    467,   469,   473,   475,   477,   481,   483,   490,   492,   494,
  420.    496,   498,   500,   502,   504,   506,   508,   510,   512,   514,
  421.    516,   518,   522,   527,   534,   539,   543,   547,   549,   551,
  422.    555,   558,   562,   569,   571,   574,   576,   585,   586,   594,
  423.    596,   598,   600,   606,   614,   623,   631,   641,   652,   663,
  424.    671,   673,   677,   683,   687,   694,   698,   699,   702,   703,
  425.    704,   705,   706,   707,   710,   714,   717,   723,   730,   734,
  426.    736,   738,   740,   742,   744,   746,   748,   750,   752,   754,
  427.    756,   758,   760,   762,   764,   766,   768,   770,   772,   774,
  428.    776,   778,   780,   782,   786,   792,   799,   801,   806,   808,
  429.    810,   812,   817,   822,   824,   826,   828,   830,   832,   836,
  430.    839,   847,   854,   859,   868,   872,   876,   880,   884,   890,
  431.    898,   906,   913,   916,   918,   924,   926,   933,   935,   940,
  432.    944,   999,  1004,  1008,  1016,  1023,  1029,  1034,  1035,  1038,
  433.   1040,  1042,  1044,  1053,  1058,  1065,  1070,  1078,  1080,  1082,
  434.   1087,  1094,  1101,  1108,  1110,  1117,  1124,  1126,  1135,  1144,
  435.   1145,  1148,  1149,  1152,  1153,  1156,  1173
  436. };
  437.  
  438. static const char * const yytname[] = {   "$","error","$illegal.","'='","':'",
  439. "'-'","'+'","'*'","'/'","EXPR_AND_AND","EXPR_OR_OR","EXPR_AND","EXPR_OR","EXPR_NOT",
  440. "EXPR_LT","EXPR_LE","EXPR_EQ","EXPR_NE","EXPR_GE","EXPR_GT","LEFTDIV","EMUL",
  441. "EDIV","ELEFTDIV","QUOTE","TRANSPOSE","PLUS_PLUS","MINUS_MINUS","POW","EPOW",
  442. "NUM","IMAG_NUM","NAME","SCREW","END","PLOT","TEXT","STYLE","FOR","WHILE","IF",
  443. "ELSEIF","ELSE","BREAK","CONTINUE","FUNC_RET","UNWIND","CLEANUP","GLOBAL","TEXT_ID",
  444. "LEXICAL_ERROR","FCN","SCREW_TWO","ELLIPSIS","ALL_VA_ARGS","END_OF_INPUT","USING",
  445. "TITLE","WITH","COLON","OPEN_BRACE","CLOSE_BRACE","CLEAR","';'","','","'\\n'",
  446. "UNARY","'['","'('","')'","']'","'.'","input","input1","parse_error","simple_list",
  447. "simple_list1","semi_comma","comma_semi","comma_nl_sep","semi_sep","opt_list",
  448. "list","list1","statement","plot_command","ranges","ranges1","plot_command1",
  449. "plot_command2","plot_options","using","using1","title","style","bogus_syntax",
  450. "ans_expression","global_decl","global_decl1","global_decl2","optcomma","command",
  451. "if_command","if_cmd_list","if_cmd_list1","elseif_clause","else_clause","optsep",
  452. "sep","screwed_again","expression","simple_expr","simple_expr1","colon_expr",
  453. "word_list_cmd","word_list","g_symtab","local_symtab","safe","are_we_screwed",
  454. "func_def","func_def1","return_list_x","return_list","return_list1","func_def2",
  455. "func_def3","fcn_end_or_eof","indirect_ref","indirect_ref1","@1","variable",
  456. "param_list","param_list1","identifier","arg_list","matrix","rows","rows1","matrix_row",
  457. "matrix_row1",""
  458. };
  459. #endif
  460.  
  461. static const short yyr1[] = {     0,
  462.     72,    72,    72,    72,    73,    73,    73,    73,    74,    74,
  463.     75,    75,    75,    75,    75,    76,    76,    76,    76,    76,
  464.     77,    77,    77,    78,    78,    78,    79,    79,    79,    80,
  465.     80,    81,    81,    82,    82,    82,    83,    83,    83,    84,
  466.     84,    84,    85,    85,    86,    86,    86,    87,    87,    87,
  467.     87,    87,    88,    88,    88,    89,    89,    90,    90,    90,
  468.     90,    90,    90,    90,    90,    90,    90,    90,    90,    90,
  469.     90,    90,    91,    91,    92,    92,    93,    94,    94,    94,
  470.     95,    96,    97,    98,    98,    99,    99,   100,   100,   101,
  471.    101,   101,   101,   101,   101,   101,   101,   101,   101,   102,
  472.    103,   103,   104,   104,   105,   106,   107,   107,   108,   108,
  473.    108,   108,   108,   108,   109,   110,   110,   110,   110,   111,
  474.    111,   111,   111,   111,   111,   111,   111,   111,   111,   111,
  475.    111,   111,   111,   111,   111,   111,   111,   111,   111,   111,
  476.    111,   111,   111,   111,   112,   112,   112,   112,   112,   112,
  477.    112,   112,   112,   112,   112,   112,   112,   112,   112,   113,
  478.    113,   114,   115,   115,   116,   117,   118,   119,   120,   120,
  479.    121,   121,   122,   123,   123,   123,   123,   124,   124,   124,
  480.    125,   126,   126,   127,   127,   128,   129,   130,   129,   131,
  481.    131,   131,   131,   132,   132,   132,   132,   133,   133,   133,
  482.    133,   134,   135,   135,   135,   135,   135,   135,   136,   137,
  483.    137,   138,   138,   139,   139,   140,   140
  484. };
  485.  
  486. static const short yyr2[] = {     0,
  487.      1,     1,     2,     1,     1,     1,     2,     2,     1,     1,
  488.      1,     1,     1,     2,     2,     1,     2,     2,     3,     3,
  489.      1,     2,     2,     1,     2,     2,     1,     1,     2,     1,
  490.      2,     0,     1,     1,     2,     2,     1,     3,     3,     1,
  491.      1,     2,     2,     3,     1,     2,     3,     5,     4,     4,
  492.      3,     2,     0,     1,     3,     1,     2,     1,     1,     1,
  493.      2,     2,     2,     2,     2,     2,     3,     3,     3,     3,
  494.      3,     3,     1,     2,     2,     3,     2,     2,     3,     5,
  495.      0,     1,     2,     1,     3,     1,     3,     0,     1,     1,
  496.      1,     1,     1,     7,     5,     7,     1,     1,     1,     3,
  497.      1,     2,     3,     2,     5,     3,     0,     1,     1,     1,
  498.      1,     2,     2,     2,     0,     3,     3,     6,     1,     1,
  499.      2,     2,     2,     2,     3,     3,     3,     3,     3,     3,
  500.      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
  501.      3,     3,     3,     3,     1,     1,     1,     3,     1,     1,
  502.      1,     2,     3,     1,     2,     2,     2,     2,     2,     3,
  503.      3,     2,     1,     2,     0,     0,     0,     0,     4,     4,
  504.      5,     4,     3,     2,     3,     2,     4,     2,     2,     3,
  505.      4,     4,     3,     1,     1,     1,     1,     0,     4,     1,
  506.      3,     4,     2,     2,     3,     2,     4,     2,     3,     2,
  507.      3,     1,     1,     1,     1,     3,     3,     3,     4,     1,
  508.      2,     1,     3,     1,     2,     1,     3
  509. };
  510.  
  511. static const short yydefact[] = {     0,
  512.     10,     0,     0,     0,     0,     0,   145,   146,   202,    53,
  513.    147,     0,     0,     0,    97,    98,    99,   107,     0,     9,
  514.    165,     2,    21,    24,     5,   115,     0,     1,     4,     0,
  515.     13,    11,    12,    16,    90,    41,    92,    40,    93,    82,
  516.    119,   120,   154,   149,    91,   190,   186,   150,   187,   151,
  517.    145,   115,   159,   150,   158,   157,   155,   156,     0,     0,
  518.     42,    53,    45,    43,    54,    56,     0,   187,   107,     0,
  519.    101,   107,   110,   109,   111,    32,   108,    83,    84,    86,
  520.    168,     0,   152,     0,     0,     8,     7,     3,    14,    15,
  521.     23,    22,    17,    25,    26,    18,     0,     0,     0,     0,
  522.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  523.      0,     0,     0,     0,     0,   123,   124,     0,     0,     0,
  524.    193,     0,   188,     0,   121,   122,   163,   162,     0,   117,
  525.      0,    52,     0,    44,    46,     0,     0,     0,     0,    57,
  526.     58,    73,    59,    60,     0,    32,   100,   107,   107,   104,
  527.    102,    32,     0,    33,    34,    37,   113,   112,   114,    89,
  528.      0,     0,     0,   153,   216,     0,   210,   212,   214,   148,
  529.     19,    20,   160,   128,   127,   129,   130,   141,   142,   143,
  530.    144,   135,   136,   137,   140,   138,   139,   133,   131,   132,
  531.    134,   125,   126,   161,   203,   205,   191,   204,     0,     0,
  532.    116,   164,   212,    51,     0,     0,    47,    55,    75,    77,
  533.     78,    61,    63,     0,    74,    62,    65,    64,    66,   107,
  534.      0,     0,    32,   103,   107,    30,    27,    28,    35,    36,
  535.     85,    87,   167,   167,   169,     0,   165,     0,   170,   167,
  536.    209,   211,     0,   215,     0,   192,   189,    49,    50,     0,
  537.     79,    67,    68,    76,    69,    70,    71,    72,    32,    95,
  538.    107,   106,    32,    38,    29,    39,    31,   165,   166,   179,
  539.      0,   174,   178,     0,     0,   176,   166,   213,     0,   217,
  540.    206,   208,   207,    48,     0,     0,    32,     0,     0,   173,
  541.    175,     0,     0,   180,   107,   118,    80,    96,   105,    94,
  542.      0,   172,   177,     0,    32,   181,   107,     0,   171,   200,
  543.      0,   194,   198,     0,    32,     0,   196,   195,   184,   185,
  544.    183,     0,   201,     0,   199,   182,   197,     0,     0,     0
  545. };
  546.  
  547. static const short yydefgoto[] = {   328,
  548.     28,    29,    30,    31,    32,    33,   229,   230,   153,   154,
  549.    155,   156,    35,    62,    63,    64,    65,   140,   141,   142,
  550.    143,   144,   285,    36,    37,    78,    79,   161,    38,    39,
  551.     70,    71,   150,   151,    76,    77,    84,    40,    41,    42,
  552.     43,    44,   128,    81,   290,   268,   163,    45,   235,   236,
  553.    237,   238,   239,   306,   321,    46,    47,   200,    48,   307,
  554.    308,    49,   199,    50,   166,   167,   168,   169
  555. };
  556.  
  557. static const short yypact[] = {   355,
  558. -32768,   627,   627,   627,    17,    17,    55,-32768,-32768,   233,
  559. -32768,    17,   655,   655,-32768,-32768,-32768,    36,    17,-32768,
  560. -32768,-32768,-32768,-32768,-32768,   -29,   655,-32768,-32768,    47,
  561.    -31,   446,   490,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  562.    735,-32768,    67,-32768,-32768,   -22,     8,   100,     4,-32768,
  563. -32768,   -29,    80,-32768,    80,    80,-32768,-32768,   655,   562,
  564. -32768,   655,    23,    58,-32768,    68,   133,-32768,    36,    53,
  565.     91,    36,-32768,-32768,-32768,   534,   109,    -9,-32768,   148,
  566. -32768,    83,-32768,   655,    88,-32768,-32768,-32768,   446,   490,
  567. -32768,-32768,-32768,-32768,-32768,-32768,   627,   627,   627,   627,
  568.    627,   627,   627,   627,   627,   627,   627,   627,   627,   627,
  569.    627,   627,   627,   627,   627,-32768,-32768,   627,   627,   627,
  570. -32768,   114,-32768,   655,-32768,-32768,-32768,   119,   655,-32768,
  571.     37,-32768,   102,    58,    23,   655,   655,   655,   132,-32768,
  572.     81,   578,    57,    86,   655,   534,-32768,    36,    36,-32768,
  573. -32768,   534,   123,-32768,   115,-32768,-32768,-32768,-32768,-32768,
  574.     17,   655,    -6,-32768,-32768,   105,   113,   134,   127,-32768,
  575. -32768,-32768,   812,   260,   260,    82,    82,   761,   761,   787,
  576.    787,   704,   704,   704,   704,   704,   704,    82,    82,    82,
  577.     82,    80,    80,   812,-32768,-32768,-32768,-32768,    -7,   143,
  578. -32768,-32768,-32768,-32768,   135,   612,-32768,-32768,-32768,-32768,
  579.    655,   137,   136,   655,-32768,   137,   141,   136,   141,    36,
  580.    165,   655,   534,-32768,    36,-32768,-32768,-32768,   402,   402,
  581. -32768,-32768,-32768,-32768,-32768,    21,-32768,     2,-32768,-32768,
  582. -32768,   655,   197,   655,   158,-32768,-32768,-32768,-32768,   144,
  583.    670,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   534,-32768,
  584.     36,-32768,   534,-32768,   109,-32768,   109,-32768,-32768,-32768,
  585.    138,-32768,-32768,   199,   -16,-32768,-32768,-32768,   655,-32768,
  586. -32768,-32768,-32768,-32768,   655,   170,   534,   173,   206,-32768,
  587. -32768,    17,   140,-32768,    84,-32768,-32768,-32768,-32768,-32768,
  588.     17,-32768,-32768,    12,   534,-32768,    36,     6,-32768,-32768,
  589.    142,-32768,-32768,     5,   534,    24,-32768,-32768,-32768,-32768,
  590. -32768,     5,-32768,   146,-32768,-32768,-32768,   213,   216,-32768
  591. };
  592.  
  593. static const short yypgoto[] = {-32768,
  594. -32768,   190,-32768,-32768,   191,   192,-32768,-32768,  -128,-32768,
  595. -32768,     3,-32768,-32768,   -53,   159,    92,-32768,  -123,-32768,
  596.   -133,  -126,-32768,-32768,-32768,-32768,    63,-32768,-32768,-32768,
  597. -32768,-32768,-32768,-32768,   -60,   -63,   177,    -8,   239,-32768,
  598. -32768,-32768,-32768,  -209,   -47,  -156,-32768,-32768,-32768,-32768,
  599. -32768,-32768,  -263,-32768,   -82,-32768,-32768,-32768,   215,-32768,
  600. -32768,    -5,-32768,-32768,-32768,-32768,  -125,-32768
  601. };
  602.  
  603.  
  604. #define    YYLAST        841
  605.  
  606.  
  607. static const short yytable[] = {    57,
  608.     58,    66,    34,   203,    69,    72,    68,   212,   146,   135,
  609.    219,   152,   310,    80,   213,     9,   217,   221,    85,   216,
  610.    218,   270,   -88,   224,   323,     9,   233,   274,   302,   125,
  611.    126,    23,    24,    82,    93,    96,   293,   309,   319,   127,
  612.     83,     2,     3,     9,   121,   122,    -6,     1,     9,     4,
  613.    130,   133,     9,    66,   160,     9,   245,    59,   289,   320,
  614.    234,   246,     5,     6,   311,   275,     7,     8,     9,   316,
  615.    120,   276,    11,   271,   317,   165,   324,   269,   123,   253,
  616.    312,   207,    60,   277,   257,   252,   147,   222,   223,   255,
  617.    272,   171,   172,   256,   262,   258,    20,   204,    73,    74,
  618.     75,    86,   124,    26,    27,   116,   117,   118,   119,   118,
  619.    119,    87,   137,   198,   139,   201,   278,   195,     2,     3,
  620.    165,   136,   205,   137,   138,   139,     4,    66,   209,   210,
  621.    286,   148,   149,   215,   288,   145,   220,   138,   139,     5,
  622.      6,   137,   138,     7,     8,     9,    73,    74,    75,    11,
  623.    162,   304,   164,   232,   202,    80,   170,   240,   299,   259,
  624.    206,   281,     2,     3,   263,   265,   267,   196,   211,   225,
  625.      4,   157,   158,   159,   241,   242,   314,   226,   227,   228,
  626.     26,    27,   197,     5,     6,   243,   322,     7,     8,     9,
  627.    244,   247,   138,    11,   139,   248,   137,   250,   260,   279,
  628.    287,   292,   251,   298,   284,   254,   300,   291,   301,   303,
  629.    318,   282,   329,   261,   327,   330,    54,    54,    54,    88,
  630.    134,    89,    90,   231,    26,    27,    67,   208,   129,   295,
  631.    273,   264,   266,   165,   305,   280,   283,     2,     3,   326,
  632.     53,    55,    56,     0,     0,     4,   315,     0,     0,     0,
  633.      0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
  634.      0,     0,     7,     8,     9,     0,   100,   101,    11,   294,
  635.    296,     0,     0,     0,     0,     0,   297,     0,     0,   112,
  636.    113,   114,   115,   116,   117,     0,   240,   118,   119,     0,
  637.      0,     0,    60,     0,    61,   240,     0,     0,   313,    26,
  638.     27,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  639.    325,    54,    54,    54,    54,    54,    54,    54,    54,    54,
  640.     54,    54,    54,    54,    54,    54,    54,    54,    54,    54,
  641.      0,     0,    54,    54,    54,   173,   174,   175,   176,   177,
  642.    178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
  643.    188,   189,   190,   191,     0,     1,   192,   193,   194,     2,
  644.      3,     0,     0,     0,     0,     0,     0,     4,     0,     0,
  645.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  646.      5,     6,     0,     0,     7,     8,     9,     0,     0,    10,
  647.     11,     0,    12,    13,    14,     0,     0,    15,    16,    17,
  648.     18,     0,    19,     0,    20,    21,     2,     3,     0,    22,
  649.      0,     0,     0,     0,     4,     0,     0,    23,    24,    25,
  650.      0,    26,    27,     0,     0,     0,     0,     5,     6,     0,
  651.      0,     7,     8,     9,     0,     0,    10,    11,     0,    12,
  652.     13,    14,     0,     0,    15,    16,    17,    18,     0,    19,
  653.      2,     3,    21,     0,     0,     0,     0,     0,     4,     0,
  654.      0,     0,     0,     0,    73,    74,    75,     0,    26,    27,
  655.      0,     5,     6,     0,     0,     7,     8,     9,     0,     0,
  656.     10,    11,     0,    12,    13,    14,     0,     0,    15,    16,
  657.     17,    18,     0,    19,     2,     3,    21,     0,     0,     0,
  658.      0,     0,     4,     0,     0,     0,     0,     0,    91,    92,
  659.      0,     0,    26,    27,     0,     5,     6,     0,     0,     7,
  660.      8,     9,     0,     0,    10,    11,     0,    12,    13,    14,
  661.      0,     0,    15,    16,    17,    18,     0,    19,     2,     3,
  662.     21,     0,     0,     0,     0,     0,     4,     0,     0,     0,
  663.      0,     0,    94,    95,     0,     0,    26,    27,     0,     5,
  664.      6,     0,     0,     7,     8,     9,     2,     3,    10,    11,
  665.      0,    12,    13,    14,     4,     0,    15,    16,    17,    18,
  666.      0,    19,     2,     3,    21,     0,     0,     5,     6,     0,
  667.      4,     7,     8,     9,     0,     0,     0,    11,     0,     0,
  668.     26,    27,     0,     5,     6,     0,     0,     7,     8,     9,
  669.      0,     0,     0,    11,     0,     0,     2,     3,     0,     0,
  670.    131,     0,   132,     0,     4,     0,     0,     0,    26,    27,
  671.      0,     2,     3,     0,     0,     0,   214,     5,     6,     4,
  672.      0,     7,     8,     9,    26,    27,     0,    11,     0,     0,
  673.      0,     0,     5,     6,     0,     0,    51,     8,     9,     2,
  674.      3,     0,    11,     0,     0,     0,     0,     4,     0,     0,
  675.      0,     0,   249,     0,   -81,   -81,     0,     0,    26,    27,
  676.      5,     6,   -81,     0,     7,     8,     9,     0,     0,     0,
  677.     11,     0,     0,    52,    27,   -81,   -81,     0,     0,   -81,
  678.    -81,   -81,     0,     0,     0,   -81,     0,    97,    98,    99,
  679.    100,   101,     0,     0,     0,     0,     0,     0,     0,     0,
  680.      0,    26,    27,   112,   113,   114,   115,   116,   117,     0,
  681.      0,   118,   119,     0,     0,     0,   -81,   -81,    97,    98,
  682.     99,   100,   101,   102,   103,   104,   105,     0,   106,   107,
  683.    108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
  684.      0,     0,   118,   119,    97,    98,    99,   100,   101,     0,
  685.      0,   104,   105,     0,   106,   107,   108,   109,   110,   111,
  686.    112,   113,   114,   115,   116,   117,     0,     0,   118,   119,
  687.     97,    98,    99,   100,   101,     0,     0,     0,     0,     0,
  688.    106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
  689.    116,   117,     0,     0,   118,   119,    98,    99,   100,   101,
  690.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  691.      0,   112,   113,   114,   115,   116,   117,     0,     0,   118,
  692.    119
  693. };
  694.  
  695. static const short yycheck[] = {     5,
  696.      6,    10,     0,   129,    13,    14,    12,   141,    69,    63,
  697.    144,    72,     1,    19,   141,    32,   143,   146,    27,   143,
  698.    144,     1,    32,   152,     1,    32,    33,   237,   292,    26,
  699.     27,    63,    64,    63,    32,    33,    53,   301,    34,    36,
  700.     70,     5,     6,    32,    67,    68,     0,     1,    32,    13,
  701.     59,    60,    32,    62,    64,    32,    64,     3,   268,    55,
  702.     67,    69,    26,    27,    53,    64,    30,    31,    32,    64,
  703.      4,    70,    36,    53,    69,    84,    53,   234,    71,   213,
  704.     69,   135,    60,   240,   218,   212,    34,   148,   149,   216,
  705.     70,    89,    90,   217,   223,   219,    50,    61,    63,    64,
  706.     65,    55,     3,    67,    68,    24,    25,    28,    29,    28,
  707.     29,    65,    56,   122,    58,   124,   242,     4,     5,     6,
  708.    129,    64,   131,    56,    57,    58,    13,   136,   137,   138,
  709.    259,    41,    42,   142,   263,     3,   145,    57,    58,    26,
  710.     27,    56,    57,    30,    31,    32,    63,    64,    65,    36,
  711.      3,    68,    70,   162,    36,   161,    69,   163,   287,   220,
  712.     59,     4,     5,     6,   225,   229,   230,    54,    37,    47,
  713.     13,    63,    64,    65,    70,    63,   305,    63,    64,    65,
  714.     67,    68,    69,    26,    27,    52,   315,    30,    31,    32,
  715.     64,    49,    57,    36,    58,    61,    56,   206,    34,     3,
  716.    261,     3,   211,    34,    61,   214,    34,    70,     3,    70,
  717.     69,    54,     0,   222,    69,     0,     2,     3,     4,    30,
  718.     62,    31,    31,   161,    67,    68,    12,   136,    52,   277,
  719.    236,   229,   230,   242,   295,   244,   245,     5,     6,   322,
  720.      2,     3,     4,    -1,    -1,    13,   307,    -1,    -1,    -1,
  721.     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    26,    27,
  722.     -1,    -1,    30,    31,    32,    -1,     7,     8,    36,   275,
  723.    279,    -1,    -1,    -1,    -1,    -1,   285,    -1,    -1,    20,
  724.     21,    22,    23,    24,    25,    -1,   292,    28,    29,    -1,
  725.     -1,    -1,    60,    -1,    62,   301,    -1,    -1,   304,    67,
  726.     68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
  727.    316,    97,    98,    99,   100,   101,   102,   103,   104,   105,
  728.    106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
  729.     -1,    -1,   118,   119,   120,    97,    98,    99,   100,   101,
  730.    102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
  731.    112,   113,   114,   115,    -1,     1,   118,   119,   120,     5,
  732.      6,    -1,    -1,    -1,    -1,    -1,    -1,    13,    -1,    -1,
  733.     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
  734.     26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    35,
  735.     36,    -1,    38,    39,    40,    -1,    -1,    43,    44,    45,
  736.     46,    -1,    48,    -1,    50,    51,     5,     6,    -1,    55,
  737.     -1,    -1,    -1,    -1,    13,    -1,    -1,    63,    64,    65,
  738.     -1,    67,    68,    -1,    -1,    -1,    -1,    26,    27,    -1,
  739.     -1,    30,    31,    32,    -1,    -1,    35,    36,    -1,    38,
  740.     39,    40,    -1,    -1,    43,    44,    45,    46,    -1,    48,
  741.      5,     6,    51,    -1,    -1,    -1,    -1,    -1,    13,    -1,
  742.     -1,    -1,    -1,    -1,    63,    64,    65,    -1,    67,    68,
  743.     -1,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
  744.     35,    36,    -1,    38,    39,    40,    -1,    -1,    43,    44,
  745.     45,    46,    -1,    48,     5,     6,    51,    -1,    -1,    -1,
  746.     -1,    -1,    13,    -1,    -1,    -1,    -1,    -1,    63,    64,
  747.     -1,    -1,    67,    68,    -1,    26,    27,    -1,    -1,    30,
  748.     31,    32,    -1,    -1,    35,    36,    -1,    38,    39,    40,
  749.     -1,    -1,    43,    44,    45,    46,    -1,    48,     5,     6,
  750.     51,    -1,    -1,    -1,    -1,    -1,    13,    -1,    -1,    -1,
  751.     -1,    -1,    63,    64,    -1,    -1,    67,    68,    -1,    26,
  752.     27,    -1,    -1,    30,    31,    32,     5,     6,    35,    36,
  753.     -1,    38,    39,    40,    13,    -1,    43,    44,    45,    46,
  754.     -1,    48,     5,     6,    51,    -1,    -1,    26,    27,    -1,
  755.     13,    30,    31,    32,    -1,    -1,    -1,    36,    -1,    -1,
  756.     67,    68,    -1,    26,    27,    -1,    -1,    30,    31,    32,
  757.     -1,    -1,    -1,    36,    -1,    -1,     5,     6,    -1,    -1,
  758.     59,    -1,    61,    -1,    13,    -1,    -1,    -1,    67,    68,
  759.     -1,     5,     6,    -1,    -1,    -1,    59,    26,    27,    13,
  760.     -1,    30,    31,    32,    67,    68,    -1,    36,    -1,    -1,
  761.     -1,    -1,    26,    27,    -1,    -1,    30,    31,    32,     5,
  762.      6,    -1,    36,    -1,    -1,    -1,    -1,    13,    -1,    -1,
  763.     -1,    -1,    61,    -1,     5,     6,    -1,    -1,    67,    68,
  764.     26,    27,    13,    -1,    30,    31,    32,    -1,    -1,    -1,
  765.     36,    -1,    -1,    67,    68,    26,    27,    -1,    -1,    30,
  766.     31,    32,    -1,    -1,    -1,    36,    -1,     4,     5,     6,
  767.      7,     8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
  768.     -1,    67,    68,    20,    21,    22,    23,    24,    25,    -1,
  769.     -1,    28,    29,    -1,    -1,    -1,    67,    68,     4,     5,
  770.      6,     7,     8,     9,    10,    11,    12,    -1,    14,    15,
  771.     16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
  772.     -1,    -1,    28,    29,     4,     5,     6,     7,     8,    -1,
  773.     -1,    11,    12,    -1,    14,    15,    16,    17,    18,    19,
  774.     20,    21,    22,    23,    24,    25,    -1,    -1,    28,    29,
  775.      4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,    -1,
  776.     14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
  777.     24,    25,    -1,    -1,    28,    29,     5,     6,     7,     8,
  778.     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
  779.     -1,    20,    21,    22,    23,    24,    25,    -1,    -1,    28,
  780.     29
  781. };
  782. /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  783. #line 3 "/usr/local/gnu/lib/bison.simple"
  784.  
  785. /* Skeleton output parser for bison,
  786.    Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
  787.  
  788.    This program is free software; you can redistribute it and/or modify
  789.    it under the terms of the GNU General Public License as published by
  790.    the Free Software Foundation; either version 1, or (at your option)
  791.    any later version.
  792.  
  793.    This program is distributed in the hope that it will be useful,
  794.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  795.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  796.    GNU General Public License for more details.
  797.  
  798.    You should have received a copy of the GNU General Public License
  799.    along with this program; if not, write to the Free Software
  800.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  801.  
  802.  
  803. #ifndef alloca
  804. #ifdef __GNUC__
  805. #define alloca __builtin_alloca
  806. #else /* not GNU C.  */
  807. #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
  808. #include <alloca.h>
  809. #else /* not sparc */
  810. #if defined (MSDOS) && !defined (__TURBOC__)
  811. #include <malloc.h>
  812. #else /* not MSDOS, or __TURBOC__ */
  813. #if defined(_AIX)
  814. #include <malloc.h>
  815.  #pragma alloca
  816. #else /* not MSDOS, __TURBOC__, or _AIX */
  817. #ifdef __hpux
  818. #ifdef __cplusplus
  819. extern "C" {
  820. void *alloca (unsigned int);
  821. };
  822. #else /* not __cplusplus */
  823. void *alloca ();
  824. #endif /* not __cplusplus */
  825. #endif /* __hpux */
  826. #endif /* not _AIX */
  827. #endif /* not MSDOS, or __TURBOC__ */
  828. #endif /* not sparc.  */
  829. #endif /* not GNU C.  */
  830. #endif /* alloca not defined.  */
  831.  
  832. /* This is the parser code that is written into each bison parser
  833.   when the %semantic_parser declaration is not specified in the grammar.
  834.   It was written by Richard Stallman by simplifying the hairy parser
  835.   used when %semantic_parser is specified.  */
  836.  
  837. /* Note: there must be only one dollar sign in this file.
  838.    It is replaced by the list of actions, each action
  839.    as one case of the switch.  */
  840.  
  841. #define yyerrok        (yyerrstatus = 0)
  842. #define yyclearin    (yychar = YYEMPTY)
  843. #define YYEMPTY        -2
  844. #define YYEOF        0
  845. #define YYACCEPT    return(0)
  846. #define YYABORT     return(1)
  847. #define YYERROR        goto yyerrlab1
  848. /* Like YYERROR except do call yyerror.
  849.    This remains here temporarily to ease the
  850.    transition to the new meaning of YYERROR, for GCC.
  851.    Once GCC version 2 has supplanted version 1, this can go.  */
  852. #define YYFAIL        goto yyerrlab
  853. #define YYRECOVERING()  (!!yyerrstatus)
  854. #define YYBACKUP(token, value) \
  855. do                                \
  856.   if (yychar == YYEMPTY && yylen == 1)                \
  857.     { yychar = (token), yylval = (value);            \
  858.       yychar1 = YYTRANSLATE (yychar);                \
  859.       YYPOPSTACK;                        \
  860.       goto yybackup;                        \
  861.     }                                \
  862.   else                                \
  863.     { yyerror ("syntax error: cannot back up"); YYERROR; }    \
  864. while (0)
  865.  
  866. #define YYTERROR    1
  867. #define YYERRCODE    256
  868.  
  869. #ifndef YYPURE
  870. #define YYLEX        yylex()
  871. #endif
  872.  
  873. #ifdef YYPURE
  874. #ifdef YYLSP_NEEDED
  875. #define YYLEX        yylex(&yylval, &yylloc)
  876. #else
  877. #define YYLEX        yylex(&yylval)
  878. #endif
  879. #endif
  880.  
  881. /* If nonreentrant, generate the variables here */
  882.  
  883. #ifndef YYPURE
  884.  
  885. int    yychar;            /*  the lookahead symbol        */
  886. YYSTYPE    yylval;            /*  the semantic value of the        */
  887.                 /*  lookahead symbol            */
  888.  
  889. #ifdef YYLSP_NEEDED
  890. YYLTYPE yylloc;            /*  location data for the lookahead    */
  891.                 /*  symbol                */
  892. #endif
  893.  
  894. int yynerrs;            /*  number of parse errors so far       */
  895. #endif  /* not YYPURE */
  896.  
  897. #if YYDEBUG != 0
  898. int yydebug;            /*  nonzero means print parse trace    */
  899. /* Since this is uninitialized, it does not stop multiple parsers
  900.    from coexisting.  */
  901. #endif
  902.  
  903. /*  YYINITDEPTH indicates the initial size of the parser's stacks    */
  904.  
  905. #ifndef    YYINITDEPTH
  906. #define YYINITDEPTH 200
  907. #endif
  908.  
  909. /*  YYMAXDEPTH is the maximum size the stacks can grow to
  910.     (effective only if the built-in stack extension method is used).  */
  911.  
  912. #if YYMAXDEPTH == 0
  913. #undef YYMAXDEPTH
  914. #endif
  915.  
  916. #ifndef YYMAXDEPTH
  917. #define YYMAXDEPTH 10000
  918. #endif
  919.  
  920. /* Prevent warning if -Wstrict-prototypes.  */
  921. #ifdef __GNUC__
  922. int yyparse (void);
  923. #endif
  924.  
  925. #if __GNUC__ > 1        /* GNU C and GNU C++ define this.  */
  926. #define __yy_bcopy(FROM,TO,COUNT)    __builtin_memcpy(TO,FROM,COUNT)
  927. #else                /* not GNU C or C++ */
  928. #ifndef __cplusplus
  929.  
  930. /* This is the most reliable way to avoid incompatibilities
  931.    in available built-in functions on various systems.  */
  932. static void
  933. __yy_bcopy (from, to, count)
  934.      char *from;
  935.      char *to;
  936.      int count;
  937. {
  938.   register char *f = from;
  939.   register char *t = to;
  940.   register int i = count;
  941.  
  942.   while (i-- > 0)
  943.     *t++ = *f++;
  944. }
  945.  
  946. #else /* __cplusplus */
  947.  
  948. /* This is the most reliable way to avoid incompatibilities
  949.    in available built-in functions on various systems.  */
  950. static void
  951. __yy_bcopy (char *from, char *to, int count)
  952. {
  953.   register char *f = from;
  954.   register char *t = to;
  955.   register int i = count;
  956.  
  957.   while (i-- > 0)
  958.     *t++ = *f++;
  959. }
  960.  
  961. #endif
  962. #endif
  963.  
  964. #line 184 "/usr/local/gnu/lib/bison.simple"
  965. int
  966. yyparse()
  967. {
  968.   register int yystate;
  969.   register int yyn;
  970.   register short *yyssp;
  971.   register YYSTYPE *yyvsp;
  972.   int yyerrstatus;    /*  number of tokens to shift before error messages enabled */
  973.   int yychar1 = 0;        /*  lookahead token as an internal (translated) token number */
  974.  
  975.   short    yyssa[YYINITDEPTH];    /*  the state stack            */
  976.   YYSTYPE yyvsa[YYINITDEPTH];    /*  the semantic value stack        */
  977.  
  978.   short *yyss = yyssa;        /*  refer to the stacks thru separate pointers */
  979.   YYSTYPE *yyvs = yyvsa;    /*  to allow yyoverflow to reallocate them elsewhere */
  980.  
  981. #ifdef YYLSP_NEEDED
  982.   YYLTYPE yylsa[YYINITDEPTH];    /*  the location stack            */
  983.   YYLTYPE *yyls = yylsa;
  984.   YYLTYPE *yylsp;
  985.  
  986. #define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
  987. #else
  988. #define YYPOPSTACK   (yyvsp--, yyssp--)
  989. #endif
  990.  
  991.   int yystacksize = YYINITDEPTH;
  992.  
  993. #ifdef YYPURE
  994.   int yychar;
  995.   YYSTYPE yylval;
  996.   int yynerrs;
  997. #ifdef YYLSP_NEEDED
  998.   YYLTYPE yylloc;
  999. #endif
  1000. #endif
  1001.  
  1002.   YYSTYPE yyval;        /*  the variable used to return        */
  1003.                 /*  semantic values from the action    */
  1004.                 /*  routines                */
  1005.  
  1006.   int yylen;
  1007.  
  1008. #if YYDEBUG != 0
  1009.   if (yydebug)
  1010.     fprintf(stderr, "Starting parse\n");
  1011. #endif
  1012.  
  1013.   yystate = 0;
  1014.   yyerrstatus = 0;
  1015.   yynerrs = 0;
  1016.   yychar = YYEMPTY;        /* Cause a token to be read.  */
  1017.  
  1018.   /* Initialize stack pointers.
  1019.      Waste one element of value and location stack
  1020.      so that they stay on the same level as the state stack.
  1021.      The wasted elements are never initialized.  */
  1022.  
  1023.   yyssp = yyss - 1;
  1024.   yyvsp = yyvs;
  1025. #ifdef YYLSP_NEEDED
  1026.   yylsp = yyls;
  1027. #endif
  1028.  
  1029. /* Push a new state, which is found in  yystate  .  */
  1030. /* In all cases, when you get here, the value and location stacks
  1031.    have just been pushed. so pushing a state here evens the stacks.  */
  1032. yynewstate:
  1033.  
  1034.   *++yyssp = yystate;
  1035.  
  1036.   if (yyssp >= yyss + yystacksize - 1)
  1037.     {
  1038.       /* Give user a chance to reallocate the stack */
  1039.       /* Use copies of these so that the &'s don't force the real ones into memory. */
  1040.       YYSTYPE *yyvs1 = yyvs;
  1041.       short *yyss1 = yyss;
  1042. #ifdef YYLSP_NEEDED
  1043.       YYLTYPE *yyls1 = yyls;
  1044. #endif
  1045.  
  1046.       /* Get the current used size of the three stacks, in elements.  */
  1047.       int size = yyssp - yyss + 1;
  1048.  
  1049. #ifdef yyoverflow
  1050.       /* Each stack pointer address is followed by the size of
  1051.      the data in use in that stack, in bytes.  */
  1052. #ifdef YYLSP_NEEDED
  1053.       /* This used to be a conditional around just the two extra args,
  1054.      but that might be undefined if yyoverflow is a macro.  */
  1055.       yyoverflow("parser stack overflow",
  1056.          &yyss1, size * sizeof (*yyssp),
  1057.          &yyvs1, size * sizeof (*yyvsp),
  1058.          &yyls1, size * sizeof (*yylsp),
  1059.          &yystacksize);
  1060. #else
  1061.       yyoverflow("parser stack overflow",
  1062.          &yyss1, size * sizeof (*yyssp),
  1063.          &yyvs1, size * sizeof (*yyvsp),
  1064.          &yystacksize);
  1065. #endif
  1066.  
  1067.       yyss = yyss1; yyvs = yyvs1;
  1068. #ifdef YYLSP_NEEDED
  1069.       yyls = yyls1;
  1070. #endif
  1071. #else /* no yyoverflow */
  1072.       /* Extend the stack our own way.  */
  1073.       if (yystacksize >= YYMAXDEPTH)
  1074.     {
  1075.       yyerror("parser stack overflow");
  1076.       return 2;
  1077.     }
  1078.       yystacksize *= 2;
  1079.       if (yystacksize > YYMAXDEPTH)
  1080.     yystacksize = YYMAXDEPTH;
  1081.       yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
  1082.       __yy_bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
  1083.       yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
  1084.       __yy_bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
  1085. #ifdef YYLSP_NEEDED
  1086.       yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
  1087.       __yy_bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
  1088. #endif
  1089. #endif /* no yyoverflow */
  1090.  
  1091.       yyssp = yyss + size - 1;
  1092.       yyvsp = yyvs + size - 1;
  1093. #ifdef YYLSP_NEEDED
  1094.       yylsp = yyls + size - 1;
  1095. #endif
  1096.  
  1097. #if YYDEBUG != 0
  1098.       if (yydebug)
  1099.     fprintf(stderr, "Stack size increased to %d\n", yystacksize);
  1100. #endif
  1101.  
  1102.       if (yyssp >= yyss + yystacksize - 1)
  1103.     YYABORT;
  1104.     }
  1105.  
  1106. #if YYDEBUG != 0
  1107.   if (yydebug)
  1108.     fprintf(stderr, "Entering state %d\n", yystate);
  1109. #endif
  1110.  
  1111.   goto yybackup;
  1112.  yybackup:
  1113.  
  1114. /* Do appropriate processing given the current state.  */
  1115. /* Read a lookahead token if we need one and don't already have one.  */
  1116. /* yyresume: */
  1117.  
  1118.   /* First try to decide what to do without reference to lookahead token.  */
  1119.  
  1120.   yyn = yypact[yystate];
  1121.   if (yyn == YYFLAG)
  1122.     goto yydefault;
  1123.  
  1124.   /* Not known => get a lookahead token if don't already have one.  */
  1125.  
  1126.   /* yychar is either YYEMPTY or YYEOF
  1127.      or a valid token in external form.  */
  1128.  
  1129.   if (yychar == YYEMPTY)
  1130.     {
  1131. #if YYDEBUG != 0
  1132.       if (yydebug)
  1133.     fprintf(stderr, "Reading a token: ");
  1134. #endif
  1135.       yychar = YYLEX;
  1136.     }
  1137.  
  1138.   /* Convert token to internal form (in yychar1) for indexing tables with */
  1139.  
  1140.   if (yychar <= 0)        /* This means end of input. */
  1141.     {
  1142.       yychar1 = 0;
  1143.       yychar = YYEOF;        /* Don't call YYLEX any more */
  1144.  
  1145. #if YYDEBUG != 0
  1146.       if (yydebug)
  1147.     fprintf(stderr, "Now at end of input.\n");
  1148. #endif
  1149.     }
  1150.   else
  1151.     {
  1152.       yychar1 = YYTRANSLATE(yychar);
  1153.  
  1154. #if YYDEBUG != 0
  1155.       if (yydebug)
  1156.     {
  1157.       fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
  1158.       /* Give the individual parser a way to print the precise meaning
  1159.          of a token, for further debugging info.  */
  1160. #ifdef YYPRINT
  1161.       YYPRINT (stderr, yychar, yylval);
  1162. #endif
  1163.       fprintf (stderr, ")\n");
  1164.     }
  1165. #endif
  1166.     }
  1167.  
  1168.   yyn += yychar1;
  1169.   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
  1170.     goto yydefault;
  1171.  
  1172.   yyn = yytable[yyn];
  1173.  
  1174.   /* yyn is what to do for this token type in this state.
  1175.      Negative => reduce, -yyn is rule number.
  1176.      Positive => shift, yyn is new state.
  1177.        New state is final state => don't bother to shift,
  1178.        just return success.
  1179.      0, or most negative number => error.  */
  1180.  
  1181.   if (yyn < 0)
  1182.     {
  1183.       if (yyn == YYFLAG)
  1184.     goto yyerrlab;
  1185.       yyn = -yyn;
  1186.       goto yyreduce;
  1187.     }
  1188.   else if (yyn == 0)
  1189.     goto yyerrlab;
  1190.  
  1191.   if (yyn == YYFINAL)
  1192.     YYACCEPT;
  1193.  
  1194.   /* Shift the lookahead token.  */
  1195.  
  1196. #if YYDEBUG != 0
  1197.   if (yydebug)
  1198.     fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
  1199. #endif
  1200.  
  1201.   /* Discard the token being shifted unless it is eof.  */
  1202.   if (yychar != YYEOF)
  1203.     yychar = YYEMPTY;
  1204.  
  1205.   *++yyvsp = yylval;
  1206. #ifdef YYLSP_NEEDED
  1207.   *++yylsp = yylloc;
  1208. #endif
  1209.  
  1210.   /* count tokens shifted since error; after three, turn off error status.  */
  1211.   if (yyerrstatus) yyerrstatus--;
  1212.  
  1213.   yystate = yyn;
  1214.   goto yynewstate;
  1215.  
  1216. /* Do the default action for the current state.  */
  1217. yydefault:
  1218.  
  1219.   yyn = yydefact[yystate];
  1220.   if (yyn == 0)
  1221.     goto yyerrlab;
  1222.  
  1223. /* Do a reduction.  yyn is the number of a rule to reduce with.  */
  1224. yyreduce:
  1225.   yylen = yyr2[yyn];
  1226.   if (yylen > 0)
  1227.     yyval = yyvsp[1-yylen]; /* implement default value of the action */
  1228.  
  1229. #if YYDEBUG != 0
  1230.   if (yydebug)
  1231.     {
  1232.       int i;
  1233.  
  1234.       fprintf (stderr, "Reducing via rule %d (line %d), ",
  1235.            yyn, yyrline[yyn]);
  1236.  
  1237.       /* Print the symbols being reduced, and their result.  */
  1238.       for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
  1239.     fprintf (stderr, "%s ", yytname[yyrhs[i]]);
  1240.       fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
  1241.     }
  1242. #endif
  1243.  
  1244.  
  1245.   switch (yyn) {
  1246.  
  1247. case 1:
  1248. #line 291 "parse.y"
  1249. {
  1250.             global_command = yyvsp[0].tree_statement_list_type;
  1251.             promptflag = 1;
  1252.             YYACCEPT;
  1253.           ;
  1254.     break;}
  1255. case 2:
  1256. #line 297 "parse.y"
  1257. {
  1258.             global_command = 0;
  1259.             promptflag = 1;
  1260.             YYABORT;
  1261.           ;
  1262.     break;}
  1263. case 3:
  1264. #line 303 "parse.y"
  1265. { ABORT_PARSE; ;
  1266.     break;}
  1267. case 4:
  1268. #line 305 "parse.y"
  1269. { ABORT_PARSE; ;
  1270.     break;}
  1271. case 5:
  1272. #line 309 "parse.y"
  1273. { yyval.tree_statement_list_type = 0; ;
  1274.     break;}
  1275. case 6:
  1276. #line 311 "parse.y"
  1277. { yyval.tree_statement_list_type = yyvsp[0].tree_statement_list_type; ;
  1278.     break;}
  1279. case 7:
  1280. #line 313 "parse.y"
  1281. { yyval.tree_statement_list_type = yyvsp[-1].tree_statement_list_type; ;
  1282.     break;}
  1283. case 8:
  1284. #line 315 "parse.y"
  1285. { yyval.tree_statement_list_type = yyvsp[-1].tree_statement_list_type; ;
  1286.     break;}
  1287. case 9:
  1288. #line 319 "parse.y"
  1289. { yyerror ("parse error"); ;
  1290.     break;}
  1291. case 11:
  1292. #line 324 "parse.y"
  1293. { yyval.tree_statement_list_type = 0; ;
  1294.     break;}
  1295. case 12:
  1296. #line 326 "parse.y"
  1297. { yyval.tree_statement_list_type = 0; ;
  1298.     break;}
  1299. case 13:
  1300. #line 328 "parse.y"
  1301. { yyval.tree_statement_list_type = yyvsp[0].tree_statement_list_type; ;
  1302.     break;}
  1303. case 14:
  1304. #line 330 "parse.y"
  1305. {
  1306.             tree_statement *tmp = yyvsp[-1].tree_statement_list_type->rear ();
  1307.             tmp->set_print_flag (0);
  1308.           ;
  1309.     break;}
  1310. case 15:
  1311. #line 335 "parse.y"
  1312. { yyval.tree_statement_list_type = yyvsp[-1].tree_statement_list_type; ;
  1313.     break;}
  1314. case 16:
  1315. #line 339 "parse.y"
  1316. { yyval.tree_statement_list_type = new tree_statement_list (yyvsp[0].tree_statement_type); ;
  1317.     break;}
  1318. case 17:
  1319. #line 341 "parse.y"
  1320. { yyval.tree_statement_list_type = new tree_statement_list (yyvsp[0].tree_statement_type); ;
  1321.     break;}
  1322. case 18:
  1323. #line 343 "parse.y"
  1324. { yyval.tree_statement_list_type = new tree_statement_list (yyvsp[0].tree_statement_type); ;
  1325.     break;}
  1326. case 19:
  1327. #line 345 "parse.y"
  1328. {
  1329.             tree_statement *tmp = yyvsp[-2].tree_statement_list_type->rear ();
  1330.             tmp->set_print_flag (0);
  1331.             yyvsp[-2].tree_statement_list_type->append (yyvsp[0].tree_statement_type);
  1332.           ;
  1333.     break;}
  1334. case 20:
  1335. #line 351 "parse.y"
  1336. { yyvsp[-2].tree_statement_list_type->append (yyvsp[0].tree_statement_type); ;
  1337.     break;}
  1338. case 32:
  1339. #line 374 "parse.y"
  1340. { yyval.tree_statement_list_type = new tree_statement_list (); ;
  1341.     break;}
  1342. case 33:
  1343. #line 376 "parse.y"
  1344. { yyval.tree_statement_list_type = yyvsp[0].tree_statement_list_type; ;
  1345.     break;}
  1346. case 34:
  1347. #line 380 "parse.y"
  1348. { yyval.tree_statement_list_type = yyvsp[0].tree_statement_list_type; ;
  1349.     break;}
  1350. case 35:
  1351. #line 382 "parse.y"
  1352. { yyval.tree_statement_list_type = yyvsp[-1].tree_statement_list_type; ;
  1353.     break;}
  1354. case 36:
  1355. #line 384 "parse.y"
  1356. {
  1357.             tree_statement *tmp = yyvsp[-1].tree_statement_list_type->rear ();
  1358.             tmp->set_print_flag (0);
  1359.           ;
  1360.     break;}
  1361. case 37:
  1362. #line 391 "parse.y"
  1363. {
  1364.             beginning_of_function = 0;
  1365.             yyval.tree_statement_list_type = new tree_statement_list (yyvsp[0].tree_statement_type);
  1366.           ;
  1367.     break;}
  1368. case 38:
  1369. #line 396 "parse.y"
  1370. { yyvsp[-2].tree_statement_list_type->append (yyvsp[0].tree_statement_type); ;
  1371.     break;}
  1372. case 39:
  1373. #line 398 "parse.y"
  1374. {
  1375.             tree_statement *tmp = yyvsp[-2].tree_statement_list_type->rear ();
  1376.             tmp->set_print_flag (0);
  1377.             yyvsp[-2].tree_statement_list_type->append (yyvsp[0].tree_statement_type);
  1378.           ;
  1379.     break;}
  1380. case 40:
  1381. #line 406 "parse.y"
  1382. { yyval.tree_statement_type = new tree_statement (yyvsp[0].tree_command_type); ;
  1383.     break;}
  1384. case 41:
  1385. #line 408 "parse.y"
  1386. { yyval.tree_statement_type = new tree_statement (yyvsp[0].tree_expression_type); ;
  1387.     break;}
  1388. case 42:
  1389. #line 410 "parse.y"
  1390. {
  1391.             symbol_record *sr = lookup_by_name ("clearplot", 0);
  1392.             tree_identifier *id = new tree_identifier (sr);
  1393.             yyval.tree_statement_type = new tree_statement (id);
  1394.           ;
  1395.     break;}
  1396. case 43:
  1397. #line 418 "parse.y"
  1398. {
  1399.             if (! yyvsp[0].subplot_list_type && yyvsp[-1].tok_val->pttype () != token::replot)
  1400.               {
  1401.             yyerror ("must have something to plot");
  1402.             ABORT_PARSE;
  1403.               }
  1404.             else
  1405.               {
  1406.             yyval.tree_plot_command_type = new tree_plot_command (yyvsp[0].subplot_list_type, yyvsp[-1].tok_val->pttype ());
  1407.             plotting = 0;
  1408.             past_plot_range = 0;
  1409.             in_plot_range = 0;
  1410.             in_plot_using = 0;
  1411.             in_plot_style = 0;
  1412.               }
  1413.           ;
  1414.     break;}
  1415. case 44:
  1416. #line 435 "parse.y"
  1417. {
  1418.             if (yyvsp[-2].tok_val->pttype () == token::replot)
  1419.               {
  1420.             yyerror ("cannot specify new ranges with replot");
  1421.             ABORT_PARSE;
  1422.               }
  1423.             else
  1424.               {
  1425.             yyval.tree_plot_command_type = new tree_plot_command (yyvsp[0].subplot_list_type, yyvsp[-1].plot_limits_type, yyvsp[-2].tok_val->pttype ());
  1426.             plotting = 0;
  1427.             past_plot_range = 0;
  1428.             in_plot_range = 0;
  1429.             in_plot_using = 0;
  1430.             in_plot_style = 0;
  1431.               }
  1432.           ;
  1433.     break;}
  1434. case 45:
  1435. #line 454 "parse.y"
  1436. { yyval.plot_limits_type = new plot_limits (yyvsp[0].plot_range_type); ;
  1437.     break;}
  1438. case 46:
  1439. #line 456 "parse.y"
  1440. { yyval.plot_limits_type = new plot_limits (yyvsp[-1].plot_range_type, yyvsp[0].plot_range_type); ;
  1441.     break;}
  1442. case 47:
  1443. #line 458 "parse.y"
  1444. { yyval.plot_limits_type = new plot_limits (yyvsp[-2].plot_range_type, yyvsp[-1].plot_range_type, yyvsp[0].plot_range_type); ;
  1445.     break;}
  1446. case 48:
  1447. #line 462 "parse.y"
  1448. { yyval.plot_range_type = new plot_range (yyvsp[-3].tree_expression_type, yyvsp[-1].tree_expression_type); ;
  1449.     break;}
  1450. case 49:
  1451. #line 464 "parse.y"
  1452. { yyval.plot_range_type = new plot_range (0, yyvsp[-1].tree_expression_type); ;
  1453.     break;}
  1454. case 50:
  1455. #line 466 "parse.y"
  1456. { yyval.plot_range_type = new plot_range (yyvsp[-2].tree_expression_type, 0); ;
  1457.     break;}
  1458. case 51:
  1459. #line 468 "parse.y"
  1460. { yyval.plot_range_type = new plot_range (); ;
  1461.     break;}
  1462. case 52:
  1463. #line 470 "parse.y"
  1464. { yyval.plot_range_type = new plot_range (); ;
  1465.     break;}
  1466. case 53:
  1467. #line 474 "parse.y"
  1468. { yyval.subplot_list_type = 0; ;
  1469.     break;}
  1470. case 54:
  1471. #line 476 "parse.y"
  1472. { yyval.subplot_list_type = new subplot_list (yyvsp[0].subplot_type); ;
  1473.     break;}
  1474. case 55:
  1475. #line 478 "parse.y"
  1476. { yyvsp[-2].subplot_list_type->append (yyvsp[0].subplot_type); ;
  1477.     break;}
  1478. case 56:
  1479. #line 482 "parse.y"
  1480. { yyval.subplot_type = new subplot (yyvsp[0].tree_expression_type); ;
  1481.     break;}
  1482. case 57:
  1483. #line 484 "parse.y"
  1484. {
  1485.             yyvsp[0].subplot_type->set_data (yyvsp[-1].tree_expression_type);
  1486.             yyval.subplot_type = yyvsp[0].subplot_type;
  1487.           ;
  1488.     break;}
  1489. case 58:
  1490. #line 491 "parse.y"
  1491. { yyval.subplot_type = new subplot (yyvsp[0].subplot_using_type, 0, 0); ;
  1492.     break;}
  1493. case 59:
  1494. #line 493 "parse.y"
  1495. { yyval.subplot_type = new subplot (0, yyvsp[0].tree_expression_type, 0); ;
  1496.     break;}
  1497. case 60:
  1498. #line 495 "parse.y"
  1499. { yyval.subplot_type = new subplot (0, 0, yyvsp[0].subplot_style_type); ;
  1500.     break;}
  1501. case 61:
  1502. #line 497 "parse.y"
  1503. { yyval.subplot_type = new subplot (yyvsp[-1].subplot_using_type, yyvsp[0].tree_expression_type, 0); ;
  1504.     break;}
  1505. case 62:
  1506. #line 499 "parse.y"
  1507. { yyval.subplot_type = new subplot (yyvsp[0].subplot_using_type, yyvsp[-1].tree_expression_type, 0); ;
  1508.     break;}
  1509. case 63:
  1510. #line 501 "parse.y"
  1511. { yyval.subplot_type = new subplot (yyvsp[-1].subplot_using_type, 0, yyvsp[0].subplot_style_type); ;
  1512.     break;}
  1513. case 64:
  1514. #line 503 "parse.y"
  1515. { yyval.subplot_type = new subplot (yyvsp[0].subplot_using_type, 0, yyvsp[-1].subplot_style_type); ;
  1516.     break;}
  1517. case 65:
  1518. #line 505 "parse.y"
  1519. { yyval.subplot_type = new subplot (0, yyvsp[-1].tree_expression_type, yyvsp[0].subplot_style_type); ;
  1520.     break;}
  1521. case 66:
  1522. #line 507 "parse.y"
  1523. { yyval.subplot_type = new subplot (0, yyvsp[0].tree_expression_type, yyvsp[-1].subplot_style_type); ;
  1524.     break;}
  1525. case 67:
  1526. #line 509 "parse.y"
  1527. { yyval.subplot_type = new subplot (yyvsp[-2].subplot_using_type, yyvsp[-1].tree_expression_type, yyvsp[0].subplot_style_type); ;
  1528.     break;}
  1529. case 68:
  1530. #line 511 "parse.y"
  1531. { yyval.subplot_type = new subplot (yyvsp[-2].subplot_using_type, yyvsp[0].tree_expression_type, yyvsp[-1].subplot_style_type); ;
  1532.     break;}
  1533. case 69:
  1534. #line 513 "parse.y"
  1535. { yyval.subplot_type = new subplot (yyvsp[-1].subplot_using_type, yyvsp[-2].tree_expression_type, yyvsp[0].subplot_style_type); ;
  1536.     break;}
  1537. case 70:
  1538. #line 515 "parse.y"
  1539. { yyval.subplot_type = new subplot (yyvsp[0].subplot_using_type, yyvsp[-2].tree_expression_type, yyvsp[-1].subplot_style_type); ;
  1540.     break;}
  1541. case 71:
  1542. #line 517 "parse.y"
  1543. { yyval.subplot_type = new subplot (yyvsp[-1].subplot_using_type, yyvsp[0].tree_expression_type, yyvsp[-2].subplot_style_type); ;
  1544.     break;}
  1545. case 72:
  1546. #line 519 "parse.y"
  1547. { yyval.subplot_type = new subplot (yyvsp[0].subplot_using_type, yyvsp[-1].tree_expression_type, yyvsp[-2].subplot_style_type); ;
  1548.     break;}
  1549. case 73:
  1550. #line 523 "parse.y"
  1551. {
  1552.             in_plot_using = 0;
  1553.             yyval.subplot_using_type = yyvsp[0].subplot_using_type;
  1554.           ;
  1555.     break;}
  1556. case 74:
  1557. #line 528 "parse.y"
  1558. {
  1559.             in_plot_using = 0;
  1560.             yyval.subplot_using_type = yyvsp[-1].subplot_using_type->set_format (yyvsp[0].tree_expression_type);
  1561.           ;
  1562.     break;}
  1563. case 75:
  1564. #line 535 "parse.y"
  1565. {
  1566.             subplot_using *tmp = new subplot_using ();
  1567.             yyval.subplot_using_type = tmp->add_qualifier (yyvsp[0].tree_expression_type);
  1568.           ;
  1569.     break;}
  1570. case 76:
  1571. #line 540 "parse.y"
  1572. { yyval.subplot_using_type = yyvsp[-2].subplot_using_type->add_qualifier (yyvsp[0].tree_expression_type); ;
  1573.     break;}
  1574. case 77:
  1575. #line 544 "parse.y"
  1576. { yyval.tree_expression_type = yyvsp[0].tree_expression_type; ;
  1577.     break;}
  1578. case 78:
  1579. #line 548 "parse.y"
  1580. { yyval.subplot_style_type = new subplot_style (yyvsp[0].tok_val->string ()); ;
  1581.     break;}
  1582. case 79:
  1583. #line 550 "parse.y"
  1584. { yyval.subplot_style_type = new subplot_style (yyvsp[-1].tok_val->string (), yyvsp[0].tree_expression_type); ;
  1585.     break;}
  1586. case 80:
  1587. #line 552 "parse.y"
  1588. { yyval.subplot_style_type = new subplot_style (yyvsp[-3].tok_val->string (), yyvsp[-2].tree_expression_type, yyvsp[0].tree_expression_type); ;
  1589.     break;}
  1590. case 82:
  1591. #line 559 "parse.y"
  1592. { yyval.tree_expression_type = maybe_convert_to_ans_assign (yyvsp[0].tree_expression_type); ;
  1593.     break;}
  1594. case 83:
  1595. #line 563 "parse.y"
  1596. {
  1597.             yyval.tree_global_command_type = new tree_global_command (yyvsp[0].tree_global_init_list_type, yyvsp[-1].tok_val->line (),
  1598.                           yyvsp[-1].tok_val->column ());
  1599.           ;
  1600.     break;}
  1601. case 84:
  1602. #line 570 "parse.y"
  1603. { yyval.tree_global_init_list_type = new tree_global_init_list (yyvsp[0].tree_global_type); ;
  1604.     break;}
  1605. case 85:
  1606. #line 572 "parse.y"
  1607. { yyvsp[-2].tree_global_init_list_type->append (yyvsp[0].tree_global_type); ;
  1608.     break;}
  1609. case 86:
  1610. #line 575 "parse.y"
  1611. { yyval.tree_global_type = new tree_global (yyvsp[0].tree_identifier_type); ;
  1612.     break;}
  1613. case 87:
  1614. #line 577 "parse.y"
  1615. {
  1616.             tree_simple_assignment_expression *tmp_ass;
  1617.             tmp_ass = new tree_simple_assignment_expression
  1618.               (yyvsp[-2].tree_identifier_type, yyvsp[0].tree_expression_type, 0, 0, yyvsp[-1].tok_val->line (), yyvsp[-1].tok_val->column ());
  1619.             yyval.tree_global_type = new tree_global (tmp_ass);
  1620.           ;
  1621.     break;}
  1622. case 89:
  1623. #line 587 "parse.y"
  1624. {
  1625.             if (user_pref.warn_comma_in_global_decl)
  1626.               warning ("comma in global declaration not\
  1627.  interpreted as a command separator");
  1628.           ;
  1629.     break;}
  1630. case 90:
  1631. #line 595 "parse.y"
  1632. { yyval.tree_command_type = yyvsp[0].tree_plot_command_type; ;
  1633.     break;}
  1634. case 91:
  1635. #line 597 "parse.y"
  1636. { yyval.tree_command_type = yyvsp[0].tree_command_type; ;
  1637.     break;}
  1638. case 92:
  1639. #line 599 "parse.y"
  1640. { yyval.tree_command_type = yyvsp[0].tree_global_command_type; ;
  1641.     break;}
  1642. case 93:
  1643. #line 601 "parse.y"
  1644. {
  1645.             iffing--;
  1646.             yyval.tree_command_type = yyvsp[0].tree_if_command_type;
  1647.           ;
  1648.     break;}
  1649. case 94:
  1650. #line 607 "parse.y"
  1651. {
  1652.             if (check_end (yyvsp[0].tok_val, token::unwind_protect_end))
  1653.               ABORT_PARSE;
  1654.  
  1655.             yyval.tree_command_type = new tree_unwind_protect_command (yyvsp[-4].tree_statement_list_type, yyvsp[-1].tree_statement_list_type, yyvsp[-6].tok_val->line (),
  1656.                               yyvsp[-6].tok_val->column ());
  1657.           ;
  1658.     break;}
  1659. case 95:
  1660. #line 615 "parse.y"
  1661. {
  1662.             maybe_warn_assign_as_truth_value (yyvsp[-3].tree_expression_type);
  1663.             if (check_end (yyvsp[0].tok_val, token::while_end))
  1664.               ABORT_PARSE;
  1665.             looping--;
  1666.             yyval.tree_command_type = new tree_while_command (yyvsp[-3].tree_expression_type, yyvsp[-1].tree_statement_list_type, yyvsp[-4].tok_val->line (),
  1667.                          yyvsp[-4].tok_val->column ());
  1668.           ;
  1669.     break;}
  1670. case 96:
  1671. #line 624 "parse.y"
  1672. {
  1673.             if (check_end (yyvsp[0].tok_val, token::for_end))
  1674.               ABORT_PARSE;
  1675.             looping--;
  1676.             yyval.tree_command_type = new tree_for_command (yyvsp[-5].tree_index_expression_type, yyvsp[-3].tree_expression_type, yyvsp[-1].tree_statement_list_type,
  1677.                            yyvsp[-6].tok_val->line (), yyvsp[-6].tok_val->column ());
  1678.           ;
  1679.     break;}
  1680. case 97:
  1681. #line 632 "parse.y"
  1682. {
  1683.             if (! (looping || defining_func))
  1684.               {
  1685.             yyerror ("break: only meaningful within a loop\
  1686.  or function body");
  1687.             ABORT_PARSE;
  1688.               }
  1689.             yyval.tree_command_type = new tree_break_command (yyvsp[0].tok_val->line (), yyvsp[0].tok_val->column ());
  1690.           ;
  1691.     break;}
  1692. case 98:
  1693. #line 642 "parse.y"
  1694. {
  1695.             if (! looping)
  1696.               {
  1697.             yyerror ("continue: only meaningful within a\
  1698.  `for' or `while' loop");
  1699.             ABORT_PARSE;
  1700.               }
  1701.             yyval.tree_command_type = new tree_continue_command (yyvsp[0].tok_val->line (),
  1702.                             yyvsp[0].tok_val->column ());
  1703.           ;
  1704.     break;}
  1705. case 99:
  1706. #line 653 "parse.y"
  1707. {
  1708.             if (! defining_func)
  1709.               {
  1710.             yyerror ("return: only meaningful within a function");
  1711.             ABORT_PARSE;
  1712.               }
  1713.             yyval.tree_command_type = new tree_return_command (yyvsp[0].tok_val->line (), yyvsp[0].tok_val->column ());
  1714.           ;
  1715.     break;}
  1716. case 100:
  1717. #line 664 "parse.y"
  1718. {
  1719.             if (check_end (yyvsp[0].tok_val, token::if_end))
  1720.               ABORT_PARSE;
  1721.             yyval.tree_if_command_type = new tree_if_command (yyvsp[-1].tree_if_command_list_type, yyvsp[-2].tok_val->line (), yyvsp[-2].tok_val->column ());
  1722.           ;
  1723.     break;}
  1724. case 101:
  1725. #line 672 "parse.y"
  1726. { yyval.tree_if_command_list_type = yyvsp[0].tree_if_command_list_type ;
  1727.     break;}
  1728. case 102:
  1729. #line 674 "parse.y"
  1730. { yyvsp[-1].tree_if_command_list_type->append (yyvsp[0].tree_if_clause_type); ;
  1731.     break;}
  1732. case 103:
  1733. #line 678 "parse.y"
  1734. {
  1735.             maybe_warn_assign_as_truth_value (yyvsp[-2].tree_expression_type);
  1736.             tree_if_clause *t = new tree_if_clause (yyvsp[-2].tree_expression_type, yyvsp[0].tree_statement_list_type);
  1737.             yyval.tree_if_command_list_type = new tree_if_command_list (t);
  1738.           ;
  1739.     break;}
  1740. case 104:
  1741. #line 684 "parse.y"
  1742. { yyvsp[-1].tree_if_command_list_type->append (yyvsp[0].tree_if_clause_type); ;
  1743.     break;}
  1744. case 105:
  1745. #line 688 "parse.y"
  1746. {
  1747.             maybe_warn_assign_as_truth_value (yyvsp[-2].tree_expression_type);
  1748.             yyval.tree_if_clause_type = new tree_if_clause (yyvsp[-2].tree_expression_type, yyvsp[0].tree_statement_list_type);
  1749.           ;
  1750.     break;}
  1751. case 106:
  1752. #line 695 "parse.y"
  1753. { yyval.tree_if_clause_type = new tree_if_clause (yyvsp[0].tree_statement_list_type); ;
  1754.     break;}
  1755. case 115:
  1756. #line 711 "parse.y"
  1757. { maybe_screwed_again++; ;
  1758.     break;}
  1759. case 116:
  1760. #line 715 "parse.y"
  1761. { yyval.tree_expression_type = new tree_simple_assignment_expression
  1762.               (yyvsp[-2].tree_index_expression_type, yyvsp[0].tree_expression_type, 0, 0, yyvsp[-1].tok_val->line (), yyvsp[-1].tok_val->column ()); ;
  1763.     break;}
  1764. case 117:
  1765. #line 718 "parse.y"
  1766. {
  1767.             yyerror ("invalid assignment to a number");
  1768.             yyval.tree_expression_type = 0;
  1769.             ABORT_PARSE;
  1770.           ;
  1771.     break;}
  1772. case 118:
  1773. #line 724 "parse.y"
  1774. {
  1775.             yyval.tree_expression_type = make_multi_val_ret (yyvsp[0].tree_expression_type, yyvsp[-1].tok_val->line (), yyvsp[-1].tok_val->column ());
  1776.  
  1777.             if (! yyval.tree_expression_type)
  1778.               ABORT_PARSE;
  1779.           ;
  1780.     break;}
  1781. case 119:
  1782. #line 731 "parse.y"
  1783. { yyval.tree_expression_type = yyvsp[0].tree_expression_type; ;
  1784.     break;}
  1785. case 120:
  1786. #line 735 "parse.y"
  1787. { yyval.tree_expression_type = yyvsp[0].tree_expression_type; ;
  1788.     break;}
  1789. case 121:
  1790. #line 737 "parse.y"
  1791. { yyval.tree_expression_type = make_postfix_op (PLUS_PLUS, yyvsp[-1].tree_identifier_type, yyvsp[0].tok_val); ;
  1792.     break;}
  1793. case 122:
  1794. #line 739 "parse.y"
  1795. { yyval.tree_expression_type = make_postfix_op (MINUS_MINUS, yyvsp[-1].tree_identifier_type, yyvsp[0].tok_val); ;
  1796.     break;}
  1797. case 123:
  1798. #line 741 "parse.y"
  1799. { yyval.tree_expression_type = make_unary_op (QUOTE, yyvsp[-1].tree_expression_type, yyvsp[0].tok_val); ;
  1800.     break;}
  1801. case 124:
  1802. #line 743 "parse.y"
  1803. { yyval.tree_expression_type = make_unary_op (TRANSPOSE, yyvsp[-1].tree_expression_type, yyvsp[0].tok_val); ;
  1804.     break;}
  1805. case 125:
  1806. #line 745 "parse.y"
  1807. { yyval.tree_expression_type = make_binary_op (POW, yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1808.     break;}
  1809. case 126:
  1810. #line 747 "parse.y"
  1811. { yyval.tree_expression_type = make_binary_op (EPOW, yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1812.     break;}
  1813. case 127:
  1814. #line 749 "parse.y"
  1815. { yyval.tree_expression_type = make_binary_op ('+', yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1816.     break;}
  1817. case 128:
  1818. #line 751 "parse.y"
  1819. { yyval.tree_expression_type = make_binary_op ('-', yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1820.     break;}
  1821. case 129:
  1822. #line 753 "parse.y"
  1823. { yyval.tree_expression_type = make_binary_op ('*', yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1824.     break;}
  1825. case 130:
  1826. #line 755 "parse.y"
  1827. { yyval.tree_expression_type = make_binary_op ('/', yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1828.     break;}
  1829. case 131:
  1830. #line 757 "parse.y"
  1831. { yyval.tree_expression_type = make_binary_op (EMUL, yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1832.     break;}
  1833. case 132:
  1834. #line 759 "parse.y"
  1835. { yyval.tree_expression_type = make_binary_op (EDIV, yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1836.     break;}
  1837. case 133:
  1838. #line 761 "parse.y"
  1839. { yyval.tree_expression_type = make_binary_op (LEFTDIV, yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1840.     break;}
  1841. case 134:
  1842. #line 763 "parse.y"
  1843. { yyval.tree_expression_type = make_binary_op (ELEFTDIV, yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1844.     break;}
  1845. case 135:
  1846. #line 765 "parse.y"
  1847. { yyval.tree_expression_type = make_binary_op (EXPR_LT, yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1848.     break;}
  1849. case 136:
  1850. #line 767 "parse.y"
  1851. { yyval.tree_expression_type = make_binary_op (EXPR_LE, yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1852.     break;}
  1853. case 137:
  1854. #line 769 "parse.y"
  1855. { yyval.tree_expression_type = make_binary_op (EXPR_EQ, yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1856.     break;}
  1857. case 138:
  1858. #line 771 "parse.y"
  1859. { yyval.tree_expression_type = make_binary_op (EXPR_GE, yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1860.     break;}
  1861. case 139:
  1862. #line 773 "parse.y"
  1863. { yyval.tree_expression_type = make_binary_op (EXPR_GT, yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1864.     break;}
  1865. case 140:
  1866. #line 775 "parse.y"
  1867. { yyval.tree_expression_type = make_binary_op (EXPR_NE, yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1868.     break;}
  1869. case 141:
  1870. #line 777 "parse.y"
  1871. { yyval.tree_expression_type = make_binary_op (EXPR_AND_AND, yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1872.     break;}
  1873. case 142:
  1874. #line 779 "parse.y"
  1875. { yyval.tree_expression_type = make_binary_op (EXPR_OR_OR, yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1876.     break;}
  1877. case 143:
  1878. #line 781 "parse.y"
  1879. { yyval.tree_expression_type = make_binary_op (EXPR_AND, yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1880.     break;}
  1881. case 144:
  1882. #line 783 "parse.y"
  1883. { yyval.tree_expression_type = make_binary_op (EXPR_OR, yyvsp[-2].tree_expression_type, yyvsp[-1].tok_val, yyvsp[0].tree_expression_type); ;
  1884.     break;}
  1885. case 145:
  1886. #line 787 "parse.y"
  1887. {
  1888.             tree_constant *tmp = new tree_constant (yyvsp[0].tok_val->number ());
  1889.             tmp->stash_original_text (yyvsp[0].tok_val->text_rep ());
  1890.             yyval.tree_expression_type = tmp;
  1891.           ;
  1892.     break;}
  1893. case 146:
  1894. #line 793 "parse.y"
  1895. {
  1896.             Complex c (0.0, yyvsp[0].tok_val->number ());
  1897.             tree_constant *tmp = new tree_constant (c);
  1898.             tmp->stash_original_text (yyvsp[0].tok_val->text_rep ());
  1899.             yyval.tree_expression_type = tmp;
  1900.           ;
  1901.     break;}
  1902. case 147:
  1903. #line 800 "parse.y"
  1904. { yyval.tree_expression_type = new tree_constant (yyvsp[0].tok_val->string ()); ;
  1905.     break;}
  1906. case 148:
  1907. #line 802 "parse.y"
  1908. {
  1909.             yyvsp[-1].tree_expression_type->in_parens++;
  1910.             yyval.tree_expression_type = yyvsp[-1].tree_expression_type;
  1911.           ;
  1912.     break;}
  1913. case 149:
  1914. #line 807 "parse.y"
  1915. { yyval.tree_expression_type = yyvsp[0].tree_index_expression_type; ;
  1916.     break;}
  1917. case 150:
  1918. #line 809 "parse.y"
  1919. { yyval.tree_expression_type = yyvsp[0].tree_index_expression_type; ;
  1920.     break;}
  1921. case 151:
  1922. #line 811 "parse.y"
  1923. { yyval.tree_expression_type = yyvsp[0].tree_matrix_type; ;
  1924.     break;}
  1925. case 152:
  1926. #line 813 "parse.y"
  1927. {
  1928.             mlnm.pop ();
  1929.             yyval.tree_expression_type = new tree_constant (Matrix ());
  1930.           ;
  1931.     break;}
  1932. case 153:
  1933. #line 818 "parse.y"
  1934. {
  1935.             mlnm.pop ();
  1936.             yyval.tree_expression_type = new tree_constant (Matrix ());
  1937.           ;
  1938.     break;}
  1939. case 154:
  1940. #line 823 "parse.y"
  1941. { yyval.tree_expression_type = yyvsp[0].tree_colon_expression_type; ;
  1942.     break;}
  1943. case 155:
  1944. #line 825 "parse.y"
  1945. { yyval.tree_expression_type = make_prefix_op (PLUS_PLUS, yyvsp[0].tree_identifier_type, yyvsp[-1].tok_val); ;
  1946.     break;}
  1947. case 156:
  1948. #line 827 "parse.y"
  1949. { yyval.tree_expression_type = make_prefix_op (MINUS_MINUS, yyvsp[0].tree_identifier_type, yyvsp[-1].tok_val); ;
  1950.     break;}
  1951. case 157:
  1952. #line 829 "parse.y"
  1953. { yyval.tree_expression_type = make_unary_op (EXPR_NOT, yyvsp[0].tree_expression_type, yyvsp[-1].tok_val); ;
  1954.     break;}
  1955. case 158:
  1956. #line 831 "parse.y"
  1957. { yyval.tree_expression_type = yyvsp[0].tree_expression_type; ;
  1958.     break;}
  1959. case 159:
  1960. #line 833 "parse.y"
  1961. { yyval.tree_expression_type = make_unary_op ('-', yyvsp[0].tree_expression_type, yyvsp[-1].tok_val); ;
  1962.     break;}
  1963. case 160:
  1964. #line 837 "parse.y"
  1965. { yyval.tree_colon_expression_type = new tree_colon_expression
  1966.               (yyvsp[-2].tree_expression_type, yyvsp[0].tree_expression_type, yyvsp[-1].tok_val->line (), yyvsp[-1].tok_val->column ()); ;
  1967.     break;}
  1968. case 161:
  1969. #line 840 "parse.y"
  1970. {
  1971.             yyval.tree_colon_expression_type = yyvsp[-2].tree_colon_expression_type->chain (yyvsp[0].tree_expression_type);
  1972.             if (! yyval.tree_colon_expression_type)
  1973.               ABORT_PARSE;
  1974.           ;
  1975.     break;}
  1976. case 162:
  1977. #line 848 "parse.y"
  1978. {
  1979.             yyval.tree_index_expression_type = new tree_index_expression
  1980.                (yyvsp[-1].tree_identifier_type, yyvsp[0].tree_argument_list_type, yyvsp[-1].tree_identifier_type->line (), yyvsp[-1].tree_identifier_type->column ());
  1981.           ;
  1982.     break;}
  1983. case 163:
  1984. #line 855 "parse.y"
  1985. {
  1986.             tree_constant *tmp = new tree_constant (yyvsp[0].tok_val->string ());
  1987.             yyval.tree_argument_list_type = new tree_argument_list (tmp);
  1988.           ;
  1989.     break;}
  1990. case 164:
  1991. #line 860 "parse.y"
  1992. {
  1993.             tree_constant *tmp = new tree_constant (yyvsp[0].tok_val->string ());
  1994.             yyvsp[-1].tree_argument_list_type->append (tmp);
  1995.           ;
  1996.     break;}
  1997. case 165:
  1998. #line 869 "parse.y"
  1999. { curr_sym_tab = global_sym_tab; ;
  2000.     break;}
  2001. case 166:
  2002. #line 873 "parse.y"
  2003. { curr_sym_tab = tmp_local_sym_tab; ;
  2004.     break;}
  2005. case 167:
  2006. #line 877 "parse.y"
  2007. { maybe_screwed = 0; ;
  2008.     break;}
  2009. case 168:
  2010. #line 881 "parse.y"
  2011. { maybe_screwed = 1; ;
  2012.     break;}
  2013. case 169:
  2014. #line 885 "parse.y"
  2015. {
  2016.             curr_sym_tab = top_level_sym_tab;
  2017.             defining_func = 0;
  2018.             yyval.tree_command_type = 0;
  2019.           ;
  2020.     break;}
  2021. case 170:
  2022. #line 891 "parse.y"
  2023. {
  2024.             curr_sym_tab = top_level_sym_tab;
  2025.             defining_func = 0;
  2026.             yyval.tree_command_type = 0;
  2027.           ;
  2028.     break;}
  2029. case 171:
  2030. #line 899 "parse.y"
  2031. {
  2032.             tree_identifier *tmp = new tree_identifier
  2033.               (yyvsp[-4].tok_val->sym_rec (), yyvsp[-4].tok_val->line (), yyvsp[-4].tok_val->column ());
  2034.             tree_parameter_list *tpl = new tree_parameter_list (tmp);
  2035.             tpl->mark_as_formal_parameters ();
  2036.             yyval.tree_function_type = yyvsp[0].tree_function_type->define_ret_list (tpl);
  2037.           ;
  2038.     break;}
  2039. case 172:
  2040. #line 907 "parse.y"
  2041. {
  2042.             yyvsp[-3].tree_parameter_list_type->mark_as_formal_parameters ();
  2043.             yyval.tree_function_type = yyvsp[0].tree_function_type->define_ret_list (yyvsp[-3].tree_parameter_list_type);
  2044.           ;
  2045.     break;}
  2046. case 174:
  2047. #line 917 "parse.y"
  2048. { yyval.tree_parameter_list_type = new tree_parameter_list (); ;
  2049.     break;}
  2050. case 175:
  2051. #line 919 "parse.y"
  2052. {
  2053.             tree_parameter_list *tmp = new tree_parameter_list ();
  2054.             tmp->mark_varargs_only ();
  2055.             yyval.tree_parameter_list_type = tmp;
  2056.           ;
  2057.     break;}
  2058. case 176:
  2059. #line 925 "parse.y"
  2060. { yyval.tree_parameter_list_type = yyvsp[-1].tree_parameter_list_type; ;
  2061.     break;}
  2062. case 177:
  2063. #line 927 "parse.y"
  2064. {
  2065.             yyvsp[-3].tree_parameter_list_type->mark_varargs ();
  2066.             yyval.tree_parameter_list_type = yyvsp[-3].tree_parameter_list_type;
  2067.           ;
  2068.     break;}
  2069. case 178:
  2070. #line 934 "parse.y"
  2071. { yyval.tree_parameter_list_type = new tree_parameter_list (yyvsp[0].tree_identifier_type); ;
  2072.     break;}
  2073. case 179:
  2074. #line 936 "parse.y"
  2075. {
  2076.             yyerror ("invalid function return list");
  2077.             ABORT_PARSE;
  2078.           ;
  2079.     break;}
  2080. case 180:
  2081. #line 941 "parse.y"
  2082. { yyvsp[-2].tree_parameter_list_type->append (yyvsp[0].tree_identifier_type); ;
  2083.     break;}
  2084. case 181:
  2085. #line 945 "parse.y"
  2086. {
  2087.             char *id_name = yyvsp[-3].tree_identifier_type->name ();
  2088. //            if (is_text_function_name (id_name))
  2089. //              {
  2090. //            yyerror ("invalid use of reserved word %s", id_name);
  2091. //            ABORT_PARSE;
  2092. //              }
  2093.  
  2094. // If input is coming from a file, issue a warning if the name of the
  2095. // file does not match the name of the function stated in the file.
  2096. // Matlab doesn't provide a diagnostic (it ignores the stated name).
  2097.  
  2098.             yyvsp[0].tree_function_type->stash_function_name (id_name);
  2099.  
  2100.             if (reading_fcn_file)
  2101.               {
  2102.             if (strcmp (curr_fcn_file_name, id_name) != 0)
  2103.               {
  2104.                 if (user_pref.warn_function_name_clash)
  2105.                   warning ("function name `%s' does not agree\
  2106.  with function file name `%s.m'", id_name, curr_fcn_file_name);
  2107.  
  2108.                 global_sym_tab->rename (id_name,
  2109.                             curr_fcn_file_name);
  2110.  
  2111.                 if (error_state)
  2112.                   ABORT_PARSE;
  2113.  
  2114.                 id_name = yyvsp[-3].tree_identifier_type->name ();
  2115.               }
  2116.  
  2117.             yyvsp[0].tree_function_type->stash_function_name (id_name);
  2118.             yyvsp[0].tree_function_type->stash_fcn_file_name ();
  2119.             yyvsp[0].tree_function_type->stash_fcn_file_time (time (0));
  2120.             yyvsp[0].tree_function_type->mark_as_system_fcn_file ();
  2121.               }
  2122.             else if (! (input_from_tmp_history_file
  2123.                 || input_from_startup_file)
  2124.                  && reading_script_file
  2125.                  && strcmp (curr_fcn_file_name, id_name) == 0)
  2126.               {
  2127.             warning ("function `%s' defined within\
  2128.  script file `%s.m'", id_name, curr_fcn_file_name);
  2129.               }
  2130.  
  2131.             top_level_sym_tab->clear (id_name);
  2132.  
  2133.             yyvsp[-3].tree_identifier_type->define (yyvsp[0].tree_function_type);
  2134.             yyvsp[-3].tree_identifier_type->document (help_buf);
  2135.  
  2136.             yyval.tree_function_type = yyvsp[0].tree_function_type;
  2137.           ;
  2138.     break;}
  2139. case 182:
  2140. #line 1000 "parse.y"
  2141. {
  2142.             tree_function *fcn = new tree_function (yyvsp[-1].tree_statement_list_type, curr_sym_tab);
  2143.             yyval.tree_function_type = fcn->define_param_list (yyvsp[-3].tree_parameter_list_type);
  2144.           ;
  2145.     break;}
  2146. case 183:
  2147. #line 1005 "parse.y"
  2148. { yyval.tree_function_type = new tree_function (yyvsp[-1].tree_statement_list_type, curr_sym_tab); ;
  2149.     break;}
  2150. case 184:
  2151. #line 1009 "parse.y"
  2152. {
  2153.             if (check_end (yyvsp[0].tok_val, token::function_end))
  2154.             ABORT_PARSE;
  2155.  
  2156.             if (reading_fcn_file)
  2157.               check_for_garbage_after_fcn_def ();
  2158.           ;
  2159.     break;}
  2160. case 185:
  2161. #line 1017 "parse.y"
  2162. {
  2163.             if (! (reading_fcn_file || reading_script_file))
  2164.               YYABORT;
  2165.           ;
  2166.     break;}
  2167. case 186:
  2168. #line 1024 "parse.y"
  2169. {
  2170.             looking_at_indirect_ref = 0;
  2171.             yyval.tree_indirect_ref_type = yyvsp[0].tree_indirect_ref_type;
  2172.           ;
  2173.     break;}
  2174. case 187:
  2175. #line 1030 "parse.y"
  2176. {
  2177.             yyval.tree_indirect_ref_type = new tree_indirect_ref (yyvsp[0].tree_identifier_type, yyvsp[0].tree_identifier_type->line (),
  2178.                         yyvsp[0].tree_identifier_type->column ());
  2179.           ;
  2180.     break;}
  2181. case 188:
  2182. #line 1034 "parse.y"
  2183. { looking_at_indirect_ref = 1; ;
  2184.     break;}
  2185. case 189:
  2186. #line 1035 "parse.y"
  2187. { yyval.tree_indirect_ref_type = yyvsp[-3].tree_indirect_ref_type->chain (yyvsp[0].tok_val->string ()); ;
  2188.     break;}
  2189. case 190:
  2190. #line 1039 "parse.y"
  2191. { yyval.tree_index_expression_type = make_index_expression (yyvsp[0].tree_indirect_ref_type, 0); ;
  2192.     break;}
  2193. case 191:
  2194. #line 1041 "parse.y"
  2195. { yyval.tree_index_expression_type = make_index_expression (yyvsp[-2].tree_indirect_ref_type, 0); ;
  2196.     break;}
  2197. case 192:
  2198. #line 1043 "parse.y"
  2199. { yyval.tree_index_expression_type = make_index_expression (yyvsp[-3].tree_indirect_ref_type, yyvsp[-1].tree_argument_list_type); ;
  2200.     break;}
  2201. case 193:
  2202. #line 1045 "parse.y"
  2203. {
  2204.             yyerror ("use `(\' and `)\' as index operators, not\
  2205.  `[\' and `]\'"); 
  2206.             yyval.tree_index_expression_type = 0;
  2207.             ABORT_PARSE;
  2208.           ;
  2209.     break;}
  2210. case 194:
  2211. #line 1054 "parse.y"
  2212. {
  2213.             quote_is_transpose = 0;
  2214.             yyval.tree_parameter_list_type = 0;
  2215.           ;
  2216.     break;}
  2217. case 195:
  2218. #line 1059 "parse.y"
  2219. {
  2220.             quote_is_transpose = 0;
  2221.             tree_parameter_list *tmp = new tree_parameter_list ();
  2222.             tmp->mark_varargs_only ();
  2223.             yyval.tree_parameter_list_type = tmp;
  2224.           ;
  2225.     break;}
  2226. case 196:
  2227. #line 1066 "parse.y"
  2228. {
  2229.             quote_is_transpose = 0;
  2230.             yyvsp[-1].tree_parameter_list_type->mark_as_formal_parameters ();
  2231.           ;
  2232.     break;}
  2233. case 197:
  2234. #line 1071 "parse.y"
  2235. {
  2236.             quote_is_transpose = 0;
  2237.             yyvsp[-3].tree_parameter_list_type->mark_as_formal_parameters ();
  2238.             yyvsp[-3].tree_parameter_list_type->mark_varargs ();
  2239.           ;
  2240.     break;}
  2241. case 198:
  2242. #line 1079 "parse.y"
  2243. { yyval.tree_parameter_list_type = new tree_parameter_list (yyvsp[0].tree_identifier_type); ;
  2244.     break;}
  2245. case 199:
  2246. #line 1081 "parse.y"
  2247. { yyvsp[-2].tree_parameter_list_type->append (yyvsp[0].tree_identifier_type); ;
  2248.     break;}
  2249. case 200:
  2250. #line 1083 "parse.y"
  2251. {
  2252.             yyerror ("invalid parameter list");
  2253.             ABORT_PARSE;
  2254.           ;
  2255.     break;}
  2256. case 201:
  2257. #line 1088 "parse.y"
  2258. {
  2259.             yyerror ("invalid parameter list");
  2260.             ABORT_PARSE;
  2261.           ;
  2262.     break;}
  2263. case 202:
  2264. #line 1095 "parse.y"
  2265. {
  2266.             yyval.tree_identifier_type = new tree_identifier
  2267.               (yyvsp[0].tok_val->sym_rec (), yyvsp[0].tok_val->line (), yyvsp[0].tok_val->column ());
  2268.           ;
  2269.     break;}
  2270. case 203:
  2271. #line 1102 "parse.y"
  2272. {
  2273.             tree_constant *colon;
  2274.             tree_constant::magic_colon t;
  2275.             colon = new tree_constant (t);
  2276.             yyval.tree_argument_list_type = new tree_argument_list (colon);
  2277.           ;
  2278.     break;}
  2279. case 204:
  2280. #line 1109 "parse.y"
  2281. { yyval.tree_argument_list_type = new tree_argument_list (yyvsp[0].tree_expression_type); ;
  2282.     break;}
  2283. case 205:
  2284. #line 1111 "parse.y"
  2285. {
  2286.             tree_constant *all_va_args;
  2287.             tree_constant::all_va_args t;
  2288.             all_va_args = new tree_constant (t);
  2289.             yyval.tree_argument_list_type = new tree_argument_list (all_va_args);
  2290.           ;
  2291.     break;}
  2292. case 206:
  2293. #line 1118 "parse.y"
  2294. {
  2295.             tree_constant *colon;
  2296.             tree_constant::magic_colon t;
  2297.             colon = new tree_constant (t);
  2298.             yyvsp[-2].tree_argument_list_type->append (colon);
  2299.           ;
  2300.     break;}
  2301. case 207:
  2302. #line 1125 "parse.y"
  2303. { yyvsp[-2].tree_argument_list_type->append (yyvsp[0].tree_expression_type); ;
  2304.     break;}
  2305. case 208:
  2306. #line 1127 "parse.y"
  2307. {
  2308.             tree_constant *all_va_args;
  2309.             tree_constant::all_va_args t;
  2310.             all_va_args = new tree_constant (t);
  2311.             yyvsp[-2].tree_argument_list_type->append (all_va_args);
  2312.           ;
  2313.     break;}
  2314. case 209:
  2315. #line 1136 "parse.y"
  2316. {
  2317.             mlnm.pop ();
  2318.             maybe_screwed_again--;
  2319.             tree_matrix *tmp = ml.pop ();
  2320.             yyval.tree_matrix_type = tmp->reverse ();
  2321.           ;
  2322.     break;}
  2323. case 216:
  2324. #line 1157 "parse.y"
  2325. {
  2326.             if (mlnm.top ())
  2327.               {
  2328.             mlnm.pop ();
  2329.             mlnm.push (0);
  2330.             tree_matrix *tmp = new tree_matrix
  2331.               (yyvsp[0].tree_expression_type, tree_matrix::md_none);
  2332.             ml.push (tmp);
  2333.               }
  2334.             else
  2335.               {
  2336.             tree_matrix *tmp = ml.pop ();
  2337.             tmp = tmp->chain (yyvsp[0].tree_expression_type, tree_matrix::md_down);
  2338.             ml.push (tmp);
  2339.               }
  2340.           ;
  2341.     break;}
  2342. case 217:
  2343. #line 1174 "parse.y"
  2344. {
  2345.             tree_matrix *tmp = ml.pop ();
  2346.             tmp = tmp->chain (yyvsp[0].tree_expression_type, tree_matrix::md_right);
  2347.             ml.push (tmp);
  2348.           ;
  2349.     break;}
  2350. }
  2351.    /* the action file gets copied in in place of this dollarsign */
  2352. #line 465 "/usr/local/gnu/lib/bison.simple"
  2353.  
  2354.   yyvsp -= yylen;
  2355.   yyssp -= yylen;
  2356. #ifdef YYLSP_NEEDED
  2357.   yylsp -= yylen;
  2358. #endif
  2359.  
  2360. #if YYDEBUG != 0
  2361.   if (yydebug)
  2362.     {
  2363.       short *ssp1 = yyss - 1;
  2364.       fprintf (stderr, "state stack now");
  2365.       while (ssp1 != yyssp)
  2366.     fprintf (stderr, " %d", *++ssp1);
  2367.       fprintf (stderr, "\n");
  2368.     }
  2369. #endif
  2370.  
  2371.   *++yyvsp = yyval;
  2372.  
  2373. #ifdef YYLSP_NEEDED
  2374.   yylsp++;
  2375.   if (yylen == 0)
  2376.     {
  2377.       yylsp->first_line = yylloc.first_line;
  2378.       yylsp->first_column = yylloc.first_column;
  2379.       yylsp->last_line = (yylsp-1)->last_line;
  2380.       yylsp->last_column = (yylsp-1)->last_column;
  2381.       yylsp->text = 0;
  2382.     }
  2383.   else
  2384.     {
  2385.       yylsp->last_line = (yylsp+yylen-1)->last_line;
  2386.       yylsp->last_column = (yylsp+yylen-1)->last_column;
  2387.     }
  2388. #endif
  2389.  
  2390.   /* Now "shift" the result of the reduction.
  2391.      Determine what state that goes to,
  2392.      based on the state we popped back to
  2393.      and the rule number reduced by.  */
  2394.  
  2395.   yyn = yyr1[yyn];
  2396.  
  2397.   yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
  2398.   if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
  2399.     yystate = yytable[yystate];
  2400.   else
  2401.     yystate = yydefgoto[yyn - YYNTBASE];
  2402.  
  2403.   goto yynewstate;
  2404.  
  2405. yyerrlab:   /* here on detecting error */
  2406.  
  2407.   if (! yyerrstatus)
  2408.     /* If not already recovering from an error, report this error.  */
  2409.     {
  2410.       ++yynerrs;
  2411.  
  2412. #ifdef YYERROR_VERBOSE
  2413.       yyn = yypact[yystate];
  2414.  
  2415.       if (yyn > YYFLAG && yyn < YYLAST)
  2416.     {
  2417.       int size = 0;
  2418.       char *msg;
  2419.       int x, count;
  2420.  
  2421.       count = 0;
  2422.       /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
  2423.       for (x = (yyn < 0 ? -yyn : 0);
  2424.            x < (sizeof(yytname) / sizeof(char *)); x++)
  2425.         if (yycheck[x + yyn] == x)
  2426.           size += strlen(yytname[x]) + 15, count++;
  2427.       msg = (char *) malloc(size + 15);
  2428.       if (msg != 0)
  2429.         {
  2430.           strcpy(msg, "parse error");
  2431.  
  2432.           if (count < 5)
  2433.         {
  2434.           count = 0;
  2435.           for (x = (yyn < 0 ? -yyn : 0);
  2436.                x < (sizeof(yytname) / sizeof(char *)); x++)
  2437.             if (yycheck[x + yyn] == x)
  2438.               {
  2439.             strcat(msg, count == 0 ? ", expecting `" : " or `");
  2440.             strcat(msg, yytname[x]);
  2441.             strcat(msg, "'");
  2442.             count++;
  2443.               }
  2444.         }
  2445.           yyerror(msg);
  2446.           free(msg);
  2447.         }
  2448.       else
  2449.         yyerror ("parse error; also virtual memory exceeded");
  2450.     }
  2451.       else
  2452. #endif /* YYERROR_VERBOSE */
  2453.     yyerror("parse error");
  2454.     }
  2455.  
  2456.   goto yyerrlab1;
  2457. yyerrlab1:   /* here on error raised explicitly by an action */
  2458.  
  2459.   if (yyerrstatus == 3)
  2460.     {
  2461.       /* if just tried and failed to reuse lookahead token after an error, discard it.  */
  2462.  
  2463.       /* return failure if at end of input */
  2464.       if (yychar == YYEOF)
  2465.     YYABORT;
  2466.  
  2467. #if YYDEBUG != 0
  2468.       if (yydebug)
  2469.     fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
  2470. #endif
  2471.  
  2472.       yychar = YYEMPTY;
  2473.     }
  2474.  
  2475.   /* Else will try to reuse lookahead token
  2476.      after shifting the error token.  */
  2477.  
  2478.   yyerrstatus = 3;        /* Each real token shifted decrements this */
  2479.  
  2480.   goto yyerrhandle;
  2481.  
  2482. yyerrdefault:  /* current state does not do anything special for the error token. */
  2483.  
  2484. #if 0
  2485.   /* This is wrong; only states that explicitly want error tokens
  2486.      should shift them.  */
  2487.   yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
  2488.   if (yyn) goto yydefault;
  2489. #endif
  2490.  
  2491. yyerrpop:   /* pop the current state because it cannot handle the error token */
  2492.  
  2493.   if (yyssp == yyss) YYABORT;
  2494.   yyvsp--;
  2495.   yystate = *--yyssp;
  2496. #ifdef YYLSP_NEEDED
  2497.   yylsp--;
  2498. #endif
  2499.  
  2500. #if YYDEBUG != 0
  2501.   if (yydebug)
  2502.     {
  2503.       short *ssp1 = yyss - 1;
  2504.       fprintf (stderr, "Error: state stack now");
  2505.       while (ssp1 != yyssp)
  2506.     fprintf (stderr, " %d", *++ssp1);
  2507.       fprintf (stderr, "\n");
  2508.     }
  2509. #endif
  2510.  
  2511. yyerrhandle:
  2512.  
  2513.   yyn = yypact[yystate];
  2514.   if (yyn == YYFLAG)
  2515.     goto yyerrdefault;
  2516.  
  2517.   yyn += YYTERROR;
  2518.   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
  2519.     goto yyerrdefault;
  2520.  
  2521.   yyn = yytable[yyn];
  2522.   if (yyn < 0)
  2523.     {
  2524.       if (yyn == YYFLAG)
  2525.     goto yyerrpop;
  2526.       yyn = -yyn;
  2527.       goto yyreduce;
  2528.     }
  2529.   else if (yyn == 0)
  2530.     goto yyerrpop;
  2531.  
  2532.   if (yyn == YYFINAL)
  2533.     YYACCEPT;
  2534.  
  2535. #if YYDEBUG != 0
  2536.   if (yydebug)
  2537.     fprintf(stderr, "Shifting error token, ");
  2538. #endif
  2539.  
  2540.   *++yyvsp = yylval;
  2541. #ifdef YYLSP_NEEDED
  2542.   *++yylsp = yylloc;
  2543. #endif
  2544.  
  2545.   yystate = yyn;
  2546.   goto yynewstate;
  2547. }
  2548. #line 1181 "parse.y"
  2549.  
  2550.  
  2551. // Generic error messages.
  2552.  
  2553. static void
  2554. yyerror (char *s)
  2555. {
  2556.   char *line = current_input_line;
  2557.   int err_col = current_input_column - 1;
  2558.  
  2559.   ostrstream output_buf;
  2560.  
  2561.   if (reading_fcn_file || reading_script_file)
  2562.     output_buf << "parse error near line " << input_line_number
  2563.            << " of file " << curr_fcn_file_name << ".m:";
  2564.   else
  2565.     output_buf << "parse error:";
  2566.  
  2567.   if (s && strcmp (s, "parse error") != 0)
  2568.     output_buf << "\n\n  " << s;
  2569.  
  2570.   output_buf << "\n\n";
  2571.  
  2572.   if (line)
  2573.     {
  2574.       int len = strlen (line);
  2575.  
  2576.       if (line[len-1] == '\n')
  2577.         {
  2578.           len--;
  2579.           line[len] = '\0';
  2580.         }
  2581.  
  2582. // Print the line, maybe with a pointer near the error token.
  2583.  
  2584.       output_buf << ">>> " << line << "\n";
  2585.  
  2586.       if (err_col == 0)
  2587.     err_col = len;
  2588.  
  2589.       for (int i = 0; i < err_col + 3; i++)
  2590.     output_buf << " ";
  2591.  
  2592.       output_buf << "^";
  2593.     }
  2594.  
  2595.   output_buf << "\n" << ends;
  2596.  
  2597.   char *msg = output_buf.str ();
  2598.  
  2599.   parse_error ("%s", msg);
  2600.  
  2601.   delete [] msg;
  2602. }
  2603.  
  2604. // Error mesages for mismatched end tokens.
  2605.  
  2606. static void
  2607. end_error (char *type, token::end_tok_type ettype, int l, int c)
  2608. {
  2609.   static char *fmt = "`%s' command matched by `%s' near line %d column %d";
  2610.  
  2611.   switch (ettype)
  2612.     {
  2613.     case token::simple_end:
  2614.       error (fmt, type, "end", l, c);
  2615.       break;
  2616.  
  2617.     case token::for_end:
  2618.       error (fmt, type, "endfor", l, c);
  2619.       break;
  2620.  
  2621.     case token::function_end:
  2622.       error (fmt, type, "endfunction", l, c);
  2623.       break;
  2624.  
  2625.     case token::if_end:
  2626.       error (fmt, type, "endif", l, c);
  2627.       break;
  2628.  
  2629.     case token::while_end:
  2630.       error (fmt, type, "endwhile", l, c); 
  2631.       break;
  2632.  
  2633.     default:
  2634.       panic_impossible ();
  2635.       break;
  2636.     }
  2637. }
  2638.  
  2639. // Check to see that end tokens are properly matched.
  2640.  
  2641. static int
  2642. check_end (token *tok, token::end_tok_type expected)
  2643. {
  2644.   token::end_tok_type ettype = tok->ettype ();
  2645.   if (ettype != expected && ettype != token::simple_end)
  2646.     {
  2647.       yyerror ("parse error");
  2648.  
  2649.       int l = tok->line ();
  2650.       int c = tok->column ();
  2651.  
  2652.       switch (expected)
  2653.     {
  2654.     case token::for_end:
  2655.       end_error ("for", ettype, l, c);
  2656.       break;
  2657.  
  2658.     case token::function_end:
  2659.       end_error ("function", ettype, l, c);
  2660.       break;
  2661.  
  2662.     case token::if_end:
  2663.       end_error ("if", ettype, l, c);
  2664.       break;
  2665.  
  2666.     case token::while_end:
  2667.       end_error ("while", ettype, l, c);
  2668.       break;
  2669.  
  2670.     default:
  2671.       panic_impossible ();
  2672.       break;
  2673.     }
  2674.       return 1;
  2675.     }
  2676.   else
  2677.     return 0;
  2678. }
  2679.  
  2680. // Try to figure out early if an expression should become an
  2681. // assignment to the builtin variable ans.
  2682. //
  2683. // Need to make sure that the expression isn't already an identifier
  2684. // that has a name, or an assignment expression.
  2685. //
  2686. // Note that an expression can't be just an identifier anymore -- it
  2687. // must at least be an index expression (see the definition of the
  2688. // non-terminal `variable' above).
  2689. //
  2690. // XXX FIXME XXX.  This isn't quite sufficient.  For example, try the
  2691. // command `x = 4, x' for `x' previously undefined.
  2692. //
  2693. // XXX FIXME XXX -- we should probably delay doing this until eval-time.
  2694.  
  2695. static tree_expression *
  2696. maybe_convert_to_ans_assign (tree_expression *expr)
  2697. {
  2698.   if (expr->is_index_expression ())
  2699.     {
  2700.       expr->mark_for_possible_ans_assign ();
  2701.       return expr;
  2702.     }
  2703.   else if (expr->is_assignment_expression ()
  2704.        || expr->is_prefix_expression ())
  2705.     {
  2706.       return expr;
  2707.     }
  2708.   else
  2709.     {
  2710.       symbol_record *sr = global_sym_tab->lookup ("ans", 1, 0);
  2711.  
  2712.       assert (sr);
  2713.       
  2714.       tree_identifier *ans = new tree_identifier (sr);
  2715.  
  2716.       return new tree_simple_assignment_expression (ans, expr, 0, 1);
  2717.     }
  2718. }
  2719.  
  2720. // Maybe print a warning if an assignment expression is used as the
  2721. // test in a logical expression.
  2722.  
  2723. static void
  2724. maybe_warn_assign_as_truth_value (tree_expression *expr)
  2725. {
  2726.   if (user_pref.warn_assign_as_truth_value
  2727.       && expr->is_assignment_expression ()
  2728.       && expr->in_parens < 2)
  2729.     {
  2730.       warning ("suggest parenthesis around assignment used as truth value");
  2731.     }
  2732. }
  2733.  
  2734. // Build a binary expression.
  2735.  
  2736. static tree_expression *
  2737. make_binary_op (int op, tree_expression *op1, token *tok_val,
  2738.         tree_expression *op2)
  2739. {
  2740.   tree_expression::type t;
  2741.   switch (op)
  2742.     {
  2743.     case POW:
  2744.       t = tree_expression::power;
  2745.       break;
  2746.  
  2747.     case EPOW:
  2748.       t = tree_expression::elem_pow;
  2749.       break;
  2750.  
  2751.     case '+':
  2752.       t = tree_expression::add;
  2753.       break;
  2754.  
  2755.     case '-':
  2756.       t = tree_expression::subtract;
  2757.       break;
  2758.  
  2759.     case '*':
  2760.       t = tree_expression::multiply;
  2761.       break;
  2762.  
  2763.     case '/':
  2764.       t = tree_expression::divide;
  2765.       break;
  2766.  
  2767.     case EMUL:
  2768.       t = tree_expression::el_mul;
  2769.       break;
  2770.  
  2771.     case EDIV:
  2772.       t = tree_expression::el_div;
  2773.       break;
  2774.  
  2775.     case LEFTDIV:
  2776.       t = tree_expression::leftdiv;
  2777.       break;
  2778.  
  2779.     case ELEFTDIV:
  2780.       t = tree_expression::el_leftdiv;
  2781.       break;
  2782.  
  2783.     case EXPR_LT:
  2784.       t = tree_expression::cmp_lt;
  2785.       break;
  2786.  
  2787.     case EXPR_LE:
  2788.       t = tree_expression::cmp_le;
  2789.       break;
  2790.  
  2791.     case EXPR_EQ:
  2792.       t = tree_expression::cmp_eq;
  2793.       break;
  2794.  
  2795.     case EXPR_GE:
  2796.       t = tree_expression::cmp_ge;
  2797.       break;
  2798.  
  2799.     case EXPR_GT:
  2800.       t = tree_expression::cmp_gt;
  2801.       break;
  2802.  
  2803.     case EXPR_NE:
  2804.       t = tree_expression::cmp_ne;
  2805.       break;
  2806.  
  2807.     case EXPR_AND_AND:
  2808.       t = tree_expression::and_and;
  2809.       break;
  2810.  
  2811.     case EXPR_OR_OR:
  2812.       t = tree_expression::or_or;
  2813.       break;
  2814.  
  2815.     case EXPR_AND:
  2816.       t = tree_expression::and;
  2817.       break;
  2818.  
  2819.     case EXPR_OR:
  2820.       t = tree_expression::or;
  2821.       break;
  2822.  
  2823.     default:
  2824.       panic_impossible ();
  2825.       break;
  2826.     }
  2827.  
  2828.   int l = tok_val->line ();
  2829.   int c = tok_val->column ();
  2830.  
  2831.   return new tree_binary_expression (op1, op2, t, l, c);
  2832. }
  2833.  
  2834. // Build a prefix expression.
  2835.  
  2836. static tree_expression *
  2837. make_prefix_op (int op, tree_identifier *op1, token *tok_val)
  2838. {
  2839.   tree_expression::type t;
  2840.   switch (op)
  2841.     {
  2842.     case PLUS_PLUS:
  2843.       t = tree_expression::increment;
  2844.       break;
  2845.  
  2846.     case MINUS_MINUS:
  2847.       t = tree_expression::decrement;
  2848.       break;
  2849.  
  2850.     default:
  2851.       panic_impossible ();
  2852.       break;
  2853.     }
  2854.  
  2855.   int l = tok_val->line ();
  2856.   int c = tok_val->column ();
  2857.  
  2858.   return new tree_prefix_expression (op1, t, l, c);
  2859. }
  2860.  
  2861. // Build a postfix expression.
  2862.  
  2863. static tree_expression *
  2864. make_postfix_op (int op, tree_identifier *op1, token *tok_val)
  2865. {
  2866.   tree_expression::type t;
  2867.   switch (op)
  2868.     {
  2869.     case PLUS_PLUS:
  2870.       t = tree_expression::increment;
  2871.       break;
  2872.  
  2873.     case MINUS_MINUS:
  2874.       t = tree_expression::decrement;
  2875.       break;
  2876.  
  2877.     default:
  2878.       panic_impossible ();
  2879.       break;
  2880.     }
  2881.  
  2882.   int l = tok_val->line ();
  2883.   int c = tok_val->column ();
  2884.  
  2885.   return new tree_postfix_expression (op1, t, l, c);
  2886. }
  2887.  
  2888. // Build a unary expression.
  2889.  
  2890. static tree_expression *
  2891. make_unary_op (int op, tree_expression *op1, token *tok_val)
  2892. {
  2893.   tree_expression::type t;
  2894.   switch (op)
  2895.     {
  2896.     case QUOTE:
  2897.       t = tree_expression::hermitian;
  2898.       break;
  2899.  
  2900.     case TRANSPOSE:
  2901.       t = tree_expression::transpose;
  2902.       break;
  2903.  
  2904.     case EXPR_NOT:
  2905.       t = tree_expression::not;
  2906.       break;
  2907.  
  2908.     case '-':
  2909.       t = tree_expression::uminus;
  2910.       break;
  2911.  
  2912.     default:
  2913.       panic_impossible ();
  2914.       break;
  2915.     }
  2916.  
  2917.   int l = tok_val->line ();
  2918.   int c = tok_val->column ();
  2919.  
  2920.   return new tree_unary_expression (op1, t, l, c);
  2921. }
  2922.  
  2923. // Make an expression that handles assignment of multiple values.
  2924.  
  2925. static tree_expression *
  2926. make_multi_val_ret (tree_expression *rhs, int l, int c) 
  2927. {
  2928. // Convert the matrix list to a list of identifiers.  If that fails,
  2929. // we can abort here, without losing anything -- no other possible
  2930. // syntax is valid if we've seen the equals sign as the next token
  2931. // after the `]'. 
  2932.  
  2933.   tree_expression *retval = 0;
  2934.  
  2935.   maybe_screwed_again--;
  2936.  
  2937.   tree_matrix *tmp = ml.pop ();
  2938.  
  2939.   tmp = tmp->reverse ();
  2940.  
  2941.   tree_return_list *id_list = tmp->to_return_list ();
  2942.  
  2943.   if (id_list)
  2944.     {
  2945.       int list_len = id_list->length ();
  2946.  
  2947.       if (list_len == 1)
  2948.     {
  2949.       tree_index_expression *lhs = id_list->remove_front ();
  2950.       retval = new tree_simple_assignment_expression (lhs, rhs,
  2951.                               0, 0, l, c);
  2952.       
  2953.     }
  2954.       else if (list_len > 1)
  2955.     {
  2956.       if (rhs->is_multi_val_ret_expression ())
  2957.         {
  2958.           tree_multi_val_ret *t = (tree_multi_val_ret *) rhs;
  2959.           retval = new tree_multi_assignment_expression (id_list, t, l, c);
  2960.         }
  2961.       else
  2962.         yyerror ("RHS must be an expression that returns multiple values");
  2963.     }
  2964.       else
  2965.     panic_impossible ();
  2966.     }
  2967.   else
  2968.     yyerror ("invalid identifier list for assignment");
  2969.  
  2970.   return retval;
  2971. }
  2972.  
  2973. static tree_index_expression *
  2974. make_index_expression (tree_indirect_ref *indir, tree_argument_list *args)
  2975. {
  2976.   tree_index_expression *retval = 0;
  2977.  
  2978.   int l = indir->line ();
  2979.   int c = indir->column ();
  2980.  
  2981.   if (indir->is_identifier_only ())
  2982.     {
  2983.       indir->preserve_identifier ();
  2984.       retval = new tree_index_expression (indir->ident (), args, l, c);
  2985.       delete indir;
  2986.     }
  2987.   else
  2988.     retval =  new tree_index_expression (indir, args, l, c);
  2989.  
  2990.   return retval;
  2991. }
  2992.