xref: /openbsd-src/gnu/usr.bin/binutils/gdb/f-exp.c (revision 11efff7f3ac2b3cfeff0c0cddc14294d9b3aca4f)
1*11efff7fSkettenis /* A Bison parser, made by GNU Bison 1.875c.  */
2b725ae77Skettenis 
3*11efff7fSkettenis /* Skeleton parser for Yacc-like parsing with Bison,
4*11efff7fSkettenis    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
5b725ae77Skettenis 
6*11efff7fSkettenis    This program is free software; you can redistribute it and/or modify
7*11efff7fSkettenis    it under the terms of the GNU General Public License as published by
8*11efff7fSkettenis    the Free Software Foundation; either version 2, or (at your option)
9*11efff7fSkettenis    any later version.
10*11efff7fSkettenis 
11*11efff7fSkettenis    This program is distributed in the hope that it will be useful,
12*11efff7fSkettenis    but WITHOUT ANY WARRANTY; without even the implied warranty of
13*11efff7fSkettenis    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*11efff7fSkettenis    GNU General Public License for more details.
15*11efff7fSkettenis 
16*11efff7fSkettenis    You should have received a copy of the GNU General Public License
17*11efff7fSkettenis    along with this program; if not, write to the Free Software
18*11efff7fSkettenis    Foundation, Inc., 59 Temple Place - Suite 330,
19*11efff7fSkettenis    Boston, MA 02111-1307, USA.  */
20*11efff7fSkettenis 
21*11efff7fSkettenis /* As a special exception, when this file is copied by Bison into a
22*11efff7fSkettenis    Bison output file, you may use that output file without restriction.
23*11efff7fSkettenis    This special exception was added by the Free Software Foundation
24*11efff7fSkettenis    in version 1.24 of Bison.  */
25*11efff7fSkettenis 
26*11efff7fSkettenis /* Written by Richard Stallman by simplifying the original so called
27*11efff7fSkettenis    ``semantic'' parser.  */
28*11efff7fSkettenis 
29*11efff7fSkettenis /* All symbols defined below should begin with yy or YY, to avoid
30*11efff7fSkettenis    infringing on user name space.  This should be done even for local
31*11efff7fSkettenis    variables, as they might otherwise be expanded by user macros.
32*11efff7fSkettenis    There are some unavoidable exceptions within include files to
33*11efff7fSkettenis    define necessary library symbols; they are noted "INFRINGES ON
34*11efff7fSkettenis    USER NAME SPACE" below.  */
35*11efff7fSkettenis 
36*11efff7fSkettenis /* Identify Bison output.  */
37*11efff7fSkettenis #define YYBISON 1
38*11efff7fSkettenis 
39*11efff7fSkettenis /* Skeleton name.  */
40*11efff7fSkettenis #define YYSKELETON_NAME "yacc.c"
41*11efff7fSkettenis 
42*11efff7fSkettenis /* Pure parsers.  */
43*11efff7fSkettenis #define YYPURE 0
44*11efff7fSkettenis 
45*11efff7fSkettenis /* Using locations.  */
46*11efff7fSkettenis #define YYLSP_NEEDED 0
47*11efff7fSkettenis 
48*11efff7fSkettenis 
49*11efff7fSkettenis 
50*11efff7fSkettenis /* Tokens.  */
51*11efff7fSkettenis #ifndef YYTOKENTYPE
52*11efff7fSkettenis # define YYTOKENTYPE
53*11efff7fSkettenis    /* Put the tokens into the symbol table, so that GDB and other debuggers
54*11efff7fSkettenis       know about them.  */
55*11efff7fSkettenis    enum yytokentype {
56*11efff7fSkettenis      INT = 258,
57*11efff7fSkettenis      FLOAT = 259,
58*11efff7fSkettenis      STRING_LITERAL = 260,
59*11efff7fSkettenis      BOOLEAN_LITERAL = 261,
60*11efff7fSkettenis      NAME = 262,
61*11efff7fSkettenis      TYPENAME = 263,
62*11efff7fSkettenis      NAME_OR_INT = 264,
63*11efff7fSkettenis      SIZEOF = 265,
64*11efff7fSkettenis      ERROR = 266,
65*11efff7fSkettenis      INT_KEYWORD = 267,
66*11efff7fSkettenis      INT_S2_KEYWORD = 268,
67*11efff7fSkettenis      LOGICAL_S1_KEYWORD = 269,
68*11efff7fSkettenis      LOGICAL_S2_KEYWORD = 270,
69*11efff7fSkettenis      LOGICAL_KEYWORD = 271,
70*11efff7fSkettenis      REAL_KEYWORD = 272,
71*11efff7fSkettenis      REAL_S8_KEYWORD = 273,
72*11efff7fSkettenis      REAL_S16_KEYWORD = 274,
73*11efff7fSkettenis      COMPLEX_S8_KEYWORD = 275,
74*11efff7fSkettenis      COMPLEX_S16_KEYWORD = 276,
75*11efff7fSkettenis      COMPLEX_S32_KEYWORD = 277,
76*11efff7fSkettenis      BOOL_AND = 278,
77*11efff7fSkettenis      BOOL_OR = 279,
78*11efff7fSkettenis      BOOL_NOT = 280,
79*11efff7fSkettenis      CHARACTER = 281,
80*11efff7fSkettenis      VARIABLE = 282,
81*11efff7fSkettenis      ASSIGN_MODIFY = 283,
82*11efff7fSkettenis      ABOVE_COMMA = 284,
83*11efff7fSkettenis      NOTEQUAL = 285,
84*11efff7fSkettenis      EQUAL = 286,
85*11efff7fSkettenis      GEQ = 287,
86*11efff7fSkettenis      LEQ = 288,
87*11efff7fSkettenis      GREATERTHAN = 289,
88*11efff7fSkettenis      LESSTHAN = 290,
89*11efff7fSkettenis      RSH = 291,
90*11efff7fSkettenis      LSH = 292,
91*11efff7fSkettenis      UNARY = 293
92*11efff7fSkettenis    };
93*11efff7fSkettenis #endif
94*11efff7fSkettenis #define INT 258
95*11efff7fSkettenis #define FLOAT 259
96*11efff7fSkettenis #define STRING_LITERAL 260
97*11efff7fSkettenis #define BOOLEAN_LITERAL 261
98*11efff7fSkettenis #define NAME 262
99*11efff7fSkettenis #define TYPENAME 263
100*11efff7fSkettenis #define NAME_OR_INT 264
101*11efff7fSkettenis #define SIZEOF 265
102*11efff7fSkettenis #define ERROR 266
103*11efff7fSkettenis #define INT_KEYWORD 267
104*11efff7fSkettenis #define INT_S2_KEYWORD 268
105*11efff7fSkettenis #define LOGICAL_S1_KEYWORD 269
106*11efff7fSkettenis #define LOGICAL_S2_KEYWORD 270
107*11efff7fSkettenis #define LOGICAL_KEYWORD 271
108*11efff7fSkettenis #define REAL_KEYWORD 272
109*11efff7fSkettenis #define REAL_S8_KEYWORD 273
110*11efff7fSkettenis #define REAL_S16_KEYWORD 274
111*11efff7fSkettenis #define COMPLEX_S8_KEYWORD 275
112*11efff7fSkettenis #define COMPLEX_S16_KEYWORD 276
113*11efff7fSkettenis #define COMPLEX_S32_KEYWORD 277
114*11efff7fSkettenis #define BOOL_AND 278
115*11efff7fSkettenis #define BOOL_OR 279
116*11efff7fSkettenis #define BOOL_NOT 280
117*11efff7fSkettenis #define CHARACTER 281
118*11efff7fSkettenis #define VARIABLE 282
119*11efff7fSkettenis #define ASSIGN_MODIFY 283
120*11efff7fSkettenis #define ABOVE_COMMA 284
121b725ae77Skettenis #define NOTEQUAL 285
122*11efff7fSkettenis #define EQUAL 286
123*11efff7fSkettenis #define GEQ 287
124b725ae77Skettenis #define LEQ 288
125*11efff7fSkettenis #define GREATERTHAN 289
126*11efff7fSkettenis #define LESSTHAN 290
127b725ae77Skettenis #define RSH 291
128*11efff7fSkettenis #define LSH 292
129*11efff7fSkettenis #define UNARY 293
130b725ae77Skettenis 
131*11efff7fSkettenis 
132*11efff7fSkettenis 
133*11efff7fSkettenis 
134*11efff7fSkettenis /* Copy the first part of user declarations.  */
135b725ae77Skettenis #line 44 "f-exp.y"
136b725ae77Skettenis 
137b725ae77Skettenis 
138b725ae77Skettenis #include "defs.h"
139b725ae77Skettenis #include "gdb_string.h"
140b725ae77Skettenis #include "expression.h"
141b725ae77Skettenis #include "value.h"
142b725ae77Skettenis #include "parser-defs.h"
143b725ae77Skettenis #include "language.h"
144b725ae77Skettenis #include "f-lang.h"
145b725ae77Skettenis #include "bfd.h" /* Required by objfiles.h.  */
146b725ae77Skettenis #include "symfile.h" /* Required by objfiles.h.  */
147b725ae77Skettenis #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
148b725ae77Skettenis #include "block.h"
149b725ae77Skettenis #include <ctype.h>
150b725ae77Skettenis 
151b725ae77Skettenis /* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
152b725ae77Skettenis    as well as gratuitiously global symbol names, so we can have multiple
153b725ae77Skettenis    yacc generated parsers in gdb.  Note that these are only the variables
154b725ae77Skettenis    produced by yacc.  If other parser generators (bison, byacc, etc) produce
155b725ae77Skettenis    additional global names that conflict at link time, then those parser
156b725ae77Skettenis    generators need to be fixed instead of adding those names to this list. */
157b725ae77Skettenis 
158b725ae77Skettenis #define	yymaxdepth f_maxdepth
159b725ae77Skettenis #define	yyparse	f_parse
160b725ae77Skettenis #define	yylex	f_lex
161b725ae77Skettenis #define	yyerror	f_error
162b725ae77Skettenis #define	yylval	f_lval
163b725ae77Skettenis #define	yychar	f_char
164b725ae77Skettenis #define	yydebug	f_debug
165b725ae77Skettenis #define	yypact	f_pact
166b725ae77Skettenis #define	yyr1	f_r1
167b725ae77Skettenis #define	yyr2	f_r2
168b725ae77Skettenis #define	yydef	f_def
169b725ae77Skettenis #define	yychk	f_chk
170b725ae77Skettenis #define	yypgo	f_pgo
171b725ae77Skettenis #define	yyact	f_act
172b725ae77Skettenis #define	yyexca	f_exca
173b725ae77Skettenis #define yyerrflag f_errflag
174b725ae77Skettenis #define yynerrs	f_nerrs
175b725ae77Skettenis #define	yyps	f_ps
176b725ae77Skettenis #define	yypv	f_pv
177b725ae77Skettenis #define	yys	f_s
178b725ae77Skettenis #define	yy_yys	f_yys
179b725ae77Skettenis #define	yystate	f_state
180b725ae77Skettenis #define	yytmp	f_tmp
181b725ae77Skettenis #define	yyv	f_v
182b725ae77Skettenis #define	yy_yyv	f_yyv
183b725ae77Skettenis #define	yyval	f_val
184b725ae77Skettenis #define	yylloc	f_lloc
185b725ae77Skettenis #define yyreds	f_reds		/* With YYDEBUG defined */
186b725ae77Skettenis #define yytoks	f_toks		/* With YYDEBUG defined */
187b725ae77Skettenis #define yyname	f_name		/* With YYDEBUG defined */
188b725ae77Skettenis #define yyrule	f_rule		/* With YYDEBUG defined */
189b725ae77Skettenis #define yylhs	f_yylhs
190b725ae77Skettenis #define yylen	f_yylen
191b725ae77Skettenis #define yydefred f_yydefred
192b725ae77Skettenis #define yydgoto	f_yydgoto
193b725ae77Skettenis #define yysindex f_yysindex
194b725ae77Skettenis #define yyrindex f_yyrindex
195b725ae77Skettenis #define yygindex f_yygindex
196b725ae77Skettenis #define yytable	 f_yytable
197b725ae77Skettenis #define yycheck	 f_yycheck
198b725ae77Skettenis 
199b725ae77Skettenis #ifndef YYDEBUG
200b725ae77Skettenis #define	YYDEBUG	1		/* Default to yydebug support */
201b725ae77Skettenis #endif
202b725ae77Skettenis 
203b725ae77Skettenis #define YYFPRINTF parser_fprintf
204b725ae77Skettenis 
205b725ae77Skettenis int yyparse (void);
206b725ae77Skettenis 
207b725ae77Skettenis static int yylex (void);
208b725ae77Skettenis 
209b725ae77Skettenis void yyerror (char *);
210b725ae77Skettenis 
211b725ae77Skettenis static void growbuf_by_size (int);
212b725ae77Skettenis 
213b725ae77Skettenis static int match_string_literal (void);
214b725ae77Skettenis 
215b725ae77Skettenis 
216*11efff7fSkettenis 
217*11efff7fSkettenis /* Enabling traces.  */
218*11efff7fSkettenis #ifndef YYDEBUG
219*11efff7fSkettenis # define YYDEBUG 0
220*11efff7fSkettenis #endif
221*11efff7fSkettenis 
222*11efff7fSkettenis /* Enabling verbose error messages.  */
223*11efff7fSkettenis #ifdef YYERROR_VERBOSE
224*11efff7fSkettenis # undef YYERROR_VERBOSE
225*11efff7fSkettenis # define YYERROR_VERBOSE 1
226*11efff7fSkettenis #else
227*11efff7fSkettenis # define YYERROR_VERBOSE 0
228*11efff7fSkettenis #endif
229*11efff7fSkettenis 
230*11efff7fSkettenis #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
231*11efff7fSkettenis #line 130 "f-exp.y"
232*11efff7fSkettenis typedef union YYSTYPE {
233b725ae77Skettenis     LONGEST lval;
234b725ae77Skettenis     struct {
235b725ae77Skettenis       LONGEST val;
236b725ae77Skettenis       struct type *type;
237b725ae77Skettenis     } typed_val;
238b725ae77Skettenis     DOUBLEST dval;
239b725ae77Skettenis     struct symbol *sym;
240b725ae77Skettenis     struct type *tval;
241b725ae77Skettenis     struct stoken sval;
242b725ae77Skettenis     struct ttype tsym;
243b725ae77Skettenis     struct symtoken ssym;
244b725ae77Skettenis     int voidval;
245b725ae77Skettenis     struct block *bval;
246b725ae77Skettenis     enum exp_opcode opcode;
247b725ae77Skettenis     struct internalvar *ivar;
248b725ae77Skettenis 
249b725ae77Skettenis     struct type **tvec;
250b725ae77Skettenis     int *ivec;
251*11efff7fSkettenis   } YYSTYPE;
252*11efff7fSkettenis /* Line 191 of yacc.c.  */
253*11efff7fSkettenis # define yystype YYSTYPE /* obsolescent; will be withdrawn */
254*11efff7fSkettenis # define YYSTYPE_IS_DECLARED 1
255b725ae77Skettenis # define YYSTYPE_IS_TRIVIAL 1
256b725ae77Skettenis #endif
257*11efff7fSkettenis 
258*11efff7fSkettenis 
259*11efff7fSkettenis 
260*11efff7fSkettenis /* Copy the second part of user declarations.  */
261b725ae77Skettenis #line 151 "f-exp.y"
262b725ae77Skettenis 
263b725ae77Skettenis /* YYSTYPE gets defined by %union */
264b725ae77Skettenis static int parse_number (char *, int, int, YYSTYPE *);
265*11efff7fSkettenis 
266*11efff7fSkettenis 
267*11efff7fSkettenis /* Line 214 of yacc.c.  */
268*11efff7fSkettenis 
269*11efff7fSkettenis #if ! defined (yyoverflow) || YYERROR_VERBOSE
270*11efff7fSkettenis 
271*11efff7fSkettenis # ifndef YYFREE
272*11efff7fSkettenis #  define YYFREE free
273*11efff7fSkettenis # endif
274*11efff7fSkettenis # ifndef YYMALLOC
275*11efff7fSkettenis #  define YYMALLOC xmalloc
276b725ae77Skettenis # endif
277b725ae77Skettenis 
278*11efff7fSkettenis /* The parser invokes alloca or xmalloc; define the necessary symbols.  */
279*11efff7fSkettenis 
280*11efff7fSkettenis # ifdef YYSTACK_USE_ALLOCA
281*11efff7fSkettenis #  if YYSTACK_USE_ALLOCA
282*11efff7fSkettenis #   define YYSTACK_ALLOC alloca
283*11efff7fSkettenis #  endif
284*11efff7fSkettenis # else
285*11efff7fSkettenis #  if defined (alloca) || defined (_ALLOCA_H)
286*11efff7fSkettenis #   define YYSTACK_ALLOC alloca
287*11efff7fSkettenis #  else
288*11efff7fSkettenis #   ifdef __GNUC__
289*11efff7fSkettenis #    define YYSTACK_ALLOC __builtin_alloca
290*11efff7fSkettenis #   endif
291*11efff7fSkettenis #  endif
292*11efff7fSkettenis # endif
293*11efff7fSkettenis 
294*11efff7fSkettenis # ifdef YYSTACK_ALLOC
295*11efff7fSkettenis    /* Pacify GCC's `empty if-body' warning. */
296*11efff7fSkettenis #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
297*11efff7fSkettenis # else
298*11efff7fSkettenis #  if defined (__STDC__) || defined (__cplusplus)
299*11efff7fSkettenis #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
300*11efff7fSkettenis #   define YYSIZE_T size_t
301*11efff7fSkettenis #  endif
302*11efff7fSkettenis #  define YYSTACK_ALLOC YYMALLOC
303*11efff7fSkettenis #  define YYSTACK_FREE YYFREE
304*11efff7fSkettenis # endif
305*11efff7fSkettenis #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
306b725ae77Skettenis 
307b725ae77Skettenis 
308*11efff7fSkettenis #if (! defined (yyoverflow) \
309*11efff7fSkettenis      && (! defined (__cplusplus) \
310*11efff7fSkettenis 	 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
311b725ae77Skettenis 
312*11efff7fSkettenis /* A type that is properly aligned for any stack member.  */
313*11efff7fSkettenis union yyalloc
314*11efff7fSkettenis {
315*11efff7fSkettenis   short yyss;
316*11efff7fSkettenis   YYSTYPE yyvs;
317*11efff7fSkettenis   };
318b725ae77Skettenis 
319*11efff7fSkettenis /* The size of the maximum gap between one aligned stack and the next.  */
320*11efff7fSkettenis # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
321*11efff7fSkettenis 
322*11efff7fSkettenis /* The size of an array large to enough to hold all stacks, each with
323*11efff7fSkettenis    N elements.  */
324*11efff7fSkettenis # define YYSTACK_BYTES(N) \
325*11efff7fSkettenis      ((N) * (sizeof (short) + sizeof (YYSTYPE))				\
326*11efff7fSkettenis       + YYSTACK_GAP_MAXIMUM)
327*11efff7fSkettenis 
328*11efff7fSkettenis /* Copy COUNT objects from FROM to TO.  The source and destination do
329*11efff7fSkettenis    not overlap.  */
330*11efff7fSkettenis # ifndef YYCOPY
331*11efff7fSkettenis #  if defined (__GNUC__) && 1 < __GNUC__
332*11efff7fSkettenis #   define YYCOPY(To, From, Count) \
333*11efff7fSkettenis       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
334*11efff7fSkettenis #  else
335*11efff7fSkettenis #   define YYCOPY(To, From, Count)		\
336*11efff7fSkettenis       do					\
337*11efff7fSkettenis 	{					\
338*11efff7fSkettenis 	  register YYSIZE_T yyi;		\
339*11efff7fSkettenis 	  for (yyi = 0; yyi < (Count); yyi++)	\
340*11efff7fSkettenis 	    (To)[yyi] = (From)[yyi];		\
341*11efff7fSkettenis 	}					\
342*11efff7fSkettenis       while (0)
343*11efff7fSkettenis #  endif
344*11efff7fSkettenis # endif
345*11efff7fSkettenis 
346*11efff7fSkettenis /* Relocate STACK from its old location to the new one.  The
347*11efff7fSkettenis    local variables YYSIZE and YYSTACKSIZE give the old and new number of
348*11efff7fSkettenis    elements in the stack, and YYPTR gives the new location of the
349*11efff7fSkettenis    stack.  Advance YYPTR to a properly aligned location for the next
350*11efff7fSkettenis    stack.  */
351*11efff7fSkettenis # define YYSTACK_RELOCATE(Stack)					\
352*11efff7fSkettenis     do									\
353*11efff7fSkettenis       {									\
354*11efff7fSkettenis 	YYSIZE_T yynewbytes;						\
355*11efff7fSkettenis 	YYCOPY (&yyptr->Stack, Stack, yysize);				\
356*11efff7fSkettenis 	Stack = &yyptr->Stack;						\
357*11efff7fSkettenis 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
358*11efff7fSkettenis 	yyptr += yynewbytes / sizeof (*yyptr);				\
359*11efff7fSkettenis       }									\
360*11efff7fSkettenis     while (0)
361*11efff7fSkettenis 
362*11efff7fSkettenis #endif
363*11efff7fSkettenis 
364*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
365*11efff7fSkettenis    typedef signed char yysigned_char;
366*11efff7fSkettenis #else
367*11efff7fSkettenis    typedef short yysigned_char;
368*11efff7fSkettenis #endif
369*11efff7fSkettenis 
370*11efff7fSkettenis /* YYFINAL -- State number of the termination state. */
371*11efff7fSkettenis #define YYFINAL  46
372*11efff7fSkettenis /* YYLAST -- Last index in YYTABLE.  */
373*11efff7fSkettenis #define YYLAST   460
374*11efff7fSkettenis 
375*11efff7fSkettenis /* YYNTOKENS -- Number of terminals. */
376*11efff7fSkettenis #define YYNTOKENS  55
377*11efff7fSkettenis /* YYNNTS -- Number of nonterminals. */
378*11efff7fSkettenis #define YYNNTS  17
379*11efff7fSkettenis /* YYNRULES -- Number of rules. */
380*11efff7fSkettenis #define YYNRULES  80
381*11efff7fSkettenis /* YYNRULES -- Number of states. */
382*11efff7fSkettenis #define YYNSTATES  125
383*11efff7fSkettenis 
384*11efff7fSkettenis /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
385*11efff7fSkettenis #define YYUNDEFTOK  2
386*11efff7fSkettenis #define YYMAXUTOK   293
387*11efff7fSkettenis 
388*11efff7fSkettenis #define YYTRANSLATE(YYX) 						\
389*11efff7fSkettenis   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
390*11efff7fSkettenis 
391*11efff7fSkettenis /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
392*11efff7fSkettenis static const unsigned char yytranslate[] =
393b725ae77Skettenis {
394b725ae77Skettenis        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
395b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
396b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
397b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,    49,    35,     2,
398b725ae77Skettenis       51,    52,    47,    45,    29,    46,     2,    48,     2,     2,
399b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,    54,     2,
400b725ae77Skettenis        2,    31,     2,    32,    44,     2,     2,     2,     2,     2,
401b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
402b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
403b725ae77Skettenis        2,     2,     2,     2,    34,     2,     2,     2,     2,     2,
404b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
405b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
406b725ae77Skettenis        2,     2,     2,     2,    33,     2,    53,     2,     2,     2,
407b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
408b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
409b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
410b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
411b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
412b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
413b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
414b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
415b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
416b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
417b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
418b725ae77Skettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
419*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
420*11efff7fSkettenis        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
421*11efff7fSkettenis       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
422*11efff7fSkettenis       25,    26,    27,    28,    30,    36,    37,    38,    39,    40,
423*11efff7fSkettenis       41,    42,    43,    50
424b725ae77Skettenis };
425b725ae77Skettenis 
426b725ae77Skettenis #if YYDEBUG
427*11efff7fSkettenis /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
428*11efff7fSkettenis    YYRHS.  */
429*11efff7fSkettenis static const unsigned char yyprhs[] =
430b725ae77Skettenis {
431*11efff7fSkettenis        0,     0,     3,     5,     7,     9,    13,    16,    19,    22,
432*11efff7fSkettenis       25,    28,    31,    32,    38,    39,    41,    43,    47,    51,
433*11efff7fSkettenis       55,    59,    64,    68,    72,    76,    80,    84,    88,    92,
434*11efff7fSkettenis       96,   100,   104,   108,   112,   116,   120,   124,   128,   132,
435*11efff7fSkettenis      136,   140,   144,   148,   150,   152,   154,   156,   158,   163,
436*11efff7fSkettenis      165,   167,   169,   171,   173,   176,   178,   181,   183,   186,
437*11efff7fSkettenis      188,   192,   195,   197,   200,   204,   206,   208,   210,   212,
438*11efff7fSkettenis      214,   216,   218,   220,   222,   224,   226,   228,   230,   232,
439*11efff7fSkettenis      236
440b725ae77Skettenis };
441b725ae77Skettenis 
442*11efff7fSkettenis /* YYRHS -- A `-1'-separated list of the rules' RHS. */
443*11efff7fSkettenis static const yysigned_char yyrhs[] =
444*11efff7fSkettenis {
445*11efff7fSkettenis       56,     0,    -1,    58,    -1,    57,    -1,    64,    -1,    51,
446*11efff7fSkettenis       58,    52,    -1,    47,    58,    -1,    35,    58,    -1,    46,
447*11efff7fSkettenis       58,    -1,    25,    58,    -1,    53,    58,    -1,    10,    58,
448*11efff7fSkettenis       -1,    -1,    58,    51,    59,    60,    52,    -1,    -1,    58,
449*11efff7fSkettenis       -1,    61,    -1,    60,    29,    58,    -1,    58,    54,    58,
450*11efff7fSkettenis       -1,    58,    29,    58,    -1,    51,    62,    52,    -1,    51,
451*11efff7fSkettenis       64,    52,    58,    -1,    58,    44,    58,    -1,    58,    47,
452*11efff7fSkettenis       58,    -1,    58,    48,    58,    -1,    58,    49,    58,    -1,
453*11efff7fSkettenis       58,    45,    58,    -1,    58,    46,    58,    -1,    58,    43,
454*11efff7fSkettenis       58,    -1,    58,    42,    58,    -1,    58,    37,    58,    -1,
455*11efff7fSkettenis       58,    36,    58,    -1,    58,    39,    58,    -1,    58,    38,
456*11efff7fSkettenis       58,    -1,    58,    41,    58,    -1,    58,    40,    58,    -1,
457*11efff7fSkettenis       58,    35,    58,    -1,    58,    34,    58,    -1,    58,    33,
458*11efff7fSkettenis       58,    -1,    58,    23,    58,    -1,    58,    24,    58,    -1,
459*11efff7fSkettenis       58,    31,    58,    -1,    58,    28,    58,    -1,     3,    -1,
460*11efff7fSkettenis        9,    -1,     4,    -1,    63,    -1,    27,    -1,    10,    51,
461*11efff7fSkettenis       64,    52,    -1,     6,    -1,     5,    -1,    71,    -1,    65,
462*11efff7fSkettenis       -1,    69,    -1,    69,    66,    -1,    47,    -1,    47,    66,
463*11efff7fSkettenis       -1,    35,    -1,    35,    66,    -1,    67,    -1,    51,    66,
464*11efff7fSkettenis       52,    -1,    67,    68,    -1,    68,    -1,    51,    52,    -1,
465*11efff7fSkettenis       51,    70,    52,    -1,     8,    -1,    12,    -1,    13,    -1,
466*11efff7fSkettenis       26,    -1,    16,    -1,    15,    -1,    14,    -1,    17,    -1,
467*11efff7fSkettenis       18,    -1,    19,    -1,    20,    -1,    21,    -1,    22,    -1,
468*11efff7fSkettenis       64,    -1,    70,    29,    64,    -1,     7,    -1
469*11efff7fSkettenis };
470b725ae77Skettenis 
471b725ae77Skettenis /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
472*11efff7fSkettenis static const unsigned short yyrline[] =
473b725ae77Skettenis {
474*11efff7fSkettenis        0,   228,   228,   229,   232,   238,   243,   247,   251,   255,
475*11efff7fSkettenis      259,   263,   273,   272,   280,   283,   287,   291,   295,   300,
476*11efff7fSkettenis      304,   308,   316,   320,   324,   328,   332,   336,   340,   344,
477*11efff7fSkettenis      348,   352,   356,   360,   364,   368,   372,   376,   380,   384,
478*11efff7fSkettenis      389,   393,   397,   403,   410,   419,   426,   429,   432,   440,
479*11efff7fSkettenis      447,   455,   499,   502,   503,   546,   548,   550,   552,   554,
480*11efff7fSkettenis      557,   559,   561,   565,   567,   572,   574,   576,   578,   580,
481*11efff7fSkettenis      582,   584,   586,   588,   590,   592,   594,   596,   604,   609,
482*11efff7fSkettenis      624
483b725ae77Skettenis };
484b725ae77Skettenis #endif
485b725ae77Skettenis 
486*11efff7fSkettenis #if YYDEBUG || YYERROR_VERBOSE
487*11efff7fSkettenis /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
488*11efff7fSkettenis    First, the terminals, then, starting at YYNTOKENS, nonterminals. */
489b725ae77Skettenis static const char *const yytname[] =
490b725ae77Skettenis {
491*11efff7fSkettenis   "$end", "error", "$undefined", "INT", "FLOAT", "STRING_LITERAL",
492b725ae77Skettenis   "BOOLEAN_LITERAL", "NAME", "TYPENAME", "NAME_OR_INT", "SIZEOF", "ERROR",
493b725ae77Skettenis   "INT_KEYWORD", "INT_S2_KEYWORD", "LOGICAL_S1_KEYWORD",
494b725ae77Skettenis   "LOGICAL_S2_KEYWORD", "LOGICAL_KEYWORD", "REAL_KEYWORD",
495b725ae77Skettenis   "REAL_S8_KEYWORD", "REAL_S16_KEYWORD", "COMPLEX_S8_KEYWORD",
496b725ae77Skettenis   "COMPLEX_S16_KEYWORD", "COMPLEX_S32_KEYWORD", "BOOL_AND", "BOOL_OR",
497b725ae77Skettenis   "BOOL_NOT", "CHARACTER", "VARIABLE", "ASSIGN_MODIFY", "','",
498*11efff7fSkettenis   "ABOVE_COMMA", "'='", "'?'", "'|'", "'^'", "'&'", "NOTEQUAL", "EQUAL",
499*11efff7fSkettenis   "GEQ", "LEQ", "GREATERTHAN", "LESSTHAN", "RSH", "LSH", "'@'", "'+'",
500b725ae77Skettenis   "'-'", "'*'", "'/'", "'%'", "UNARY", "'('", "')'", "'~'", "':'",
501*11efff7fSkettenis   "$accept", "start", "type_exp", "exp", "@1", "arglist", "substring",
502*11efff7fSkettenis   "complexnum", "variable", "type", "ptype", "abs_decl", "direct_abs_decl",
503*11efff7fSkettenis   "func_mod", "typebase", "nonempty_typelist", "name_not_typename", 0
504*11efff7fSkettenis };
505*11efff7fSkettenis #endif
506*11efff7fSkettenis 
507*11efff7fSkettenis # ifdef YYPRINT
508*11efff7fSkettenis /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
509*11efff7fSkettenis    token YYLEX-NUM.  */
510*11efff7fSkettenis static const unsigned short yytoknum[] =
511*11efff7fSkettenis {
512*11efff7fSkettenis        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
513*11efff7fSkettenis      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
514*11efff7fSkettenis      275,   276,   277,   278,   279,   280,   281,   282,   283,    44,
515*11efff7fSkettenis      284,    61,    63,   124,    94,    38,   285,   286,   287,   288,
516*11efff7fSkettenis      289,   290,   291,   292,    64,    43,    45,    42,    47,    37,
517*11efff7fSkettenis      293,    40,    41,   126,    58
518b725ae77Skettenis };
519b725ae77Skettenis # endif
520b725ae77Skettenis 
521b725ae77Skettenis /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
522*11efff7fSkettenis static const unsigned char yyr1[] =
523b725ae77Skettenis {
524*11efff7fSkettenis        0,    55,    56,    56,    57,    58,    58,    58,    58,    58,
525*11efff7fSkettenis       58,    58,    59,    58,    60,    60,    60,    60,    61,    62,
526*11efff7fSkettenis       58,    58,    58,    58,    58,    58,    58,    58,    58,    58,
527*11efff7fSkettenis       58,    58,    58,    58,    58,    58,    58,    58,    58,    58,
528*11efff7fSkettenis       58,    58,    58,    58,    58,    58,    58,    58,    58,    58,
529*11efff7fSkettenis       58,    63,    64,    65,    65,    66,    66,    66,    66,    66,
530*11efff7fSkettenis       67,    67,    67,    68,    68,    69,    69,    69,    69,    69,
531*11efff7fSkettenis       69,    69,    69,    69,    69,    69,    69,    69,    70,    70,
532*11efff7fSkettenis       71
533b725ae77Skettenis };
534b725ae77Skettenis 
535b725ae77Skettenis /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
536*11efff7fSkettenis static const unsigned char yyr2[] =
537b725ae77Skettenis {
538*11efff7fSkettenis        0,     2,     1,     1,     1,     3,     2,     2,     2,     2,
539*11efff7fSkettenis        2,     2,     0,     5,     0,     1,     1,     3,     3,     3,
540*11efff7fSkettenis        3,     4,     3,     3,     3,     3,     3,     3,     3,     3,
541b725ae77Skettenis        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
542*11efff7fSkettenis        3,     3,     3,     1,     1,     1,     1,     1,     4,     1,
543*11efff7fSkettenis        1,     1,     1,     1,     2,     1,     2,     1,     2,     1,
544*11efff7fSkettenis        3,     2,     1,     2,     3,     1,     1,     1,     1,     1,
545b725ae77Skettenis        1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
546*11efff7fSkettenis        1
547b725ae77Skettenis };
548b725ae77Skettenis 
549*11efff7fSkettenis /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
550*11efff7fSkettenis    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
551*11efff7fSkettenis    means the default is an error.  */
552*11efff7fSkettenis static const unsigned char yydefact[] =
553b725ae77Skettenis {
554*11efff7fSkettenis        0,    43,    45,    50,    49,    80,    65,    44,     0,    66,
555*11efff7fSkettenis       67,    71,    70,    69,    72,    73,    74,    75,    76,    77,
556*11efff7fSkettenis        0,    68,    47,     0,     0,     0,     0,     0,     0,     3,
557*11efff7fSkettenis        2,    46,     4,    52,    53,    51,     0,    11,     9,     7,
558*11efff7fSkettenis        8,     6,     0,     0,     0,    10,     1,     0,     0,     0,
559b725ae77Skettenis        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
560*11efff7fSkettenis        0,     0,     0,     0,     0,     0,     0,     0,    12,    57,
561*11efff7fSkettenis       55,     0,    54,    59,    62,     0,     0,     5,    20,     0,
562*11efff7fSkettenis       39,    40,    42,    41,    38,    37,    36,    31,    30,    33,
563*11efff7fSkettenis       32,    35,    34,    29,    28,    22,    26,    27,    23,    24,
564*11efff7fSkettenis       25,    14,    58,    56,    63,    78,     0,     0,     0,    61,
565*11efff7fSkettenis       48,    19,    21,    15,     0,    16,    60,     0,    64,     0,
566*11efff7fSkettenis        0,    13,    79,    18,    17
567b725ae77Skettenis };
568b725ae77Skettenis 
569*11efff7fSkettenis /* YYDEFGOTO[NTERM-NUM]. */
570*11efff7fSkettenis static const yysigned_char yydefgoto[] =
571b725ae77Skettenis {
572*11efff7fSkettenis       -1,    28,    29,    42,   101,   114,   115,    43,    31,   105,
573*11efff7fSkettenis       33,    72,    73,    74,    34,   107,    35
574b725ae77Skettenis };
575b725ae77Skettenis 
576*11efff7fSkettenis /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
577*11efff7fSkettenis    STATE-NUM.  */
578*11efff7fSkettenis #define YYPACT_NINF -59
579b725ae77Skettenis static const short yypact[] =
580b725ae77Skettenis {
581*11efff7fSkettenis       77,   -59,   -59,   -59,   -59,   -59,   -59,   -59,   128,   -59,
582*11efff7fSkettenis      -59,   -59,   -59,   -59,   -59,   -59,   -59,   -59,   -59,   -59,
583*11efff7fSkettenis      137,   -59,   -59,   137,   137,   137,    77,   137,     2,   -59,
584*11efff7fSkettenis      311,   -59,   -59,   -59,   -34,   -59,    77,   -45,   -45,   -45,
585*11efff7fSkettenis      -45,   -45,   281,   -43,   -36,   -45,   -59,   137,   137,   137,
586*11efff7fSkettenis      137,   137,   137,   137,   137,   137,   137,   137,   137,   137,
587*11efff7fSkettenis      137,   137,   137,   137,   137,   137,   137,   137,   -59,   -34,
588*11efff7fSkettenis      -34,   208,   -59,   -44,   -59,   -33,   137,   -59,   -59,   137,
589*11efff7fSkettenis      357,   338,   311,   311,   392,   409,   163,   223,   223,   -10,
590*11efff7fSkettenis      -10,   -10,   -10,    24,    24,    60,   -37,   -37,   -45,   -45,
591*11efff7fSkettenis      -45,   137,   -59,   -59,   -59,   -59,   -31,   -26,   232,   -59,
592*11efff7fSkettenis      188,   311,   -45,   252,   -24,   -59,   -59,   399,   -59,   137,
593*11efff7fSkettenis      137,   -59,   -59,   311,   311
594b725ae77Skettenis };
595b725ae77Skettenis 
596*11efff7fSkettenis /* YYPGOTO[NTERM-NUM].  */
597*11efff7fSkettenis static const yysigned_char yypgoto[] =
598b725ae77Skettenis {
599*11efff7fSkettenis      -59,   -59,   -59,     0,   -59,   -59,   -59,   -59,   -59,     4,
600*11efff7fSkettenis      -59,   -27,   -59,   -58,   -59,   -59,   -59
601b725ae77Skettenis };
602b725ae77Skettenis 
603*11efff7fSkettenis /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
604*11efff7fSkettenis    positive, shift that token.  If negative, reduce the rule which
605*11efff7fSkettenis    number is the opposite.  If zero, do what YYDEFACT says.
606*11efff7fSkettenis    If YYTABLE_NINF, syntax error.  */
607*11efff7fSkettenis #define YYTABLE_NINF -1
608*11efff7fSkettenis static const unsigned char yytable[] =
609b725ae77Skettenis {
610*11efff7fSkettenis       30,    69,    46,   117,    32,   120,    68,   108,    37,    78,
611*11efff7fSkettenis       65,    66,    67,    70,    68,   109,    79,    71,     0,   110,
612*11efff7fSkettenis       38,   116,     0,    39,    40,    41,   118,    45,   121,     0,
613*11efff7fSkettenis       44,     0,    60,    61,    62,    63,    64,    65,    66,    67,
614*11efff7fSkettenis       75,    68,   102,   103,   106,     0,     0,    80,    81,    82,
615b725ae77Skettenis       83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
616*11efff7fSkettenis       93,    94,    95,    96,    97,    98,    99,   100,    62,    63,
617*11efff7fSkettenis       64,    65,    66,    67,     0,    68,   111,     0,     0,   112,
618*11efff7fSkettenis        1,     2,     3,     4,     5,     6,     7,     8,     0,     9,
619b725ae77Skettenis       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
620*11efff7fSkettenis        0,   113,    20,    21,    22,    63,    64,    65,    66,    67,
621*11efff7fSkettenis      112,    68,    23,     0,     0,     0,     0,     0,     0,   123,
622*11efff7fSkettenis      124,   122,     0,    24,    25,     0,     0,     0,    26,     0,
623*11efff7fSkettenis       27,     1,     2,     3,     4,     5,     0,     7,     8,     0,
624*11efff7fSkettenis        1,     2,     3,     4,     5,     0,     7,     8,     0,     0,
625*11efff7fSkettenis        0,     0,     0,    20,     0,    22,     0,     0,     0,     0,
626*11efff7fSkettenis        0,     0,    20,    23,    22,     0,     0,     0,     0,     0,
627*11efff7fSkettenis        0,     0,    23,     0,    24,    25,     0,     0,     0,    36,
628*11efff7fSkettenis        0,    27,     0,    24,    25,     0,     0,     0,    26,     0,
629*11efff7fSkettenis       27,     1,     2,     3,     4,     5,     0,     7,     8,    54,
630*11efff7fSkettenis       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
631*11efff7fSkettenis       65,    66,    67,    20,    68,    22,     6,     0,     0,     0,
632*11efff7fSkettenis        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
633*11efff7fSkettenis       19,     0,     0,     0,    21,     0,     0,     0,     0,    26,
634*11efff7fSkettenis        6,    27,     0,    69,     9,    10,    11,    12,    13,    14,
635*11efff7fSkettenis       15,    16,    17,    18,    19,    70,     0,     0,    21,    71,
636*11efff7fSkettenis      104,    56,    57,    58,    59,    60,    61,    62,    63,    64,
637*11efff7fSkettenis       65,    66,    67,     0,    68,    47,    48,     0,     0,     0,
638*11efff7fSkettenis       49,     0,     0,    50,   104,    51,    52,    53,    54,    55,
639b725ae77Skettenis       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
640*11efff7fSkettenis       66,    67,     0,    68,    47,    48,   119,     0,     0,    49,
641*11efff7fSkettenis       76,     0,    50,     0,    51,    52,    53,    54,    55,    56,
642*11efff7fSkettenis       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
643*11efff7fSkettenis       67,     0,    68,    77,    47,    48,     0,     0,     0,    49,
644*11efff7fSkettenis        0,     0,    50,     0,    51,    52,    53,    54,    55,    56,
645*11efff7fSkettenis       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
646*11efff7fSkettenis       67,    47,    68,     0,     0,     0,     0,     0,     0,     0,
647*11efff7fSkettenis        0,    51,    52,    53,    54,    55,    56,    57,    58,    59,
648*11efff7fSkettenis       60,    61,    62,    63,    64,    65,    66,    67,     0,    68,
649*11efff7fSkettenis       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
650*11efff7fSkettenis       61,    62,    63,    64,    65,    66,    67,     6,    68,     0,
651*11efff7fSkettenis        0,     9,    10,    11,    12,    13,    14,    15,    16,    17,
652*11efff7fSkettenis       18,    19,     0,     0,     0,    21,    52,    53,    54,    55,
653*11efff7fSkettenis       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
654*11efff7fSkettenis       66,    67,     0,    68,    53,    54,    55,    56,    57,    58,
655*11efff7fSkettenis       59,    60,    61,    62,    63,    64,    65,    66,    67,     0,
656*11efff7fSkettenis       68
657b725ae77Skettenis };
658b725ae77Skettenis 
659*11efff7fSkettenis static const yysigned_char yycheck[] =
660b725ae77Skettenis {
661*11efff7fSkettenis        0,    35,     0,    29,     0,    29,    51,    51,     8,    52,
662*11efff7fSkettenis       47,    48,    49,    47,    51,    73,    52,    51,    -1,    52,
663*11efff7fSkettenis       20,    52,    -1,    23,    24,    25,    52,    27,    52,    -1,
664*11efff7fSkettenis       26,    -1,    42,    43,    44,    45,    46,    47,    48,    49,
665*11efff7fSkettenis       36,    51,    69,    70,    71,    -1,    -1,    47,    48,    49,
666b725ae77Skettenis       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
667*11efff7fSkettenis       60,    61,    62,    63,    64,    65,    66,    67,    44,    45,
668*11efff7fSkettenis       46,    47,    48,    49,    -1,    51,    76,    -1,    -1,    79,
669*11efff7fSkettenis        3,     4,     5,     6,     7,     8,     9,    10,    -1,    12,
670b725ae77Skettenis       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
671*11efff7fSkettenis       -1,   101,    25,    26,    27,    45,    46,    47,    48,    49,
672*11efff7fSkettenis      110,    51,    35,    -1,    -1,    -1,    -1,    -1,    -1,   119,
673*11efff7fSkettenis      120,   117,    -1,    46,    47,    -1,    -1,    -1,    51,    -1,
674*11efff7fSkettenis       53,     3,     4,     5,     6,     7,    -1,     9,    10,    -1,
675*11efff7fSkettenis        3,     4,     5,     6,     7,    -1,     9,    10,    -1,    -1,
676*11efff7fSkettenis       -1,    -1,    -1,    25,    -1,    27,    -1,    -1,    -1,    -1,
677*11efff7fSkettenis       -1,    -1,    25,    35,    27,    -1,    -1,    -1,    -1,    -1,
678*11efff7fSkettenis       -1,    -1,    35,    -1,    46,    47,    -1,    -1,    -1,    51,
679*11efff7fSkettenis       -1,    53,    -1,    46,    47,    -1,    -1,    -1,    51,    -1,
680*11efff7fSkettenis       53,     3,     4,     5,     6,     7,    -1,     9,    10,    36,
681*11efff7fSkettenis       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
682*11efff7fSkettenis       47,    48,    49,    25,    51,    27,     8,    -1,    -1,    -1,
683*11efff7fSkettenis       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
684*11efff7fSkettenis       22,    -1,    -1,    -1,    26,    -1,    -1,    -1,    -1,    51,
685*11efff7fSkettenis        8,    53,    -1,    35,    12,    13,    14,    15,    16,    17,
686*11efff7fSkettenis       18,    19,    20,    21,    22,    47,    -1,    -1,    26,    51,
687*11efff7fSkettenis       52,    38,    39,    40,    41,    42,    43,    44,    45,    46,
688*11efff7fSkettenis       47,    48,    49,    -1,    51,    23,    24,    -1,    -1,    -1,
689*11efff7fSkettenis       28,    -1,    -1,    31,    52,    33,    34,    35,    36,    37,
690*11efff7fSkettenis       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
691*11efff7fSkettenis       48,    49,    -1,    51,    23,    24,    54,    -1,    -1,    28,
692*11efff7fSkettenis       29,    -1,    31,    -1,    33,    34,    35,    36,    37,    38,
693*11efff7fSkettenis       39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
694*11efff7fSkettenis       49,    -1,    51,    52,    23,    24,    -1,    -1,    -1,    28,
695*11efff7fSkettenis       -1,    -1,    31,    -1,    33,    34,    35,    36,    37,    38,
696*11efff7fSkettenis       39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
697*11efff7fSkettenis       49,    23,    51,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
698*11efff7fSkettenis       -1,    33,    34,    35,    36,    37,    38,    39,    40,    41,
699*11efff7fSkettenis       42,    43,    44,    45,    46,    47,    48,    49,    -1,    51,
700*11efff7fSkettenis       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
701*11efff7fSkettenis       43,    44,    45,    46,    47,    48,    49,     8,    51,    -1,
702*11efff7fSkettenis       -1,    12,    13,    14,    15,    16,    17,    18,    19,    20,
703*11efff7fSkettenis       21,    22,    -1,    -1,    -1,    26,    34,    35,    36,    37,
704*11efff7fSkettenis       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
705*11efff7fSkettenis       48,    49,    -1,    51,    35,    36,    37,    38,    39,    40,
706*11efff7fSkettenis       41,    42,    43,    44,    45,    46,    47,    48,    49,    -1,
707*11efff7fSkettenis       51
708b725ae77Skettenis };
709b725ae77Skettenis 
710*11efff7fSkettenis /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
711*11efff7fSkettenis    symbol of state STATE-NUM.  */
712*11efff7fSkettenis static const unsigned char yystos[] =
713b725ae77Skettenis {
714*11efff7fSkettenis        0,     3,     4,     5,     6,     7,     8,     9,    10,    12,
715*11efff7fSkettenis       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
716*11efff7fSkettenis       25,    26,    27,    35,    46,    47,    51,    53,    56,    57,
717*11efff7fSkettenis       58,    63,    64,    65,    69,    71,    51,    58,    58,    58,
718*11efff7fSkettenis       58,    58,    58,    62,    64,    58,     0,    23,    24,    28,
719*11efff7fSkettenis       31,    33,    34,    35,    36,    37,    38,    39,    40,    41,
720*11efff7fSkettenis       42,    43,    44,    45,    46,    47,    48,    49,    51,    35,
721*11efff7fSkettenis       47,    51,    66,    67,    68,    64,    29,    52,    52,    52,
722*11efff7fSkettenis       58,    58,    58,    58,    58,    58,    58,    58,    58,    58,
723*11efff7fSkettenis       58,    58,    58,    58,    58,    58,    58,    58,    58,    58,
724*11efff7fSkettenis       58,    59,    66,    66,    52,    64,    66,    70,    51,    68,
725*11efff7fSkettenis       52,    58,    58,    58,    60,    61,    52,    29,    52,    54,
726*11efff7fSkettenis       29,    52,    64,    58,    58
727b725ae77Skettenis };
728b725ae77Skettenis 
729b725ae77Skettenis #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
730b725ae77Skettenis # define YYSIZE_T __SIZE_TYPE__
731b725ae77Skettenis #endif
732b725ae77Skettenis #if ! defined (YYSIZE_T) && defined (size_t)
733b725ae77Skettenis # define YYSIZE_T size_t
734b725ae77Skettenis #endif
735b725ae77Skettenis #if ! defined (YYSIZE_T)
736b725ae77Skettenis # if defined (__STDC__) || defined (__cplusplus)
737b725ae77Skettenis #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
738b725ae77Skettenis #  define YYSIZE_T size_t
739b725ae77Skettenis # endif
740b725ae77Skettenis #endif
741b725ae77Skettenis #if ! defined (YYSIZE_T)
742b725ae77Skettenis # define YYSIZE_T unsigned int
743b725ae77Skettenis #endif
744b725ae77Skettenis 
745b725ae77Skettenis #define yyerrok		(yyerrstatus = 0)
746b725ae77Skettenis #define yyclearin	(yychar = YYEMPTY)
747*11efff7fSkettenis #define YYEMPTY		(-2)
748b725ae77Skettenis #define YYEOF		0
749*11efff7fSkettenis 
750b725ae77Skettenis #define YYACCEPT	goto yyacceptlab
751b725ae77Skettenis #define YYABORT		goto yyabortlab
752*11efff7fSkettenis #define YYERROR		goto yyerrorlab
753*11efff7fSkettenis 
754*11efff7fSkettenis 
755b725ae77Skettenis /* Like YYERROR except do call yyerror.  This remains here temporarily
756b725ae77Skettenis    to ease the transition to the new meaning of YYERROR, for GCC.
757b725ae77Skettenis    Once GCC version 2 has supplanted version 1, this can go.  */
758*11efff7fSkettenis 
759b725ae77Skettenis #define YYFAIL		goto yyerrlab
760*11efff7fSkettenis 
761b725ae77Skettenis #define YYRECOVERING()  (!!yyerrstatus)
762*11efff7fSkettenis 
763b725ae77Skettenis #define YYBACKUP(Token, Value)					\
764b725ae77Skettenis do								\
765b725ae77Skettenis   if (yychar == YYEMPTY && yylen == 1)				\
766b725ae77Skettenis     {								\
767b725ae77Skettenis       yychar = (Token);						\
768b725ae77Skettenis       yylval = (Value);						\
769*11efff7fSkettenis       yytoken = YYTRANSLATE (yychar);				\
770b725ae77Skettenis       YYPOPSTACK;						\
771b725ae77Skettenis       goto yybackup;						\
772b725ae77Skettenis     }								\
773b725ae77Skettenis   else								\
774b725ae77Skettenis     { 								\
775b725ae77Skettenis       yyerror ("syntax error: cannot back up");\
776b725ae77Skettenis       YYERROR;							\
777b725ae77Skettenis     }								\
778b725ae77Skettenis while (0)
779b725ae77Skettenis 
780b725ae77Skettenis #define YYTERROR	1
781b725ae77Skettenis #define YYERRCODE	256
782b725ae77Skettenis 
783b725ae77Skettenis /* YYLLOC_DEFAULT -- Compute the default location (before the actions
784*11efff7fSkettenis    are run).  */
785b725ae77Skettenis 
786b725ae77Skettenis #ifndef YYLLOC_DEFAULT
787b725ae77Skettenis # define YYLLOC_DEFAULT(Current, Rhs, N)		\
788*11efff7fSkettenis    ((Current).first_line   = (Rhs)[1].first_line,	\
789*11efff7fSkettenis     (Current).first_column = (Rhs)[1].first_column,	\
790*11efff7fSkettenis     (Current).last_line    = (Rhs)[N].last_line,	\
791*11efff7fSkettenis     (Current).last_column  = (Rhs)[N].last_column)
792b725ae77Skettenis #endif
793b725ae77Skettenis 
794b725ae77Skettenis /* YYLEX -- calling `yylex' with the right arguments.  */
795b725ae77Skettenis 
796b725ae77Skettenis #ifdef YYLEX_PARAM
797*11efff7fSkettenis # define YYLEX yylex (YYLEX_PARAM)
798b725ae77Skettenis #else
799b725ae77Skettenis # define YYLEX yylex ()
800*11efff7fSkettenis #endif
801b725ae77Skettenis 
802b725ae77Skettenis /* Enable debugging if requested.  */
803b725ae77Skettenis #if YYDEBUG
804b725ae77Skettenis 
805b725ae77Skettenis # ifndef YYFPRINTF
806b725ae77Skettenis #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
807b725ae77Skettenis #  define YYFPRINTF fprintf
808b725ae77Skettenis # endif
809b725ae77Skettenis 
810b725ae77Skettenis # define YYDPRINTF(Args)			\
811b725ae77Skettenis do {						\
812b725ae77Skettenis   if (yydebug)					\
813b725ae77Skettenis     YYFPRINTF Args;				\
814b725ae77Skettenis } while (0)
815*11efff7fSkettenis 
816*11efff7fSkettenis # define YYDSYMPRINT(Args)			\
817*11efff7fSkettenis do {						\
818*11efff7fSkettenis   if (yydebug)					\
819*11efff7fSkettenis     yysymprint Args;				\
820*11efff7fSkettenis } while (0)
821*11efff7fSkettenis 
822*11efff7fSkettenis # define YYDSYMPRINTF(Title, Token, Value, Location)		\
823*11efff7fSkettenis do {								\
824*11efff7fSkettenis   if (yydebug)							\
825*11efff7fSkettenis     {								\
826*11efff7fSkettenis       YYFPRINTF (stderr, "%s ", Title);				\
827*11efff7fSkettenis       yysymprint (stderr, 					\
828*11efff7fSkettenis                   Token, Value);	\
829*11efff7fSkettenis       YYFPRINTF (stderr, "\n");					\
830*11efff7fSkettenis     }								\
831*11efff7fSkettenis } while (0)
832*11efff7fSkettenis 
833*11efff7fSkettenis /*------------------------------------------------------------------.
834*11efff7fSkettenis | yy_stack_print -- Print the state stack from its BOTTOM up to its |
835*11efff7fSkettenis | TOP (included).                                                   |
836*11efff7fSkettenis `------------------------------------------------------------------*/
837*11efff7fSkettenis 
838*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
839*11efff7fSkettenis static void
yy_stack_print(short * bottom,short * top)840*11efff7fSkettenis yy_stack_print (short *bottom, short *top)
841*11efff7fSkettenis #else
842*11efff7fSkettenis static void
843*11efff7fSkettenis yy_stack_print (bottom, top)
844*11efff7fSkettenis     short *bottom;
845*11efff7fSkettenis     short *top;
846*11efff7fSkettenis #endif
847*11efff7fSkettenis {
848*11efff7fSkettenis   YYFPRINTF (stderr, "Stack now");
849*11efff7fSkettenis   for (/* Nothing. */; bottom <= top; ++bottom)
850*11efff7fSkettenis     YYFPRINTF (stderr, " %d", *bottom);
851*11efff7fSkettenis   YYFPRINTF (stderr, "\n");
852*11efff7fSkettenis }
853*11efff7fSkettenis 
854*11efff7fSkettenis # define YY_STACK_PRINT(Bottom, Top)				\
855*11efff7fSkettenis do {								\
856*11efff7fSkettenis   if (yydebug)							\
857*11efff7fSkettenis     yy_stack_print ((Bottom), (Top));				\
858*11efff7fSkettenis } while (0)
859*11efff7fSkettenis 
860*11efff7fSkettenis 
861*11efff7fSkettenis /*------------------------------------------------.
862*11efff7fSkettenis | Report that the YYRULE is going to be reduced.  |
863*11efff7fSkettenis `------------------------------------------------*/
864*11efff7fSkettenis 
865*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
866*11efff7fSkettenis static void
yy_reduce_print(int yyrule)867*11efff7fSkettenis yy_reduce_print (int yyrule)
868*11efff7fSkettenis #else
869*11efff7fSkettenis static void
870*11efff7fSkettenis yy_reduce_print (yyrule)
871*11efff7fSkettenis     int yyrule;
872*11efff7fSkettenis #endif
873*11efff7fSkettenis {
874*11efff7fSkettenis   int yyi;
875*11efff7fSkettenis   unsigned int yylno = yyrline[yyrule];
876*11efff7fSkettenis   YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
877*11efff7fSkettenis              yyrule - 1, yylno);
878*11efff7fSkettenis   /* Print the symbols being reduced, and their result.  */
879*11efff7fSkettenis   for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
880*11efff7fSkettenis     YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
881*11efff7fSkettenis   YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
882*11efff7fSkettenis }
883*11efff7fSkettenis 
884*11efff7fSkettenis # define YY_REDUCE_PRINT(Rule)		\
885*11efff7fSkettenis do {					\
886*11efff7fSkettenis   if (yydebug)				\
887*11efff7fSkettenis     yy_reduce_print (Rule);		\
888*11efff7fSkettenis } while (0)
889*11efff7fSkettenis 
890b725ae77Skettenis /* Nonzero means print parse trace.  It is left uninitialized so that
891b725ae77Skettenis    multiple parsers can coexist.  */
892b725ae77Skettenis int yydebug;
893b725ae77Skettenis #else /* !YYDEBUG */
894b725ae77Skettenis # define YYDPRINTF(Args)
895*11efff7fSkettenis # define YYDSYMPRINT(Args)
896*11efff7fSkettenis # define YYDSYMPRINTF(Title, Token, Value, Location)
897*11efff7fSkettenis # define YY_STACK_PRINT(Bottom, Top)
898*11efff7fSkettenis # define YY_REDUCE_PRINT(Rule)
899b725ae77Skettenis #endif /* !YYDEBUG */
900b725ae77Skettenis 
901*11efff7fSkettenis 
902b725ae77Skettenis /* YYINITDEPTH -- initial size of the parser's stacks.  */
903b725ae77Skettenis #ifndef	YYINITDEPTH
904b725ae77Skettenis # define YYINITDEPTH 200
905b725ae77Skettenis #endif
906b725ae77Skettenis 
907b725ae77Skettenis /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
908b725ae77Skettenis    if the built-in stack extension method is used).
909b725ae77Skettenis 
910b725ae77Skettenis    Do not make this value too large; the results are undefined if
911b725ae77Skettenis    SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
912b725ae77Skettenis    evaluated with infinite-precision integer arithmetic.  */
913b725ae77Skettenis 
914*11efff7fSkettenis #if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
915b725ae77Skettenis # undef YYMAXDEPTH
916b725ae77Skettenis #endif
917b725ae77Skettenis 
918b725ae77Skettenis #ifndef YYMAXDEPTH
919b725ae77Skettenis # define YYMAXDEPTH 10000
920b725ae77Skettenis #endif
921*11efff7fSkettenis 
922b725ae77Skettenis 
923*11efff7fSkettenis 
924*11efff7fSkettenis #if YYERROR_VERBOSE
925b725ae77Skettenis 
926b725ae77Skettenis # ifndef yystrlen
927b725ae77Skettenis #  if defined (__GLIBC__) && defined (_STRING_H)
928b725ae77Skettenis #   define yystrlen strlen
929b725ae77Skettenis #  else
930b725ae77Skettenis /* Return the length of YYSTR.  */
931b725ae77Skettenis static YYSIZE_T
932b725ae77Skettenis #   if defined (__STDC__) || defined (__cplusplus)
yystrlen(const char * yystr)933b725ae77Skettenis yystrlen (const char *yystr)
934b725ae77Skettenis #   else
935b725ae77Skettenis yystrlen (yystr)
936b725ae77Skettenis      const char *yystr;
937b725ae77Skettenis #   endif
938b725ae77Skettenis {
939b725ae77Skettenis   register const char *yys = yystr;
940b725ae77Skettenis 
941b725ae77Skettenis   while (*yys++ != '\0')
942b725ae77Skettenis     continue;
943b725ae77Skettenis 
944b725ae77Skettenis   return yys - yystr - 1;
945b725ae77Skettenis }
946b725ae77Skettenis #  endif
947b725ae77Skettenis # endif
948b725ae77Skettenis 
949b725ae77Skettenis # ifndef yystpcpy
950b725ae77Skettenis #  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
951b725ae77Skettenis #   define yystpcpy stpcpy
952b725ae77Skettenis #  else
953b725ae77Skettenis /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
954b725ae77Skettenis    YYDEST.  */
955b725ae77Skettenis static char *
956b725ae77Skettenis #   if defined (__STDC__) || defined (__cplusplus)
yystpcpy(char * yydest,const char * yysrc)957b725ae77Skettenis yystpcpy (char *yydest, const char *yysrc)
958b725ae77Skettenis #   else
959b725ae77Skettenis yystpcpy (yydest, yysrc)
960b725ae77Skettenis      char *yydest;
961b725ae77Skettenis      const char *yysrc;
962b725ae77Skettenis #   endif
963b725ae77Skettenis {
964b725ae77Skettenis   register char *yyd = yydest;
965b725ae77Skettenis   register const char *yys = yysrc;
966b725ae77Skettenis 
967b725ae77Skettenis   while ((*yyd++ = *yys++) != '\0')
968b725ae77Skettenis     continue;
969b725ae77Skettenis 
970b725ae77Skettenis   return yyd - 1;
971b725ae77Skettenis }
972b725ae77Skettenis #  endif
973b725ae77Skettenis # endif
974*11efff7fSkettenis 
975*11efff7fSkettenis #endif /* !YYERROR_VERBOSE */
976*11efff7fSkettenis 
977b725ae77Skettenis 
978b725ae77Skettenis 
979*11efff7fSkettenis #if YYDEBUG
980*11efff7fSkettenis /*--------------------------------.
981*11efff7fSkettenis | Print this symbol on YYOUTPUT.  |
982*11efff7fSkettenis `--------------------------------*/
983b725ae77Skettenis 
984*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
985*11efff7fSkettenis static void
yysymprint(FILE * yyoutput,int yytype,YYSTYPE * yyvaluep)986*11efff7fSkettenis yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
987*11efff7fSkettenis #else
988*11efff7fSkettenis static void
989*11efff7fSkettenis yysymprint (yyoutput, yytype, yyvaluep)
990*11efff7fSkettenis     FILE *yyoutput;
991*11efff7fSkettenis     int yytype;
992*11efff7fSkettenis     YYSTYPE *yyvaluep;
993*11efff7fSkettenis #endif
994*11efff7fSkettenis {
995*11efff7fSkettenis   /* Pacify ``unused variable'' warnings.  */
996*11efff7fSkettenis   (void) yyvaluep;
997*11efff7fSkettenis 
998*11efff7fSkettenis   if (yytype < YYNTOKENS)
999*11efff7fSkettenis     {
1000*11efff7fSkettenis       YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
1001*11efff7fSkettenis # ifdef YYPRINT
1002*11efff7fSkettenis       YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
1003*11efff7fSkettenis # endif
1004*11efff7fSkettenis     }
1005*11efff7fSkettenis   else
1006*11efff7fSkettenis     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
1007*11efff7fSkettenis 
1008*11efff7fSkettenis   switch (yytype)
1009*11efff7fSkettenis     {
1010*11efff7fSkettenis       default:
1011*11efff7fSkettenis         break;
1012*11efff7fSkettenis     }
1013*11efff7fSkettenis   YYFPRINTF (yyoutput, ")");
1014*11efff7fSkettenis }
1015*11efff7fSkettenis 
1016*11efff7fSkettenis #endif /* ! YYDEBUG */
1017*11efff7fSkettenis /*-----------------------------------------------.
1018*11efff7fSkettenis | Release the memory associated to this symbol.  |
1019*11efff7fSkettenis `-----------------------------------------------*/
1020*11efff7fSkettenis 
1021*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
1022*11efff7fSkettenis static void
yydestruct(int yytype,YYSTYPE * yyvaluep)1023*11efff7fSkettenis yydestruct (int yytype, YYSTYPE *yyvaluep)
1024*11efff7fSkettenis #else
1025*11efff7fSkettenis static void
1026*11efff7fSkettenis yydestruct (yytype, yyvaluep)
1027*11efff7fSkettenis     int yytype;
1028*11efff7fSkettenis     YYSTYPE *yyvaluep;
1029*11efff7fSkettenis #endif
1030*11efff7fSkettenis {
1031*11efff7fSkettenis   /* Pacify ``unused variable'' warnings.  */
1032*11efff7fSkettenis   (void) yyvaluep;
1033*11efff7fSkettenis 
1034*11efff7fSkettenis   switch (yytype)
1035*11efff7fSkettenis     {
1036*11efff7fSkettenis 
1037*11efff7fSkettenis       default:
1038*11efff7fSkettenis         break;
1039*11efff7fSkettenis     }
1040*11efff7fSkettenis }
1041*11efff7fSkettenis 
1042*11efff7fSkettenis 
1043*11efff7fSkettenis /* Prevent warnings from -Wmissing-prototypes.  */
1044b725ae77Skettenis 
1045b725ae77Skettenis #ifdef YYPARSE_PARAM
1046b725ae77Skettenis # if defined (__STDC__) || defined (__cplusplus)
1047*11efff7fSkettenis int yyparse (void *YYPARSE_PARAM);
1048b725ae77Skettenis # else
1049*11efff7fSkettenis int yyparse ();
1050b725ae77Skettenis # endif
1051b725ae77Skettenis #else /* ! YYPARSE_PARAM */
1052*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
1053*11efff7fSkettenis int yyparse (void);
1054*11efff7fSkettenis #else
1055*11efff7fSkettenis int yyparse ();
1056*11efff7fSkettenis #endif
1057b725ae77Skettenis #endif /* ! YYPARSE_PARAM */
1058b725ae77Skettenis 
1059b725ae77Skettenis 
1060b725ae77Skettenis 
1061*11efff7fSkettenis /* The lookahead symbol.  */
1062*11efff7fSkettenis int yychar;
1063*11efff7fSkettenis 
1064*11efff7fSkettenis /* The semantic value of the lookahead symbol.  */
1065*11efff7fSkettenis YYSTYPE yylval;
1066*11efff7fSkettenis 
1067*11efff7fSkettenis /* Number of syntax errors so far.  */
1068b725ae77Skettenis int yynerrs;
1069b725ae77Skettenis 
1070*11efff7fSkettenis 
1071*11efff7fSkettenis 
1072*11efff7fSkettenis /*----------.
1073*11efff7fSkettenis | yyparse.  |
1074*11efff7fSkettenis `----------*/
1075*11efff7fSkettenis 
1076*11efff7fSkettenis #ifdef YYPARSE_PARAM
1077*11efff7fSkettenis # if defined (__STDC__) || defined (__cplusplus)
yyparse(void * YYPARSE_PARAM)1078*11efff7fSkettenis int yyparse (void *YYPARSE_PARAM)
1079b725ae77Skettenis # else
1080*11efff7fSkettenis int yyparse (YYPARSE_PARAM)
1081*11efff7fSkettenis   void *YYPARSE_PARAM;
1082b725ae77Skettenis # endif
1083*11efff7fSkettenis #else /* ! YYPARSE_PARAM */
1084*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
1085b725ae77Skettenis int
1086*11efff7fSkettenis yyparse (void)
1087*11efff7fSkettenis #else
1088*11efff7fSkettenis int
1089*11efff7fSkettenis yyparse ()
1090*11efff7fSkettenis 
1091*11efff7fSkettenis #endif
1092*11efff7fSkettenis #endif
1093b725ae77Skettenis {
1094b725ae77Skettenis 
1095b725ae77Skettenis   register int yystate;
1096b725ae77Skettenis   register int yyn;
1097b725ae77Skettenis   int yyresult;
1098b725ae77Skettenis   /* Number of tokens to shift before error messages enabled.  */
1099b725ae77Skettenis   int yyerrstatus;
1100b725ae77Skettenis   /* Lookahead token as an internal (translated) token number.  */
1101*11efff7fSkettenis   int yytoken = 0;
1102b725ae77Skettenis 
1103b725ae77Skettenis   /* Three stacks and their tools:
1104b725ae77Skettenis      `yyss': related to states,
1105b725ae77Skettenis      `yyvs': related to semantic values,
1106b725ae77Skettenis      `yyls': related to locations.
1107b725ae77Skettenis 
1108b725ae77Skettenis      Refer to the stacks thru separate pointers, to allow yyoverflow
1109b725ae77Skettenis      to xreallocate them elsewhere.  */
1110b725ae77Skettenis 
1111b725ae77Skettenis   /* The state stack.  */
1112b725ae77Skettenis   short	yyssa[YYINITDEPTH];
1113b725ae77Skettenis   short *yyss = yyssa;
1114b725ae77Skettenis   register short *yyssp;
1115b725ae77Skettenis 
1116b725ae77Skettenis   /* The semantic value stack.  */
1117b725ae77Skettenis   YYSTYPE yyvsa[YYINITDEPTH];
1118b725ae77Skettenis   YYSTYPE *yyvs = yyvsa;
1119b725ae77Skettenis   register YYSTYPE *yyvsp;
1120b725ae77Skettenis 
1121b725ae77Skettenis 
1122*11efff7fSkettenis 
1123b725ae77Skettenis #define YYPOPSTACK   (yyvsp--, yyssp--)
1124b725ae77Skettenis 
1125b725ae77Skettenis   YYSIZE_T yystacksize = YYINITDEPTH;
1126b725ae77Skettenis 
1127b725ae77Skettenis   /* The variables used to return semantic value and location from the
1128b725ae77Skettenis      action routines.  */
1129b725ae77Skettenis   YYSTYPE yyval;
1130*11efff7fSkettenis 
1131b725ae77Skettenis 
1132b725ae77Skettenis   /* When reducing, the number of symbols on the RHS of the reduced
1133b725ae77Skettenis      rule.  */
1134b725ae77Skettenis   int yylen;
1135b725ae77Skettenis 
1136b725ae77Skettenis   YYDPRINTF ((stderr, "Starting parse\n"));
1137b725ae77Skettenis 
1138b725ae77Skettenis   yystate = 0;
1139b725ae77Skettenis   yyerrstatus = 0;
1140b725ae77Skettenis   yynerrs = 0;
1141b725ae77Skettenis   yychar = YYEMPTY;		/* Cause a token to be read.  */
1142b725ae77Skettenis 
1143b725ae77Skettenis   /* Initialize stack pointers.
1144b725ae77Skettenis      Waste one element of value and location stack
1145b725ae77Skettenis      so that they stay on the same level as the state stack.
1146b725ae77Skettenis      The wasted elements are never initialized.  */
1147b725ae77Skettenis 
1148b725ae77Skettenis   yyssp = yyss;
1149b725ae77Skettenis   yyvsp = yyvs;
1150*11efff7fSkettenis 
1151b725ae77Skettenis   goto yysetstate;
1152b725ae77Skettenis 
1153b725ae77Skettenis /*------------------------------------------------------------.
1154b725ae77Skettenis | yynewstate -- Push a new state, which is found in yystate.  |
1155b725ae77Skettenis `------------------------------------------------------------*/
1156b725ae77Skettenis  yynewstate:
1157b725ae77Skettenis   /* In all cases, when you get here, the value and location stacks
1158b725ae77Skettenis      have just been pushed. so pushing a state here evens the stacks.
1159b725ae77Skettenis      */
1160b725ae77Skettenis   yyssp++;
1161b725ae77Skettenis 
1162b725ae77Skettenis  yysetstate:
1163b725ae77Skettenis   *yyssp = yystate;
1164b725ae77Skettenis 
1165*11efff7fSkettenis   if (yyss + yystacksize - 1 <= yyssp)
1166b725ae77Skettenis     {
1167b725ae77Skettenis       /* Get the current used size of the three stacks, in elements.  */
1168b725ae77Skettenis       YYSIZE_T yysize = yyssp - yyss + 1;
1169b725ae77Skettenis 
1170b725ae77Skettenis #ifdef yyoverflow
1171b725ae77Skettenis       {
1172b725ae77Skettenis 	/* Give user a chance to xreallocate the stack. Use copies of
1173b725ae77Skettenis 	   these so that the &'s don't force the real ones into
1174b725ae77Skettenis 	   memory.  */
1175b725ae77Skettenis 	YYSTYPE *yyvs1 = yyvs;
1176b725ae77Skettenis 	short *yyss1 = yyss;
1177b725ae77Skettenis 
1178*11efff7fSkettenis 
1179b725ae77Skettenis 	/* Each stack pointer address is followed by the size of the
1180*11efff7fSkettenis 	   data in use in that stack, in bytes.  This used to be a
1181*11efff7fSkettenis 	   conditional around just the two extra args, but that might
1182*11efff7fSkettenis 	   be undefined if yyoverflow is a macro.  */
1183b725ae77Skettenis 	yyoverflow ("parser stack overflow",
1184b725ae77Skettenis 		    &yyss1, yysize * sizeof (*yyssp),
1185b725ae77Skettenis 		    &yyvs1, yysize * sizeof (*yyvsp),
1186*11efff7fSkettenis 
1187b725ae77Skettenis 		    &yystacksize);
1188*11efff7fSkettenis 
1189b725ae77Skettenis 	yyss = yyss1;
1190b725ae77Skettenis 	yyvs = yyvs1;
1191b725ae77Skettenis       }
1192b725ae77Skettenis #else /* no yyoverflow */
1193b725ae77Skettenis # ifndef YYSTACK_RELOCATE
1194b725ae77Skettenis       goto yyoverflowlab;
1195b725ae77Skettenis # else
1196b725ae77Skettenis       /* Extend the stack our own way.  */
1197*11efff7fSkettenis       if (YYMAXDEPTH <= yystacksize)
1198b725ae77Skettenis 	goto yyoverflowlab;
1199b725ae77Skettenis       yystacksize *= 2;
1200*11efff7fSkettenis       if (YYMAXDEPTH < yystacksize)
1201b725ae77Skettenis 	yystacksize = YYMAXDEPTH;
1202b725ae77Skettenis 
1203b725ae77Skettenis       {
1204b725ae77Skettenis 	short *yyss1 = yyss;
1205b725ae77Skettenis 	union yyalloc *yyptr =
1206b725ae77Skettenis 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1207b725ae77Skettenis 	if (! yyptr)
1208b725ae77Skettenis 	  goto yyoverflowlab;
1209b725ae77Skettenis 	YYSTACK_RELOCATE (yyss);
1210b725ae77Skettenis 	YYSTACK_RELOCATE (yyvs);
1211*11efff7fSkettenis 
1212b725ae77Skettenis #  undef YYSTACK_RELOCATE
1213b725ae77Skettenis 	if (yyss1 != yyssa)
1214b725ae77Skettenis 	  YYSTACK_FREE (yyss1);
1215b725ae77Skettenis       }
1216b725ae77Skettenis # endif
1217b725ae77Skettenis #endif /* no yyoverflow */
1218b725ae77Skettenis 
1219b725ae77Skettenis       yyssp = yyss + yysize - 1;
1220b725ae77Skettenis       yyvsp = yyvs + yysize - 1;
1221*11efff7fSkettenis 
1222b725ae77Skettenis 
1223b725ae77Skettenis       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1224b725ae77Skettenis 		  (unsigned long int) yystacksize));
1225b725ae77Skettenis 
1226*11efff7fSkettenis       if (yyss + yystacksize - 1 <= yyssp)
1227b725ae77Skettenis 	YYABORT;
1228b725ae77Skettenis     }
1229b725ae77Skettenis 
1230b725ae77Skettenis   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1231b725ae77Skettenis 
1232b725ae77Skettenis   goto yybackup;
1233b725ae77Skettenis 
1234b725ae77Skettenis /*-----------.
1235b725ae77Skettenis | yybackup.  |
1236b725ae77Skettenis `-----------*/
1237b725ae77Skettenis yybackup:
1238b725ae77Skettenis 
1239b725ae77Skettenis /* Do appropriate processing given the current state.  */
1240b725ae77Skettenis /* Read a lookahead token if we need one and don't already have one.  */
1241b725ae77Skettenis /* yyresume: */
1242b725ae77Skettenis 
1243b725ae77Skettenis   /* First try to decide what to do without reference to lookahead token.  */
1244b725ae77Skettenis 
1245b725ae77Skettenis   yyn = yypact[yystate];
1246*11efff7fSkettenis   if (yyn == YYPACT_NINF)
1247b725ae77Skettenis     goto yydefault;
1248b725ae77Skettenis 
1249b725ae77Skettenis   /* Not known => get a lookahead token if don't already have one.  */
1250b725ae77Skettenis 
1251*11efff7fSkettenis   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
1252b725ae77Skettenis   if (yychar == YYEMPTY)
1253b725ae77Skettenis     {
1254b725ae77Skettenis       YYDPRINTF ((stderr, "Reading a token: "));
1255b725ae77Skettenis       yychar = YYLEX;
1256b725ae77Skettenis     }
1257b725ae77Skettenis 
1258*11efff7fSkettenis   if (yychar <= YYEOF)
1259b725ae77Skettenis     {
1260*11efff7fSkettenis       yychar = yytoken = YYEOF;
1261b725ae77Skettenis       YYDPRINTF ((stderr, "Now at end of input.\n"));
1262b725ae77Skettenis     }
1263b725ae77Skettenis   else
1264b725ae77Skettenis     {
1265*11efff7fSkettenis       yytoken = YYTRANSLATE (yychar);
1266*11efff7fSkettenis       YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
1267b725ae77Skettenis     }
1268b725ae77Skettenis 
1269*11efff7fSkettenis   /* If the proper action on seeing token YYTOKEN is to reduce or to
1270*11efff7fSkettenis      detect an error, take that action.  */
1271*11efff7fSkettenis   yyn += yytoken;
1272*11efff7fSkettenis   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1273b725ae77Skettenis     goto yydefault;
1274b725ae77Skettenis   yyn = yytable[yyn];
1275*11efff7fSkettenis   if (yyn <= 0)
1276b725ae77Skettenis     {
1277*11efff7fSkettenis       if (yyn == 0 || yyn == YYTABLE_NINF)
1278b725ae77Skettenis 	goto yyerrlab;
1279b725ae77Skettenis       yyn = -yyn;
1280b725ae77Skettenis       goto yyreduce;
1281b725ae77Skettenis     }
1282b725ae77Skettenis 
1283b725ae77Skettenis   if (yyn == YYFINAL)
1284b725ae77Skettenis     YYACCEPT;
1285b725ae77Skettenis 
1286b725ae77Skettenis   /* Shift the lookahead token.  */
1287*11efff7fSkettenis   YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
1288b725ae77Skettenis 
1289b725ae77Skettenis   /* Discard the token being shifted unless it is eof.  */
1290b725ae77Skettenis   if (yychar != YYEOF)
1291b725ae77Skettenis     yychar = YYEMPTY;
1292b725ae77Skettenis 
1293b725ae77Skettenis   *++yyvsp = yylval;
1294*11efff7fSkettenis 
1295b725ae77Skettenis 
1296b725ae77Skettenis   /* Count tokens shifted since error; after three, turn off error
1297b725ae77Skettenis      status.  */
1298b725ae77Skettenis   if (yyerrstatus)
1299b725ae77Skettenis     yyerrstatus--;
1300b725ae77Skettenis 
1301b725ae77Skettenis   yystate = yyn;
1302b725ae77Skettenis   goto yynewstate;
1303b725ae77Skettenis 
1304b725ae77Skettenis 
1305b725ae77Skettenis /*-----------------------------------------------------------.
1306b725ae77Skettenis | yydefault -- do the default action for the current state.  |
1307b725ae77Skettenis `-----------------------------------------------------------*/
1308b725ae77Skettenis yydefault:
1309b725ae77Skettenis   yyn = yydefact[yystate];
1310b725ae77Skettenis   if (yyn == 0)
1311b725ae77Skettenis     goto yyerrlab;
1312b725ae77Skettenis   goto yyreduce;
1313b725ae77Skettenis 
1314b725ae77Skettenis 
1315b725ae77Skettenis /*-----------------------------.
1316b725ae77Skettenis | yyreduce -- Do a reduction.  |
1317b725ae77Skettenis `-----------------------------*/
1318b725ae77Skettenis yyreduce:
1319b725ae77Skettenis   /* yyn is the number of a rule to reduce with.  */
1320b725ae77Skettenis   yylen = yyr2[yyn];
1321b725ae77Skettenis 
1322b725ae77Skettenis   /* If YYLEN is nonzero, implement the default value of the action:
1323b725ae77Skettenis      `$$ = $1'.
1324b725ae77Skettenis 
1325*11efff7fSkettenis      Otherwise, the following line sets YYVAL to garbage.
1326*11efff7fSkettenis      This behavior is undocumented and Bison
1327b725ae77Skettenis      users should not rely upon it.  Assigning to YYVAL
1328b725ae77Skettenis      unconditionally makes the parser a bit smaller, and it avoids a
1329b725ae77Skettenis      GCC warning that YYVAL may be used uninitialized.  */
1330b725ae77Skettenis   yyval = yyvsp[1-yylen];
1331b725ae77Skettenis 
1332b725ae77Skettenis 
1333*11efff7fSkettenis   YY_REDUCE_PRINT (yyn);
1334*11efff7fSkettenis   switch (yyn)
1335b725ae77Skettenis     {
1336*11efff7fSkettenis         case 4:
1337b725ae77Skettenis #line 233 "f-exp.y"
1338b725ae77Skettenis     { write_exp_elt_opcode(OP_TYPE);
1339b725ae77Skettenis 			  write_exp_elt_type(yyvsp[0].tval);
1340b725ae77Skettenis 			  write_exp_elt_opcode(OP_TYPE); }
1341b725ae77Skettenis     break;
1342*11efff7fSkettenis 
1343*11efff7fSkettenis   case 5:
1344b725ae77Skettenis #line 239 "f-exp.y"
1345b725ae77Skettenis     { }
1346b725ae77Skettenis     break;
1347*11efff7fSkettenis 
1348*11efff7fSkettenis   case 6:
1349b725ae77Skettenis #line 244 "f-exp.y"
1350b725ae77Skettenis     { write_exp_elt_opcode (UNOP_IND); }
1351b725ae77Skettenis     break;
1352*11efff7fSkettenis 
1353*11efff7fSkettenis   case 7:
1354b725ae77Skettenis #line 248 "f-exp.y"
1355b725ae77Skettenis     { write_exp_elt_opcode (UNOP_ADDR); }
1356b725ae77Skettenis     break;
1357*11efff7fSkettenis 
1358*11efff7fSkettenis   case 8:
1359b725ae77Skettenis #line 252 "f-exp.y"
1360b725ae77Skettenis     { write_exp_elt_opcode (UNOP_NEG); }
1361b725ae77Skettenis     break;
1362*11efff7fSkettenis 
1363*11efff7fSkettenis   case 9:
1364b725ae77Skettenis #line 256 "f-exp.y"
1365b725ae77Skettenis     { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
1366b725ae77Skettenis     break;
1367*11efff7fSkettenis 
1368*11efff7fSkettenis   case 10:
1369b725ae77Skettenis #line 260 "f-exp.y"
1370b725ae77Skettenis     { write_exp_elt_opcode (UNOP_COMPLEMENT); }
1371b725ae77Skettenis     break;
1372*11efff7fSkettenis 
1373*11efff7fSkettenis   case 11:
1374b725ae77Skettenis #line 264 "f-exp.y"
1375b725ae77Skettenis     { write_exp_elt_opcode (UNOP_SIZEOF); }
1376b725ae77Skettenis     break;
1377*11efff7fSkettenis 
1378*11efff7fSkettenis   case 12:
1379b725ae77Skettenis #line 273 "f-exp.y"
1380b725ae77Skettenis     { start_arglist (); }
1381b725ae77Skettenis     break;
1382*11efff7fSkettenis 
1383*11efff7fSkettenis   case 13:
1384b725ae77Skettenis #line 275 "f-exp.y"
1385b725ae77Skettenis     { write_exp_elt_opcode (OP_F77_UNDETERMINED_ARGLIST);
1386b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST) end_arglist ());
1387b725ae77Skettenis 			  write_exp_elt_opcode (OP_F77_UNDETERMINED_ARGLIST); }
1388b725ae77Skettenis     break;
1389*11efff7fSkettenis 
1390*11efff7fSkettenis   case 15:
1391b725ae77Skettenis #line 284 "f-exp.y"
1392b725ae77Skettenis     { arglist_len = 1; }
1393b725ae77Skettenis     break;
1394*11efff7fSkettenis 
1395*11efff7fSkettenis   case 16:
1396b725ae77Skettenis #line 288 "f-exp.y"
1397b725ae77Skettenis     { arglist_len = 2;}
1398b725ae77Skettenis     break;
1399*11efff7fSkettenis 
1400*11efff7fSkettenis   case 17:
1401b725ae77Skettenis #line 292 "f-exp.y"
1402b725ae77Skettenis     { arglist_len++; }
1403b725ae77Skettenis     break;
1404*11efff7fSkettenis 
1405*11efff7fSkettenis   case 18:
1406b725ae77Skettenis #line 296 "f-exp.y"
1407b725ae77Skettenis     { }
1408b725ae77Skettenis     break;
1409*11efff7fSkettenis 
1410*11efff7fSkettenis   case 19:
1411b725ae77Skettenis #line 301 "f-exp.y"
1412b725ae77Skettenis     { }
1413b725ae77Skettenis     break;
1414*11efff7fSkettenis 
1415*11efff7fSkettenis   case 20:
1416b725ae77Skettenis #line 305 "f-exp.y"
1417b725ae77Skettenis     { write_exp_elt_opcode(OP_COMPLEX); }
1418b725ae77Skettenis     break;
1419*11efff7fSkettenis 
1420*11efff7fSkettenis   case 21:
1421b725ae77Skettenis #line 309 "f-exp.y"
1422b725ae77Skettenis     { write_exp_elt_opcode (UNOP_CAST);
1423b725ae77Skettenis 			  write_exp_elt_type (yyvsp[-2].tval);
1424b725ae77Skettenis 			  write_exp_elt_opcode (UNOP_CAST); }
1425b725ae77Skettenis     break;
1426*11efff7fSkettenis 
1427*11efff7fSkettenis   case 22:
1428b725ae77Skettenis #line 317 "f-exp.y"
1429b725ae77Skettenis     { write_exp_elt_opcode (BINOP_REPEAT); }
1430b725ae77Skettenis     break;
1431*11efff7fSkettenis 
1432*11efff7fSkettenis   case 23:
1433b725ae77Skettenis #line 321 "f-exp.y"
1434b725ae77Skettenis     { write_exp_elt_opcode (BINOP_MUL); }
1435b725ae77Skettenis     break;
1436*11efff7fSkettenis 
1437*11efff7fSkettenis   case 24:
1438b725ae77Skettenis #line 325 "f-exp.y"
1439b725ae77Skettenis     { write_exp_elt_opcode (BINOP_DIV); }
1440b725ae77Skettenis     break;
1441*11efff7fSkettenis 
1442*11efff7fSkettenis   case 25:
1443b725ae77Skettenis #line 329 "f-exp.y"
1444b725ae77Skettenis     { write_exp_elt_opcode (BINOP_REM); }
1445b725ae77Skettenis     break;
1446*11efff7fSkettenis 
1447*11efff7fSkettenis   case 26:
1448b725ae77Skettenis #line 333 "f-exp.y"
1449b725ae77Skettenis     { write_exp_elt_opcode (BINOP_ADD); }
1450b725ae77Skettenis     break;
1451*11efff7fSkettenis 
1452*11efff7fSkettenis   case 27:
1453b725ae77Skettenis #line 337 "f-exp.y"
1454b725ae77Skettenis     { write_exp_elt_opcode (BINOP_SUB); }
1455b725ae77Skettenis     break;
1456*11efff7fSkettenis 
1457*11efff7fSkettenis   case 28:
1458b725ae77Skettenis #line 341 "f-exp.y"
1459b725ae77Skettenis     { write_exp_elt_opcode (BINOP_LSH); }
1460b725ae77Skettenis     break;
1461*11efff7fSkettenis 
1462*11efff7fSkettenis   case 29:
1463b725ae77Skettenis #line 345 "f-exp.y"
1464b725ae77Skettenis     { write_exp_elt_opcode (BINOP_RSH); }
1465b725ae77Skettenis     break;
1466*11efff7fSkettenis 
1467*11efff7fSkettenis   case 30:
1468b725ae77Skettenis #line 349 "f-exp.y"
1469b725ae77Skettenis     { write_exp_elt_opcode (BINOP_EQUAL); }
1470b725ae77Skettenis     break;
1471*11efff7fSkettenis 
1472*11efff7fSkettenis   case 31:
1473b725ae77Skettenis #line 353 "f-exp.y"
1474b725ae77Skettenis     { write_exp_elt_opcode (BINOP_NOTEQUAL); }
1475b725ae77Skettenis     break;
1476*11efff7fSkettenis 
1477*11efff7fSkettenis   case 32:
1478b725ae77Skettenis #line 357 "f-exp.y"
1479b725ae77Skettenis     { write_exp_elt_opcode (BINOP_LEQ); }
1480b725ae77Skettenis     break;
1481*11efff7fSkettenis 
1482*11efff7fSkettenis   case 33:
1483b725ae77Skettenis #line 361 "f-exp.y"
1484b725ae77Skettenis     { write_exp_elt_opcode (BINOP_GEQ); }
1485b725ae77Skettenis     break;
1486*11efff7fSkettenis 
1487*11efff7fSkettenis   case 34:
1488b725ae77Skettenis #line 365 "f-exp.y"
1489b725ae77Skettenis     { write_exp_elt_opcode (BINOP_LESS); }
1490b725ae77Skettenis     break;
1491*11efff7fSkettenis 
1492*11efff7fSkettenis   case 35:
1493b725ae77Skettenis #line 369 "f-exp.y"
1494b725ae77Skettenis     { write_exp_elt_opcode (BINOP_GTR); }
1495b725ae77Skettenis     break;
1496*11efff7fSkettenis 
1497*11efff7fSkettenis   case 36:
1498b725ae77Skettenis #line 373 "f-exp.y"
1499b725ae77Skettenis     { write_exp_elt_opcode (BINOP_BITWISE_AND); }
1500b725ae77Skettenis     break;
1501*11efff7fSkettenis 
1502*11efff7fSkettenis   case 37:
1503b725ae77Skettenis #line 377 "f-exp.y"
1504b725ae77Skettenis     { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
1505b725ae77Skettenis     break;
1506*11efff7fSkettenis 
1507*11efff7fSkettenis   case 38:
1508b725ae77Skettenis #line 381 "f-exp.y"
1509b725ae77Skettenis     { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
1510b725ae77Skettenis     break;
1511*11efff7fSkettenis 
1512*11efff7fSkettenis   case 39:
1513b725ae77Skettenis #line 385 "f-exp.y"
1514b725ae77Skettenis     { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
1515b725ae77Skettenis     break;
1516*11efff7fSkettenis 
1517*11efff7fSkettenis   case 40:
1518b725ae77Skettenis #line 390 "f-exp.y"
1519b725ae77Skettenis     { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
1520b725ae77Skettenis     break;
1521*11efff7fSkettenis 
1522*11efff7fSkettenis   case 41:
1523b725ae77Skettenis #line 394 "f-exp.y"
1524b725ae77Skettenis     { write_exp_elt_opcode (BINOP_ASSIGN); }
1525b725ae77Skettenis     break;
1526*11efff7fSkettenis 
1527*11efff7fSkettenis   case 42:
1528b725ae77Skettenis #line 398 "f-exp.y"
1529b725ae77Skettenis     { write_exp_elt_opcode (BINOP_ASSIGN_MODIFY);
1530b725ae77Skettenis 			  write_exp_elt_opcode (yyvsp[-1].opcode);
1531b725ae77Skettenis 			  write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); }
1532b725ae77Skettenis     break;
1533*11efff7fSkettenis 
1534*11efff7fSkettenis   case 43:
1535b725ae77Skettenis #line 404 "f-exp.y"
1536b725ae77Skettenis     { write_exp_elt_opcode (OP_LONG);
1537b725ae77Skettenis 			  write_exp_elt_type (yyvsp[0].typed_val.type);
1538b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST)(yyvsp[0].typed_val.val));
1539b725ae77Skettenis 			  write_exp_elt_opcode (OP_LONG); }
1540b725ae77Skettenis     break;
1541*11efff7fSkettenis 
1542*11efff7fSkettenis   case 44:
1543b725ae77Skettenis #line 411 "f-exp.y"
1544b725ae77Skettenis     { YYSTYPE val;
1545b725ae77Skettenis 			  parse_number (yyvsp[0].ssym.stoken.ptr, yyvsp[0].ssym.stoken.length, 0, &val);
1546b725ae77Skettenis 			  write_exp_elt_opcode (OP_LONG);
1547b725ae77Skettenis 			  write_exp_elt_type (val.typed_val.type);
1548b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST)val.typed_val.val);
1549b725ae77Skettenis 			  write_exp_elt_opcode (OP_LONG); }
1550b725ae77Skettenis     break;
1551*11efff7fSkettenis 
1552*11efff7fSkettenis   case 45:
1553b725ae77Skettenis #line 420 "f-exp.y"
1554b725ae77Skettenis     { write_exp_elt_opcode (OP_DOUBLE);
1555b725ae77Skettenis 			  write_exp_elt_type (builtin_type_f_real_s8);
1556b725ae77Skettenis 			  write_exp_elt_dblcst (yyvsp[0].dval);
1557b725ae77Skettenis 			  write_exp_elt_opcode (OP_DOUBLE); }
1558b725ae77Skettenis     break;
1559*11efff7fSkettenis 
1560*11efff7fSkettenis   case 48:
1561b725ae77Skettenis #line 433 "f-exp.y"
1562b725ae77Skettenis     { write_exp_elt_opcode (OP_LONG);
1563b725ae77Skettenis 			  write_exp_elt_type (builtin_type_f_integer);
1564b725ae77Skettenis 			  CHECK_TYPEDEF (yyvsp[-1].tval);
1565b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST) TYPE_LENGTH (yyvsp[-1].tval));
1566b725ae77Skettenis 			  write_exp_elt_opcode (OP_LONG); }
1567b725ae77Skettenis     break;
1568*11efff7fSkettenis 
1569*11efff7fSkettenis   case 49:
1570b725ae77Skettenis #line 441 "f-exp.y"
1571b725ae77Skettenis     { write_exp_elt_opcode (OP_BOOL);
1572b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
1573b725ae77Skettenis 			  write_exp_elt_opcode (OP_BOOL);
1574b725ae77Skettenis 			}
1575b725ae77Skettenis     break;
1576*11efff7fSkettenis 
1577*11efff7fSkettenis   case 50:
1578b725ae77Skettenis #line 448 "f-exp.y"
1579b725ae77Skettenis     {
1580b725ae77Skettenis 			  write_exp_elt_opcode (OP_STRING);
1581b725ae77Skettenis 			  write_exp_string (yyvsp[0].sval);
1582b725ae77Skettenis 			  write_exp_elt_opcode (OP_STRING);
1583b725ae77Skettenis 			}
1584b725ae77Skettenis     break;
1585*11efff7fSkettenis 
1586*11efff7fSkettenis   case 51:
1587b725ae77Skettenis #line 456 "f-exp.y"
1588b725ae77Skettenis     { struct symbol *sym = yyvsp[0].ssym.sym;
1589b725ae77Skettenis 
1590b725ae77Skettenis 			  if (sym)
1591b725ae77Skettenis 			    {
1592b725ae77Skettenis 			      if (symbol_read_needs_frame (sym))
1593b725ae77Skettenis 				{
1594b725ae77Skettenis 				  if (innermost_block == 0 ||
1595b725ae77Skettenis 				      contained_in (block_found,
1596b725ae77Skettenis 						    innermost_block))
1597b725ae77Skettenis 				    innermost_block = block_found;
1598b725ae77Skettenis 				}
1599b725ae77Skettenis 			      write_exp_elt_opcode (OP_VAR_VALUE);
1600b725ae77Skettenis 			      /* We want to use the selected frame, not
1601b725ae77Skettenis 				 another more inner frame which happens to
1602b725ae77Skettenis 				 be in the same block.  */
1603b725ae77Skettenis 			      write_exp_elt_block (NULL);
1604b725ae77Skettenis 			      write_exp_elt_sym (sym);
1605b725ae77Skettenis 			      write_exp_elt_opcode (OP_VAR_VALUE);
1606b725ae77Skettenis 			      break;
1607b725ae77Skettenis 			    }
1608b725ae77Skettenis 			  else
1609b725ae77Skettenis 			    {
1610b725ae77Skettenis 			      struct minimal_symbol *msymbol;
1611b725ae77Skettenis 			      char *arg = copy_name (yyvsp[0].ssym.stoken);
1612b725ae77Skettenis 
1613b725ae77Skettenis 			      msymbol =
1614b725ae77Skettenis 				lookup_minimal_symbol (arg, NULL, NULL);
1615b725ae77Skettenis 			      if (msymbol != NULL)
1616b725ae77Skettenis 				{
1617b725ae77Skettenis 				  write_exp_msymbol (msymbol,
1618b725ae77Skettenis 						     lookup_function_type (builtin_type_int),
1619b725ae77Skettenis 						     builtin_type_int);
1620b725ae77Skettenis 				}
1621b725ae77Skettenis 			      else if (!have_full_symbols () && !have_partial_symbols ())
1622b725ae77Skettenis 				error ("No symbol table is loaded.  Use the \"file\" command.");
1623b725ae77Skettenis 			      else
1624b725ae77Skettenis 				error ("No symbol \"%s\" in current context.",
1625b725ae77Skettenis 				       copy_name (yyvsp[0].ssym.stoken));
1626b725ae77Skettenis 			    }
1627b725ae77Skettenis 			}
1628b725ae77Skettenis     break;
1629*11efff7fSkettenis 
1630*11efff7fSkettenis   case 54:
1631b725ae77Skettenis #line 504 "f-exp.y"
1632b725ae77Skettenis     {
1633b725ae77Skettenis 		  /* This is where the interesting stuff happens.  */
1634b725ae77Skettenis 		  int done = 0;
1635b725ae77Skettenis 		  int array_size;
1636b725ae77Skettenis 		  struct type *follow_type = yyvsp[-1].tval;
1637b725ae77Skettenis 		  struct type *range_type;
1638b725ae77Skettenis 
1639b725ae77Skettenis 		  while (!done)
1640b725ae77Skettenis 		    switch (pop_type ())
1641b725ae77Skettenis 		      {
1642b725ae77Skettenis 		      case tp_end:
1643b725ae77Skettenis 			done = 1;
1644b725ae77Skettenis 			break;
1645b725ae77Skettenis 		      case tp_pointer:
1646b725ae77Skettenis 			follow_type = lookup_pointer_type (follow_type);
1647b725ae77Skettenis 			break;
1648b725ae77Skettenis 		      case tp_reference:
1649b725ae77Skettenis 			follow_type = lookup_reference_type (follow_type);
1650b725ae77Skettenis 			break;
1651b725ae77Skettenis 		      case tp_array:
1652b725ae77Skettenis 			array_size = pop_type_int ();
1653b725ae77Skettenis 			if (array_size != -1)
1654b725ae77Skettenis 			  {
1655b725ae77Skettenis 			    range_type =
1656b725ae77Skettenis 			      create_range_type ((struct type *) NULL,
1657b725ae77Skettenis 						 builtin_type_f_integer, 0,
1658b725ae77Skettenis 						 array_size - 1);
1659b725ae77Skettenis 			    follow_type =
1660b725ae77Skettenis 			      create_array_type ((struct type *) NULL,
1661b725ae77Skettenis 						 follow_type, range_type);
1662b725ae77Skettenis 			  }
1663b725ae77Skettenis 			else
1664b725ae77Skettenis 			  follow_type = lookup_pointer_type (follow_type);
1665b725ae77Skettenis 			break;
1666b725ae77Skettenis 		      case tp_function:
1667b725ae77Skettenis 			follow_type = lookup_function_type (follow_type);
1668b725ae77Skettenis 			break;
1669b725ae77Skettenis 		      }
1670b725ae77Skettenis 		  yyval.tval = follow_type;
1671b725ae77Skettenis 		}
1672b725ae77Skettenis     break;
1673*11efff7fSkettenis 
1674*11efff7fSkettenis   case 55:
1675b725ae77Skettenis #line 547 "f-exp.y"
1676b725ae77Skettenis     { push_type (tp_pointer); yyval.voidval = 0; }
1677b725ae77Skettenis     break;
1678*11efff7fSkettenis 
1679*11efff7fSkettenis   case 56:
1680b725ae77Skettenis #line 549 "f-exp.y"
1681b725ae77Skettenis     { push_type (tp_pointer); yyval.voidval = yyvsp[0].voidval; }
1682b725ae77Skettenis     break;
1683*11efff7fSkettenis 
1684*11efff7fSkettenis   case 57:
1685b725ae77Skettenis #line 551 "f-exp.y"
1686b725ae77Skettenis     { push_type (tp_reference); yyval.voidval = 0; }
1687b725ae77Skettenis     break;
1688*11efff7fSkettenis 
1689*11efff7fSkettenis   case 58:
1690b725ae77Skettenis #line 553 "f-exp.y"
1691b725ae77Skettenis     { push_type (tp_reference); yyval.voidval = yyvsp[0].voidval; }
1692b725ae77Skettenis     break;
1693*11efff7fSkettenis 
1694*11efff7fSkettenis   case 60:
1695b725ae77Skettenis #line 558 "f-exp.y"
1696b725ae77Skettenis     { yyval.voidval = yyvsp[-1].voidval; }
1697b725ae77Skettenis     break;
1698*11efff7fSkettenis 
1699*11efff7fSkettenis   case 61:
1700b725ae77Skettenis #line 560 "f-exp.y"
1701b725ae77Skettenis     { push_type (tp_function); }
1702b725ae77Skettenis     break;
1703*11efff7fSkettenis 
1704*11efff7fSkettenis   case 62:
1705b725ae77Skettenis #line 562 "f-exp.y"
1706b725ae77Skettenis     { push_type (tp_function); }
1707b725ae77Skettenis     break;
1708*11efff7fSkettenis 
1709*11efff7fSkettenis   case 63:
1710b725ae77Skettenis #line 566 "f-exp.y"
1711b725ae77Skettenis     { yyval.voidval = 0; }
1712b725ae77Skettenis     break;
1713*11efff7fSkettenis 
1714*11efff7fSkettenis   case 64:
1715b725ae77Skettenis #line 568 "f-exp.y"
1716b725ae77Skettenis     { free (yyvsp[-1].tvec); yyval.voidval = 0; }
1717b725ae77Skettenis     break;
1718*11efff7fSkettenis 
1719*11efff7fSkettenis   case 65:
1720b725ae77Skettenis #line 573 "f-exp.y"
1721b725ae77Skettenis     { yyval.tval = yyvsp[0].tsym.type; }
1722b725ae77Skettenis     break;
1723*11efff7fSkettenis 
1724*11efff7fSkettenis   case 66:
1725b725ae77Skettenis #line 575 "f-exp.y"
1726b725ae77Skettenis     { yyval.tval = builtin_type_f_integer; }
1727b725ae77Skettenis     break;
1728*11efff7fSkettenis 
1729*11efff7fSkettenis   case 67:
1730b725ae77Skettenis #line 577 "f-exp.y"
1731b725ae77Skettenis     { yyval.tval = builtin_type_f_integer_s2; }
1732b725ae77Skettenis     break;
1733*11efff7fSkettenis 
1734*11efff7fSkettenis   case 68:
1735b725ae77Skettenis #line 579 "f-exp.y"
1736b725ae77Skettenis     { yyval.tval = builtin_type_f_character; }
1737b725ae77Skettenis     break;
1738*11efff7fSkettenis 
1739*11efff7fSkettenis   case 69:
1740b725ae77Skettenis #line 581 "f-exp.y"
1741b725ae77Skettenis     { yyval.tval = builtin_type_f_logical;}
1742b725ae77Skettenis     break;
1743*11efff7fSkettenis 
1744*11efff7fSkettenis   case 70:
1745b725ae77Skettenis #line 583 "f-exp.y"
1746b725ae77Skettenis     { yyval.tval = builtin_type_f_logical_s2;}
1747b725ae77Skettenis     break;
1748*11efff7fSkettenis 
1749*11efff7fSkettenis   case 71:
1750b725ae77Skettenis #line 585 "f-exp.y"
1751b725ae77Skettenis     { yyval.tval = builtin_type_f_logical_s1;}
1752b725ae77Skettenis     break;
1753*11efff7fSkettenis 
1754*11efff7fSkettenis   case 72:
1755b725ae77Skettenis #line 587 "f-exp.y"
1756b725ae77Skettenis     { yyval.tval = builtin_type_f_real;}
1757b725ae77Skettenis     break;
1758*11efff7fSkettenis 
1759*11efff7fSkettenis   case 73:
1760b725ae77Skettenis #line 589 "f-exp.y"
1761b725ae77Skettenis     { yyval.tval = builtin_type_f_real_s8;}
1762b725ae77Skettenis     break;
1763*11efff7fSkettenis 
1764*11efff7fSkettenis   case 74:
1765b725ae77Skettenis #line 591 "f-exp.y"
1766b725ae77Skettenis     { yyval.tval = builtin_type_f_real_s16;}
1767b725ae77Skettenis     break;
1768*11efff7fSkettenis 
1769*11efff7fSkettenis   case 75:
1770b725ae77Skettenis #line 593 "f-exp.y"
1771b725ae77Skettenis     { yyval.tval = builtin_type_f_complex_s8;}
1772b725ae77Skettenis     break;
1773*11efff7fSkettenis 
1774*11efff7fSkettenis   case 76:
1775b725ae77Skettenis #line 595 "f-exp.y"
1776b725ae77Skettenis     { yyval.tval = builtin_type_f_complex_s16;}
1777b725ae77Skettenis     break;
1778*11efff7fSkettenis 
1779*11efff7fSkettenis   case 77:
1780b725ae77Skettenis #line 597 "f-exp.y"
1781b725ae77Skettenis     { yyval.tval = builtin_type_f_complex_s32;}
1782b725ae77Skettenis     break;
1783*11efff7fSkettenis 
1784b725ae77Skettenis   case 78:
1785b725ae77Skettenis #line 605 "f-exp.y"
1786b725ae77Skettenis     { yyval.tvec = (struct type **) xmalloc (sizeof (struct type *) * 2);
1787b725ae77Skettenis 		  yyval.ivec[0] = 1;	/* Number of types in vector */
1788b725ae77Skettenis 		  yyval.tvec[1] = yyvsp[0].tval;
1789b725ae77Skettenis 		}
1790b725ae77Skettenis     break;
1791*11efff7fSkettenis 
1792b725ae77Skettenis   case 79:
1793b725ae77Skettenis #line 610 "f-exp.y"
1794b725ae77Skettenis     { int len = sizeof (struct type *) * (++(yyvsp[-2].ivec[0]) + 1);
1795b725ae77Skettenis 		  yyval.tvec = (struct type **) xrealloc ((char *) yyvsp[-2].tvec, len);
1796b725ae77Skettenis 		  yyval.tvec[yyval.ivec[0]] = yyvsp[0].tval;
1797b725ae77Skettenis 		}
1798b725ae77Skettenis     break;
1799*11efff7fSkettenis 
1800*11efff7fSkettenis 
1801b725ae77Skettenis     }
1802b725ae77Skettenis 
1803*11efff7fSkettenis /* Line 1000 of yacc.c.  */
1804b725ae77Skettenis 
1805b725ae77Skettenis   yyvsp -= yylen;
1806b725ae77Skettenis   yyssp -= yylen;
1807b725ae77Skettenis 
1808*11efff7fSkettenis 
1809*11efff7fSkettenis   YY_STACK_PRINT (yyss, yyssp);
1810b725ae77Skettenis 
1811b725ae77Skettenis   *++yyvsp = yyval;
1812*11efff7fSkettenis 
1813b725ae77Skettenis 
1814b725ae77Skettenis   /* Now `shift' the result of the reduction.  Determine what state
1815b725ae77Skettenis      that goes to, based on the state we popped back to and the rule
1816b725ae77Skettenis      number reduced by.  */
1817b725ae77Skettenis 
1818b725ae77Skettenis   yyn = yyr1[yyn];
1819b725ae77Skettenis 
1820*11efff7fSkettenis   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
1821*11efff7fSkettenis   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
1822b725ae77Skettenis     yystate = yytable[yystate];
1823b725ae77Skettenis   else
1824*11efff7fSkettenis     yystate = yydefgoto[yyn - YYNTOKENS];
1825b725ae77Skettenis 
1826b725ae77Skettenis   goto yynewstate;
1827b725ae77Skettenis 
1828b725ae77Skettenis 
1829b725ae77Skettenis /*------------------------------------.
1830b725ae77Skettenis | yyerrlab -- here on detecting error |
1831b725ae77Skettenis `------------------------------------*/
1832b725ae77Skettenis yyerrlab:
1833b725ae77Skettenis   /* If not already recovering from an error, report this error.  */
1834b725ae77Skettenis   if (!yyerrstatus)
1835b725ae77Skettenis     {
1836b725ae77Skettenis       ++yynerrs;
1837*11efff7fSkettenis #if YYERROR_VERBOSE
1838b725ae77Skettenis       yyn = yypact[yystate];
1839b725ae77Skettenis 
1840*11efff7fSkettenis       if (YYPACT_NINF < yyn && yyn < YYLAST)
1841b725ae77Skettenis 	{
1842b725ae77Skettenis 	  YYSIZE_T yysize = 0;
1843*11efff7fSkettenis 	  int yytype = YYTRANSLATE (yychar);
1844*11efff7fSkettenis 	  const char* yyprefix;
1845b725ae77Skettenis 	  char *yymsg;
1846*11efff7fSkettenis 	  int yyx;
1847b725ae77Skettenis 
1848b725ae77Skettenis 	  /* Start YYX at -YYN if negative to avoid negative indexes in
1849b725ae77Skettenis 	     YYCHECK.  */
1850*11efff7fSkettenis 	  int yyxbegin = yyn < 0 ? -yyn : 0;
1851*11efff7fSkettenis 
1852*11efff7fSkettenis 	  /* Stay within bounds of both yycheck and yytname.  */
1853*11efff7fSkettenis 	  int yychecklim = YYLAST - yyn;
1854*11efff7fSkettenis 	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1855*11efff7fSkettenis 	  int yycount = 0;
1856*11efff7fSkettenis 
1857*11efff7fSkettenis 	  yyprefix = ", expecting ";
1858*11efff7fSkettenis 	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1859*11efff7fSkettenis 	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1860*11efff7fSkettenis 	      {
1861*11efff7fSkettenis 		yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
1862*11efff7fSkettenis 		yycount += 1;
1863*11efff7fSkettenis 		if (yycount == 5)
1864*11efff7fSkettenis 		  {
1865*11efff7fSkettenis 		    yysize = 0;
1866*11efff7fSkettenis 		    break;
1867*11efff7fSkettenis 		  }
1868*11efff7fSkettenis 	      }
1869*11efff7fSkettenis 	  yysize += (sizeof ("syntax error, unexpected ")
1870*11efff7fSkettenis 		     + yystrlen (yytname[yytype]));
1871b725ae77Skettenis 	  yymsg = (char *) YYSTACK_ALLOC (yysize);
1872b725ae77Skettenis 	  if (yymsg != 0)
1873b725ae77Skettenis 	    {
1874*11efff7fSkettenis 	      char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
1875*11efff7fSkettenis 	      yyp = yystpcpy (yyp, yytname[yytype]);
1876b725ae77Skettenis 
1877b725ae77Skettenis 	      if (yycount < 5)
1878b725ae77Skettenis 		{
1879*11efff7fSkettenis 		  yyprefix = ", expecting ";
1880*11efff7fSkettenis 		  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1881*11efff7fSkettenis 		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1882b725ae77Skettenis 		      {
1883*11efff7fSkettenis 			yyp = yystpcpy (yyp, yyprefix);
1884b725ae77Skettenis 			yyp = yystpcpy (yyp, yytname[yyx]);
1885*11efff7fSkettenis 			yyprefix = " or ";
1886b725ae77Skettenis 		      }
1887b725ae77Skettenis 		}
1888b725ae77Skettenis 	      yyerror (yymsg);
1889b725ae77Skettenis 	      YYSTACK_FREE (yymsg);
1890b725ae77Skettenis 	    }
1891b725ae77Skettenis 	  else
1892*11efff7fSkettenis 	    yyerror ("syntax error; also virtual memory exhausted");
1893b725ae77Skettenis 	}
1894b725ae77Skettenis       else
1895*11efff7fSkettenis #endif /* YYERROR_VERBOSE */
1896*11efff7fSkettenis 	yyerror ("syntax error");
1897b725ae77Skettenis     }
1898b725ae77Skettenis 
1899b725ae77Skettenis 
1900*11efff7fSkettenis 
1901b725ae77Skettenis   if (yyerrstatus == 3)
1902b725ae77Skettenis     {
1903b725ae77Skettenis       /* If just tried and failed to reuse lookahead token after an
1904b725ae77Skettenis 	 error, discard it.  */
1905b725ae77Skettenis 
1906*11efff7fSkettenis       if (yychar <= YYEOF)
1907*11efff7fSkettenis         {
1908*11efff7fSkettenis           /* If at end of input, pop the error token,
1909*11efff7fSkettenis 	     then the rest of the stack, then return failure.  */
1910b725ae77Skettenis 	  if (yychar == YYEOF)
1911*11efff7fSkettenis 	     for (;;)
1912*11efff7fSkettenis 	       {
1913*11efff7fSkettenis 		 YYPOPSTACK;
1914*11efff7fSkettenis 		 if (yyssp == yyss)
1915b725ae77Skettenis 		   YYABORT;
1916*11efff7fSkettenis 		 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
1917*11efff7fSkettenis 		 yydestruct (yystos[*yyssp], yyvsp);
1918*11efff7fSkettenis 	       }
1919*11efff7fSkettenis         }
1920*11efff7fSkettenis       else
1921*11efff7fSkettenis 	{
1922*11efff7fSkettenis 	  YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
1923*11efff7fSkettenis 	  yydestruct (yytoken, &yylval);
1924b725ae77Skettenis 	  yychar = YYEMPTY;
1925*11efff7fSkettenis 
1926*11efff7fSkettenis 	}
1927b725ae77Skettenis     }
1928b725ae77Skettenis 
1929b725ae77Skettenis   /* Else will try to reuse lookahead token after shifting the error
1930b725ae77Skettenis      token.  */
1931*11efff7fSkettenis   goto yyerrlab1;
1932b725ae77Skettenis 
1933b725ae77Skettenis 
1934*11efff7fSkettenis /*---------------------------------------------------.
1935*11efff7fSkettenis | yyerrorlab -- error raised explicitly by YYERROR.  |
1936*11efff7fSkettenis `---------------------------------------------------*/
1937*11efff7fSkettenis yyerrorlab:
1938b725ae77Skettenis 
1939*11efff7fSkettenis #ifdef __GNUC__
1940*11efff7fSkettenis   /* Pacify GCC when the user code never invokes YYERROR and the label
1941*11efff7fSkettenis      yyerrorlab therefore never appears in user code.  */
1942*11efff7fSkettenis   if (0)
1943*11efff7fSkettenis      goto yyerrorlab;
1944b725ae77Skettenis #endif
1945b725ae77Skettenis 
1946*11efff7fSkettenis   yyvsp -= yylen;
1947*11efff7fSkettenis   yyssp -= yylen;
1948*11efff7fSkettenis   yystate = *yyssp;
1949*11efff7fSkettenis   goto yyerrlab1;
1950b725ae77Skettenis 
1951*11efff7fSkettenis 
1952*11efff7fSkettenis /*-------------------------------------------------------------.
1953*11efff7fSkettenis | yyerrlab1 -- common code for both syntax error and YYERROR.  |
1954*11efff7fSkettenis `-------------------------------------------------------------*/
1955*11efff7fSkettenis yyerrlab1:
1956*11efff7fSkettenis   yyerrstatus = 3;	/* Each real token shifted decrements this.  */
1957*11efff7fSkettenis 
1958*11efff7fSkettenis   for (;;)
1959*11efff7fSkettenis     {
1960*11efff7fSkettenis       yyn = yypact[yystate];
1961*11efff7fSkettenis       if (yyn != YYPACT_NINF)
1962*11efff7fSkettenis 	{
1963*11efff7fSkettenis 	  yyn += YYTERROR;
1964*11efff7fSkettenis 	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
1965*11efff7fSkettenis 	    {
1966*11efff7fSkettenis 	      yyn = yytable[yyn];
1967*11efff7fSkettenis 	      if (0 < yyn)
1968*11efff7fSkettenis 		break;
1969*11efff7fSkettenis 	    }
1970*11efff7fSkettenis 	}
1971*11efff7fSkettenis 
1972*11efff7fSkettenis       /* Pop the current state because it cannot handle the error token.  */
1973b725ae77Skettenis       if (yyssp == yyss)
1974b725ae77Skettenis 	YYABORT;
1975b725ae77Skettenis 
1976*11efff7fSkettenis       YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
1977*11efff7fSkettenis       yydestruct (yystos[yystate], yyvsp);
1978*11efff7fSkettenis       YYPOPSTACK;
1979*11efff7fSkettenis       yystate = *yyssp;
1980*11efff7fSkettenis       YY_STACK_PRINT (yyss, yyssp);
1981b725ae77Skettenis     }
1982b725ae77Skettenis 
1983b725ae77Skettenis   if (yyn == YYFINAL)
1984b725ae77Skettenis     YYACCEPT;
1985b725ae77Skettenis 
1986b725ae77Skettenis   YYDPRINTF ((stderr, "Shifting error token, "));
1987b725ae77Skettenis 
1988b725ae77Skettenis   *++yyvsp = yylval;
1989*11efff7fSkettenis 
1990b725ae77Skettenis 
1991b725ae77Skettenis   yystate = yyn;
1992b725ae77Skettenis   goto yynewstate;
1993b725ae77Skettenis 
1994b725ae77Skettenis 
1995b725ae77Skettenis /*-------------------------------------.
1996b725ae77Skettenis | yyacceptlab -- YYACCEPT comes here.  |
1997b725ae77Skettenis `-------------------------------------*/
1998b725ae77Skettenis yyacceptlab:
1999b725ae77Skettenis   yyresult = 0;
2000b725ae77Skettenis   goto yyreturn;
2001b725ae77Skettenis 
2002b725ae77Skettenis /*-----------------------------------.
2003b725ae77Skettenis | yyabortlab -- YYABORT comes here.  |
2004b725ae77Skettenis `-----------------------------------*/
2005b725ae77Skettenis yyabortlab:
2006b725ae77Skettenis   yyresult = 1;
2007b725ae77Skettenis   goto yyreturn;
2008b725ae77Skettenis 
2009*11efff7fSkettenis #ifndef yyoverflow
2010*11efff7fSkettenis /*----------------------------------------------.
2011*11efff7fSkettenis | yyoverflowlab -- parser overflow comes here.  |
2012*11efff7fSkettenis `----------------------------------------------*/
2013b725ae77Skettenis yyoverflowlab:
2014b725ae77Skettenis   yyerror ("parser stack overflow");
2015b725ae77Skettenis   yyresult = 2;
2016b725ae77Skettenis   /* Fall through.  */
2017*11efff7fSkettenis #endif
2018b725ae77Skettenis 
2019b725ae77Skettenis yyreturn:
2020b725ae77Skettenis #ifndef yyoverflow
2021b725ae77Skettenis   if (yyss != yyssa)
2022b725ae77Skettenis     YYSTACK_FREE (yyss);
2023b725ae77Skettenis #endif
2024b725ae77Skettenis   return yyresult;
2025b725ae77Skettenis }
2026*11efff7fSkettenis 
2027*11efff7fSkettenis 
2028b725ae77Skettenis #line 634 "f-exp.y"
2029b725ae77Skettenis 
2030b725ae77Skettenis 
2031b725ae77Skettenis /* Take care of parsing a number (anything that starts with a digit).
2032b725ae77Skettenis    Set yylval and return the token type; update lexptr.
2033b725ae77Skettenis    LEN is the number of characters in it.  */
2034b725ae77Skettenis 
2035b725ae77Skettenis /*** Needs some error checking for the float case ***/
2036b725ae77Skettenis 
2037b725ae77Skettenis static int
parse_number(p,len,parsed_float,putithere)2038b725ae77Skettenis parse_number (p, len, parsed_float, putithere)
2039b725ae77Skettenis      char *p;
2040b725ae77Skettenis      int len;
2041b725ae77Skettenis      int parsed_float;
2042b725ae77Skettenis      YYSTYPE *putithere;
2043b725ae77Skettenis {
2044b725ae77Skettenis   LONGEST n = 0;
2045b725ae77Skettenis   LONGEST prevn = 0;
2046b725ae77Skettenis   int c;
2047b725ae77Skettenis   int base = input_radix;
2048b725ae77Skettenis   int unsigned_p = 0;
2049b725ae77Skettenis   int long_p = 0;
2050b725ae77Skettenis   ULONGEST high_bit;
2051b725ae77Skettenis   struct type *signed_type;
2052b725ae77Skettenis   struct type *unsigned_type;
2053b725ae77Skettenis 
2054b725ae77Skettenis   if (parsed_float)
2055b725ae77Skettenis     {
2056b725ae77Skettenis       /* It's a float since it contains a point or an exponent.  */
2057b725ae77Skettenis       /* [dD] is not understood as an exponent by atof, change it to 'e'.  */
2058b725ae77Skettenis       char *tmp, *tmp2;
2059b725ae77Skettenis 
2060b725ae77Skettenis       tmp = xstrdup (p);
2061b725ae77Skettenis       for (tmp2 = tmp; *tmp2; ++tmp2)
2062b725ae77Skettenis 	if (*tmp2 == 'd' || *tmp2 == 'D')
2063b725ae77Skettenis 	  *tmp2 = 'e';
2064b725ae77Skettenis       putithere->dval = atof (tmp);
2065b725ae77Skettenis       free (tmp);
2066b725ae77Skettenis       return FLOAT;
2067b725ae77Skettenis     }
2068b725ae77Skettenis 
2069b725ae77Skettenis   /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
2070b725ae77Skettenis   if (p[0] == '0')
2071b725ae77Skettenis     switch (p[1])
2072b725ae77Skettenis       {
2073b725ae77Skettenis       case 'x':
2074b725ae77Skettenis       case 'X':
2075b725ae77Skettenis 	if (len >= 3)
2076b725ae77Skettenis 	  {
2077b725ae77Skettenis 	    p += 2;
2078b725ae77Skettenis 	    base = 16;
2079b725ae77Skettenis 	    len -= 2;
2080b725ae77Skettenis 	  }
2081b725ae77Skettenis 	break;
2082b725ae77Skettenis 
2083b725ae77Skettenis       case 't':
2084b725ae77Skettenis       case 'T':
2085b725ae77Skettenis       case 'd':
2086b725ae77Skettenis       case 'D':
2087b725ae77Skettenis 	if (len >= 3)
2088b725ae77Skettenis 	  {
2089b725ae77Skettenis 	    p += 2;
2090b725ae77Skettenis 	    base = 10;
2091b725ae77Skettenis 	    len -= 2;
2092b725ae77Skettenis 	  }
2093b725ae77Skettenis 	break;
2094b725ae77Skettenis 
2095b725ae77Skettenis       default:
2096b725ae77Skettenis 	base = 8;
2097b725ae77Skettenis 	break;
2098b725ae77Skettenis       }
2099b725ae77Skettenis 
2100b725ae77Skettenis   while (len-- > 0)
2101b725ae77Skettenis     {
2102b725ae77Skettenis       c = *p++;
2103b725ae77Skettenis       if (isupper (c))
2104b725ae77Skettenis 	c = tolower (c);
2105b725ae77Skettenis       if (len == 0 && c == 'l')
2106b725ae77Skettenis 	long_p = 1;
2107b725ae77Skettenis       else if (len == 0 && c == 'u')
2108b725ae77Skettenis 	unsigned_p = 1;
2109b725ae77Skettenis       else
2110b725ae77Skettenis 	{
2111b725ae77Skettenis 	  int i;
2112b725ae77Skettenis 	  if (c >= '0' && c <= '9')
2113b725ae77Skettenis 	    i = c - '0';
2114b725ae77Skettenis 	  else if (c >= 'a' && c <= 'f')
2115b725ae77Skettenis 	    i = c - 'a' + 10;
2116b725ae77Skettenis 	  else
2117b725ae77Skettenis 	    return ERROR;	/* Char not a digit */
2118b725ae77Skettenis 	  if (i >= base)
2119b725ae77Skettenis 	    return ERROR;		/* Invalid digit in this base */
2120b725ae77Skettenis 	  n *= base;
2121b725ae77Skettenis 	  n += i;
2122b725ae77Skettenis 	}
2123b725ae77Skettenis       /* Portably test for overflow (only works for nonzero values, so make
2124b725ae77Skettenis 	 a second check for zero).  */
2125b725ae77Skettenis       if ((prevn >= n) && n != 0)
2126b725ae77Skettenis 	unsigned_p=1;		/* Try something unsigned */
2127b725ae77Skettenis       /* If range checking enabled, portably test for unsigned overflow.  */
2128b725ae77Skettenis       if (RANGE_CHECK && n != 0)
2129b725ae77Skettenis 	{
2130b725ae77Skettenis 	  if ((unsigned_p && (unsigned)prevn >= (unsigned)n))
2131b725ae77Skettenis 	    range_error("Overflow on numeric constant.");
2132b725ae77Skettenis 	}
2133b725ae77Skettenis       prevn = n;
2134b725ae77Skettenis     }
2135b725ae77Skettenis 
2136b725ae77Skettenis   /* If the number is too big to be an int, or it's got an l suffix
2137b725ae77Skettenis      then it's a long.  Work out if this has to be a long by
2138b725ae77Skettenis      shifting right and and seeing if anything remains, and the
2139b725ae77Skettenis      target int size is different to the target long size.
2140b725ae77Skettenis 
2141b725ae77Skettenis      In the expression below, we could have tested
2142b725ae77Skettenis      (n >> TARGET_INT_BIT)
2143b725ae77Skettenis      to see if it was zero,
2144b725ae77Skettenis      but too many compilers warn about that, when ints and longs
2145b725ae77Skettenis      are the same size.  So we shift it twice, with fewer bits
2146b725ae77Skettenis      each time, for the same result.  */
2147b725ae77Skettenis 
2148b725ae77Skettenis   if ((TARGET_INT_BIT != TARGET_LONG_BIT
2149b725ae77Skettenis        && ((n >> 2) >> (TARGET_INT_BIT-2)))   /* Avoid shift warning */
2150b725ae77Skettenis       || long_p)
2151b725ae77Skettenis     {
2152b725ae77Skettenis       high_bit = ((ULONGEST)1) << (TARGET_LONG_BIT-1);
2153b725ae77Skettenis       unsigned_type = builtin_type_unsigned_long;
2154b725ae77Skettenis       signed_type = builtin_type_long;
2155b725ae77Skettenis     }
2156b725ae77Skettenis   else
2157b725ae77Skettenis     {
2158b725ae77Skettenis       high_bit = ((ULONGEST)1) << (TARGET_INT_BIT-1);
2159b725ae77Skettenis       unsigned_type = builtin_type_unsigned_int;
2160b725ae77Skettenis       signed_type = builtin_type_int;
2161b725ae77Skettenis     }
2162b725ae77Skettenis 
2163b725ae77Skettenis   putithere->typed_val.val = n;
2164b725ae77Skettenis 
2165b725ae77Skettenis   /* If the high bit of the worked out type is set then this number
2166b725ae77Skettenis      has to be unsigned. */
2167b725ae77Skettenis 
2168b725ae77Skettenis   if (unsigned_p || (n & high_bit))
2169b725ae77Skettenis     putithere->typed_val.type = unsigned_type;
2170b725ae77Skettenis   else
2171b725ae77Skettenis     putithere->typed_val.type = signed_type;
2172b725ae77Skettenis 
2173b725ae77Skettenis   return INT;
2174b725ae77Skettenis }
2175b725ae77Skettenis 
2176b725ae77Skettenis struct token
2177b725ae77Skettenis {
2178b725ae77Skettenis   char *operator;
2179b725ae77Skettenis   int token;
2180b725ae77Skettenis   enum exp_opcode opcode;
2181b725ae77Skettenis };
2182b725ae77Skettenis 
2183b725ae77Skettenis static const struct token dot_ops[] =
2184b725ae77Skettenis {
2185b725ae77Skettenis   { ".and.", BOOL_AND, BINOP_END },
2186b725ae77Skettenis   { ".AND.", BOOL_AND, BINOP_END },
2187b725ae77Skettenis   { ".or.", BOOL_OR, BINOP_END },
2188b725ae77Skettenis   { ".OR.", BOOL_OR, BINOP_END },
2189b725ae77Skettenis   { ".not.", BOOL_NOT, BINOP_END },
2190b725ae77Skettenis   { ".NOT.", BOOL_NOT, BINOP_END },
2191b725ae77Skettenis   { ".eq.", EQUAL, BINOP_END },
2192b725ae77Skettenis   { ".EQ.", EQUAL, BINOP_END },
2193b725ae77Skettenis   { ".eqv.", EQUAL, BINOP_END },
2194b725ae77Skettenis   { ".NEQV.", NOTEQUAL, BINOP_END },
2195b725ae77Skettenis   { ".neqv.", NOTEQUAL, BINOP_END },
2196b725ae77Skettenis   { ".EQV.", EQUAL, BINOP_END },
2197b725ae77Skettenis   { ".ne.", NOTEQUAL, BINOP_END },
2198b725ae77Skettenis   { ".NE.", NOTEQUAL, BINOP_END },
2199b725ae77Skettenis   { ".le.", LEQ, BINOP_END },
2200b725ae77Skettenis   { ".LE.", LEQ, BINOP_END },
2201b725ae77Skettenis   { ".ge.", GEQ, BINOP_END },
2202b725ae77Skettenis   { ".GE.", GEQ, BINOP_END },
2203b725ae77Skettenis   { ".gt.", GREATERTHAN, BINOP_END },
2204b725ae77Skettenis   { ".GT.", GREATERTHAN, BINOP_END },
2205b725ae77Skettenis   { ".lt.", LESSTHAN, BINOP_END },
2206b725ae77Skettenis   { ".LT.", LESSTHAN, BINOP_END },
2207b725ae77Skettenis   { NULL, 0, 0 }
2208b725ae77Skettenis };
2209b725ae77Skettenis 
2210b725ae77Skettenis struct f77_boolean_val
2211b725ae77Skettenis {
2212b725ae77Skettenis   char *name;
2213b725ae77Skettenis   int value;
2214b725ae77Skettenis };
2215b725ae77Skettenis 
2216b725ae77Skettenis static const struct f77_boolean_val boolean_values[]  =
2217b725ae77Skettenis {
2218b725ae77Skettenis   { ".true.", 1 },
2219b725ae77Skettenis   { ".TRUE.", 1 },
2220b725ae77Skettenis   { ".false.", 0 },
2221b725ae77Skettenis   { ".FALSE.", 0 },
2222b725ae77Skettenis   { NULL, 0 }
2223b725ae77Skettenis };
2224b725ae77Skettenis 
2225b725ae77Skettenis static const struct token f77_keywords[] =
2226b725ae77Skettenis {
2227b725ae77Skettenis   { "complex_16", COMPLEX_S16_KEYWORD, BINOP_END },
2228b725ae77Skettenis   { "complex_32", COMPLEX_S32_KEYWORD, BINOP_END },
2229b725ae77Skettenis   { "character", CHARACTER, BINOP_END },
2230b725ae77Skettenis   { "integer_2", INT_S2_KEYWORD, BINOP_END },
2231b725ae77Skettenis   { "logical_1", LOGICAL_S1_KEYWORD, BINOP_END },
2232b725ae77Skettenis   { "logical_2", LOGICAL_S2_KEYWORD, BINOP_END },
2233b725ae77Skettenis   { "complex_8", COMPLEX_S8_KEYWORD, BINOP_END },
2234b725ae77Skettenis   { "integer", INT_KEYWORD, BINOP_END },
2235b725ae77Skettenis   { "logical", LOGICAL_KEYWORD, BINOP_END },
2236b725ae77Skettenis   { "real_16", REAL_S16_KEYWORD, BINOP_END },
2237b725ae77Skettenis   { "complex", COMPLEX_S8_KEYWORD, BINOP_END },
2238b725ae77Skettenis   { "sizeof", SIZEOF, BINOP_END },
2239b725ae77Skettenis   { "real_8", REAL_S8_KEYWORD, BINOP_END },
2240b725ae77Skettenis   { "real", REAL_KEYWORD, BINOP_END },
2241b725ae77Skettenis   { NULL, 0, 0 }
2242b725ae77Skettenis };
2243b725ae77Skettenis 
2244b725ae77Skettenis /* Implementation of a dynamically expandable buffer for processing input
2245b725ae77Skettenis    characters acquired through lexptr and building a value to return in
2246b725ae77Skettenis    yylval. Ripped off from ch-exp.y */
2247b725ae77Skettenis 
2248b725ae77Skettenis static char *tempbuf;		/* Current buffer contents */
2249b725ae77Skettenis static int tempbufsize;		/* Size of allocated buffer */
2250b725ae77Skettenis static int tempbufindex;	/* Current index into buffer */
2251b725ae77Skettenis 
2252b725ae77Skettenis #define GROWBY_MIN_SIZE 64	/* Minimum amount to grow buffer by */
2253b725ae77Skettenis 
2254b725ae77Skettenis #define CHECKBUF(size) \
2255b725ae77Skettenis   do { \
2256b725ae77Skettenis     if (tempbufindex + (size) >= tempbufsize) \
2257b725ae77Skettenis       { \
2258b725ae77Skettenis 	growbuf_by_size (size); \
2259b725ae77Skettenis       } \
2260b725ae77Skettenis   } while (0);
2261b725ae77Skettenis 
2262b725ae77Skettenis 
2263b725ae77Skettenis /* Grow the static temp buffer if necessary, including allocating the first one
2264b725ae77Skettenis    on demand. */
2265b725ae77Skettenis 
2266b725ae77Skettenis static void
growbuf_by_size(count)2267b725ae77Skettenis growbuf_by_size (count)
2268b725ae77Skettenis      int count;
2269b725ae77Skettenis {
2270b725ae77Skettenis   int growby;
2271b725ae77Skettenis 
2272b725ae77Skettenis   growby = max (count, GROWBY_MIN_SIZE);
2273b725ae77Skettenis   tempbufsize += growby;
2274b725ae77Skettenis   if (tempbuf == NULL)
2275b725ae77Skettenis     tempbuf = (char *) xmalloc (tempbufsize);
2276b725ae77Skettenis   else
2277b725ae77Skettenis     tempbuf = (char *) xrealloc (tempbuf, tempbufsize);
2278b725ae77Skettenis }
2279b725ae77Skettenis 
2280b725ae77Skettenis /* Blatantly ripped off from ch-exp.y. This routine recognizes F77
2281b725ae77Skettenis    string-literals.
2282b725ae77Skettenis 
2283b725ae77Skettenis    Recognize a string literal.  A string literal is a nonzero sequence
2284b725ae77Skettenis    of characters enclosed in matching single quotes, except that
2285b725ae77Skettenis    a single character inside single quotes is a character literal, which
2286b725ae77Skettenis    we reject as a string literal.  To embed the terminator character inside
2287b725ae77Skettenis    a string, it is simply doubled (I.E. 'this''is''one''string') */
2288b725ae77Skettenis 
2289b725ae77Skettenis static int
match_string_literal()2290b725ae77Skettenis match_string_literal ()
2291b725ae77Skettenis {
2292b725ae77Skettenis   char *tokptr = lexptr;
2293b725ae77Skettenis 
2294b725ae77Skettenis   for (tempbufindex = 0, tokptr++; *tokptr != '\0'; tokptr++)
2295b725ae77Skettenis     {
2296b725ae77Skettenis       CHECKBUF (1);
2297b725ae77Skettenis       if (*tokptr == *lexptr)
2298b725ae77Skettenis 	{
2299b725ae77Skettenis 	  if (*(tokptr + 1) == *lexptr)
2300b725ae77Skettenis 	    tokptr++;
2301b725ae77Skettenis 	  else
2302b725ae77Skettenis 	    break;
2303b725ae77Skettenis 	}
2304b725ae77Skettenis       tempbuf[tempbufindex++] = *tokptr;
2305b725ae77Skettenis     }
2306b725ae77Skettenis   if (*tokptr == '\0'					/* no terminator */
2307b725ae77Skettenis       || tempbufindex == 0)				/* no string */
2308b725ae77Skettenis     return 0;
2309b725ae77Skettenis   else
2310b725ae77Skettenis     {
2311b725ae77Skettenis       tempbuf[tempbufindex] = '\0';
2312b725ae77Skettenis       yylval.sval.ptr = tempbuf;
2313b725ae77Skettenis       yylval.sval.length = tempbufindex;
2314b725ae77Skettenis       lexptr = ++tokptr;
2315b725ae77Skettenis       return STRING_LITERAL;
2316b725ae77Skettenis     }
2317b725ae77Skettenis }
2318b725ae77Skettenis 
2319b725ae77Skettenis /* Read one token, getting characters through lexptr.  */
2320b725ae77Skettenis 
2321b725ae77Skettenis static int
yylex()2322b725ae77Skettenis yylex ()
2323b725ae77Skettenis {
2324b725ae77Skettenis   int c;
2325b725ae77Skettenis   int namelen;
2326b725ae77Skettenis   unsigned int i,token;
2327b725ae77Skettenis   char *tokstart;
2328b725ae77Skettenis 
2329b725ae77Skettenis  retry:
2330b725ae77Skettenis 
2331b725ae77Skettenis   prev_lexptr = lexptr;
2332b725ae77Skettenis 
2333b725ae77Skettenis   tokstart = lexptr;
2334b725ae77Skettenis 
2335b725ae77Skettenis   /* First of all, let us make sure we are not dealing with the
2336b725ae77Skettenis      special tokens .true. and .false. which evaluate to 1 and 0.  */
2337b725ae77Skettenis 
2338b725ae77Skettenis   if (*lexptr == '.')
2339b725ae77Skettenis     {
2340b725ae77Skettenis       for (i = 0; boolean_values[i].name != NULL; i++)
2341b725ae77Skettenis 	{
2342b725ae77Skettenis 	  if (strncmp (tokstart, boolean_values[i].name,
2343b725ae77Skettenis 		       strlen (boolean_values[i].name)) == 0)
2344b725ae77Skettenis 	    {
2345b725ae77Skettenis 	      lexptr += strlen (boolean_values[i].name);
2346b725ae77Skettenis 	      yylval.lval = boolean_values[i].value;
2347b725ae77Skettenis 	      return BOOLEAN_LITERAL;
2348b725ae77Skettenis 	    }
2349b725ae77Skettenis 	}
2350b725ae77Skettenis     }
2351b725ae77Skettenis 
2352b725ae77Skettenis   /* See if it is a special .foo. operator */
2353b725ae77Skettenis 
2354b725ae77Skettenis   for (i = 0; dot_ops[i].operator != NULL; i++)
2355b725ae77Skettenis     if (strncmp (tokstart, dot_ops[i].operator, strlen (dot_ops[i].operator)) == 0)
2356b725ae77Skettenis       {
2357b725ae77Skettenis 	lexptr += strlen (dot_ops[i].operator);
2358b725ae77Skettenis 	yylval.opcode = dot_ops[i].opcode;
2359b725ae77Skettenis 	return dot_ops[i].token;
2360b725ae77Skettenis       }
2361b725ae77Skettenis 
2362b725ae77Skettenis   switch (c = *tokstart)
2363b725ae77Skettenis     {
2364b725ae77Skettenis     case 0:
2365b725ae77Skettenis       return 0;
2366b725ae77Skettenis 
2367b725ae77Skettenis     case ' ':
2368b725ae77Skettenis     case '\t':
2369b725ae77Skettenis     case '\n':
2370b725ae77Skettenis       lexptr++;
2371b725ae77Skettenis       goto retry;
2372b725ae77Skettenis 
2373b725ae77Skettenis     case '\'':
2374b725ae77Skettenis       token = match_string_literal ();
2375b725ae77Skettenis       if (token != 0)
2376b725ae77Skettenis 	return (token);
2377b725ae77Skettenis       break;
2378b725ae77Skettenis 
2379b725ae77Skettenis     case '(':
2380b725ae77Skettenis       paren_depth++;
2381b725ae77Skettenis       lexptr++;
2382b725ae77Skettenis       return c;
2383b725ae77Skettenis 
2384b725ae77Skettenis     case ')':
2385b725ae77Skettenis       if (paren_depth == 0)
2386b725ae77Skettenis 	return 0;
2387b725ae77Skettenis       paren_depth--;
2388b725ae77Skettenis       lexptr++;
2389b725ae77Skettenis       return c;
2390b725ae77Skettenis 
2391b725ae77Skettenis     case ',':
2392b725ae77Skettenis       if (comma_terminates && paren_depth == 0)
2393b725ae77Skettenis 	return 0;
2394b725ae77Skettenis       lexptr++;
2395b725ae77Skettenis       return c;
2396b725ae77Skettenis 
2397b725ae77Skettenis     case '.':
2398b725ae77Skettenis       /* Might be a floating point number.  */
2399b725ae77Skettenis       if (lexptr[1] < '0' || lexptr[1] > '9')
2400b725ae77Skettenis 	goto symbol;		/* Nope, must be a symbol. */
2401b725ae77Skettenis       /* FALL THRU into number case.  */
2402b725ae77Skettenis 
2403b725ae77Skettenis     case '0':
2404b725ae77Skettenis     case '1':
2405b725ae77Skettenis     case '2':
2406b725ae77Skettenis     case '3':
2407b725ae77Skettenis     case '4':
2408b725ae77Skettenis     case '5':
2409b725ae77Skettenis     case '6':
2410b725ae77Skettenis     case '7':
2411b725ae77Skettenis     case '8':
2412b725ae77Skettenis     case '9':
2413b725ae77Skettenis       {
2414b725ae77Skettenis         /* It's a number.  */
2415b725ae77Skettenis 	int got_dot = 0, got_e = 0, got_d = 0, toktype;
2416b725ae77Skettenis 	char *p = tokstart;
2417b725ae77Skettenis 	int hex = input_radix > 10;
2418b725ae77Skettenis 
2419b725ae77Skettenis 	if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
2420b725ae77Skettenis 	  {
2421b725ae77Skettenis 	    p += 2;
2422b725ae77Skettenis 	    hex = 1;
2423b725ae77Skettenis 	  }
2424b725ae77Skettenis 	else if (c == '0' && (p[1]=='t' || p[1]=='T' || p[1]=='d' || p[1]=='D'))
2425b725ae77Skettenis 	  {
2426b725ae77Skettenis 	    p += 2;
2427b725ae77Skettenis 	    hex = 0;
2428b725ae77Skettenis 	  }
2429b725ae77Skettenis 
2430b725ae77Skettenis 	for (;; ++p)
2431b725ae77Skettenis 	  {
2432b725ae77Skettenis 	    if (!hex && !got_e && (*p == 'e' || *p == 'E'))
2433b725ae77Skettenis 	      got_dot = got_e = 1;
2434b725ae77Skettenis 	    else if (!hex && !got_d && (*p == 'd' || *p == 'D'))
2435b725ae77Skettenis 	      got_dot = got_d = 1;
2436b725ae77Skettenis 	    else if (!hex && !got_dot && *p == '.')
2437b725ae77Skettenis 	      got_dot = 1;
2438b725ae77Skettenis 	    else if (((got_e && (p[-1] == 'e' || p[-1] == 'E'))
2439b725ae77Skettenis 		     || (got_d && (p[-1] == 'd' || p[-1] == 'D')))
2440b725ae77Skettenis 		     && (*p == '-' || *p == '+'))
2441b725ae77Skettenis 	      /* This is the sign of the exponent, not the end of the
2442b725ae77Skettenis 		 number.  */
2443b725ae77Skettenis 	      continue;
2444b725ae77Skettenis 	    /* We will take any letters or digits.  parse_number will
2445b725ae77Skettenis 	       complain if past the radix, or if L or U are not final.  */
2446b725ae77Skettenis 	    else if ((*p < '0' || *p > '9')
2447b725ae77Skettenis 		     && ((*p < 'a' || *p > 'z')
2448b725ae77Skettenis 			 && (*p < 'A' || *p > 'Z')))
2449b725ae77Skettenis 	      break;
2450b725ae77Skettenis 	  }
2451b725ae77Skettenis 	toktype = parse_number (tokstart, p - tokstart, got_dot|got_e|got_d,
2452b725ae77Skettenis 				&yylval);
2453b725ae77Skettenis         if (toktype == ERROR)
2454b725ae77Skettenis           {
2455b725ae77Skettenis 	    char *err_copy = (char *) alloca (p - tokstart + 1);
2456b725ae77Skettenis 
2457b725ae77Skettenis 	    memcpy (err_copy, tokstart, p - tokstart);
2458b725ae77Skettenis 	    err_copy[p - tokstart] = 0;
2459b725ae77Skettenis 	    error ("Invalid number \"%s\".", err_copy);
2460b725ae77Skettenis 	  }
2461b725ae77Skettenis 	lexptr = p;
2462b725ae77Skettenis 	return toktype;
2463b725ae77Skettenis       }
2464b725ae77Skettenis 
2465b725ae77Skettenis     case '+':
2466b725ae77Skettenis     case '-':
2467b725ae77Skettenis     case '*':
2468b725ae77Skettenis     case '/':
2469b725ae77Skettenis     case '%':
2470b725ae77Skettenis     case '|':
2471b725ae77Skettenis     case '&':
2472b725ae77Skettenis     case '^':
2473b725ae77Skettenis     case '~':
2474b725ae77Skettenis     case '!':
2475b725ae77Skettenis     case '@':
2476b725ae77Skettenis     case '<':
2477b725ae77Skettenis     case '>':
2478b725ae77Skettenis     case '[':
2479b725ae77Skettenis     case ']':
2480b725ae77Skettenis     case '?':
2481b725ae77Skettenis     case ':':
2482b725ae77Skettenis     case '=':
2483b725ae77Skettenis     case '{':
2484b725ae77Skettenis     case '}':
2485b725ae77Skettenis     symbol:
2486b725ae77Skettenis       lexptr++;
2487b725ae77Skettenis       return c;
2488b725ae77Skettenis     }
2489b725ae77Skettenis 
2490b725ae77Skettenis   if (!(c == '_' || c == '$'
2491b725ae77Skettenis 	|| (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
2492b725ae77Skettenis     /* We must have come across a bad character (e.g. ';').  */
2493b725ae77Skettenis     error ("Invalid character '%c' in expression.", c);
2494b725ae77Skettenis 
2495b725ae77Skettenis   namelen = 0;
2496b725ae77Skettenis   for (c = tokstart[namelen];
2497b725ae77Skettenis        (c == '_' || c == '$' || (c >= '0' && c <= '9')
2498b725ae77Skettenis 	|| (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'));
2499b725ae77Skettenis        c = tokstart[++namelen]);
2500b725ae77Skettenis 
2501b725ae77Skettenis   /* The token "if" terminates the expression and is NOT
2502b725ae77Skettenis      removed from the input stream.  */
2503b725ae77Skettenis 
2504b725ae77Skettenis   if (namelen == 2 && tokstart[0] == 'i' && tokstart[1] == 'f')
2505b725ae77Skettenis     return 0;
2506b725ae77Skettenis 
2507b725ae77Skettenis   lexptr += namelen;
2508b725ae77Skettenis 
2509b725ae77Skettenis   /* Catch specific keywords.  */
2510b725ae77Skettenis 
2511b725ae77Skettenis   for (i = 0; f77_keywords[i].operator != NULL; i++)
2512b725ae77Skettenis     if (strncmp (tokstart, f77_keywords[i].operator,
2513b725ae77Skettenis 		 strlen(f77_keywords[i].operator)) == 0)
2514b725ae77Skettenis       {
2515b725ae77Skettenis 	/* 	lexptr += strlen(f77_keywords[i].operator); */
2516b725ae77Skettenis 	yylval.opcode = f77_keywords[i].opcode;
2517b725ae77Skettenis 	return f77_keywords[i].token;
2518b725ae77Skettenis       }
2519b725ae77Skettenis 
2520b725ae77Skettenis   yylval.sval.ptr = tokstart;
2521b725ae77Skettenis   yylval.sval.length = namelen;
2522b725ae77Skettenis 
2523b725ae77Skettenis   if (*tokstart == '$')
2524b725ae77Skettenis     {
2525b725ae77Skettenis       write_dollar_variable (yylval.sval);
2526b725ae77Skettenis       return VARIABLE;
2527b725ae77Skettenis     }
2528b725ae77Skettenis 
2529b725ae77Skettenis   /* Use token-type TYPENAME for symbols that happen to be defined
2530b725ae77Skettenis      currently as names of types; NAME for other symbols.
2531b725ae77Skettenis      The caller is not constrained to care about the distinction.  */
2532b725ae77Skettenis   {
2533b725ae77Skettenis     char *tmp = copy_name (yylval.sval);
2534b725ae77Skettenis     struct symbol *sym;
2535b725ae77Skettenis     int is_a_field_of_this = 0;
2536b725ae77Skettenis     int hextype;
2537b725ae77Skettenis 
2538b725ae77Skettenis     sym = lookup_symbol (tmp, expression_context_block,
2539b725ae77Skettenis 			 VAR_DOMAIN,
2540b725ae77Skettenis 			 current_language->la_language == language_cplus
2541b725ae77Skettenis 			 ? &is_a_field_of_this : NULL,
2542b725ae77Skettenis 			 NULL);
2543b725ae77Skettenis     if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2544b725ae77Skettenis       {
2545b725ae77Skettenis 	yylval.tsym.type = SYMBOL_TYPE (sym);
2546b725ae77Skettenis 	return TYPENAME;
2547b725ae77Skettenis       }
2548*11efff7fSkettenis     yylval.tsym.type
2549*11efff7fSkettenis       = language_lookup_primitive_type_by_name (current_language,
2550*11efff7fSkettenis 						current_gdbarch, tmp);
2551*11efff7fSkettenis     if (yylval.tsym.type != NULL)
2552b725ae77Skettenis       return TYPENAME;
2553b725ae77Skettenis 
2554b725ae77Skettenis     /* Input names that aren't symbols but ARE valid hex numbers,
2555b725ae77Skettenis        when the input radix permits them, can be names or numbers
2556b725ae77Skettenis        depending on the parse.  Note we support radixes > 16 here.  */
2557b725ae77Skettenis     if (!sym
2558b725ae77Skettenis 	&& ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10)
2559b725ae77Skettenis 	    || (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
2560b725ae77Skettenis       {
2561b725ae77Skettenis  	YYSTYPE newlval;	/* Its value is ignored.  */
2562b725ae77Skettenis 	hextype = parse_number (tokstart, namelen, 0, &newlval);
2563b725ae77Skettenis 	if (hextype == INT)
2564b725ae77Skettenis 	  {
2565b725ae77Skettenis 	    yylval.ssym.sym = sym;
2566b725ae77Skettenis 	    yylval.ssym.is_a_field_of_this = is_a_field_of_this;
2567b725ae77Skettenis 	    return NAME_OR_INT;
2568b725ae77Skettenis 	  }
2569b725ae77Skettenis       }
2570b725ae77Skettenis 
2571b725ae77Skettenis     /* Any other kind of symbol */
2572b725ae77Skettenis     yylval.ssym.sym = sym;
2573b725ae77Skettenis     yylval.ssym.is_a_field_of_this = is_a_field_of_this;
2574b725ae77Skettenis     return NAME;
2575b725ae77Skettenis   }
2576b725ae77Skettenis }
2577b725ae77Skettenis 
2578b725ae77Skettenis void
yyerror(msg)2579b725ae77Skettenis yyerror (msg)
2580b725ae77Skettenis      char *msg;
2581b725ae77Skettenis {
2582b725ae77Skettenis   if (prev_lexptr)
2583b725ae77Skettenis     lexptr = prev_lexptr;
2584b725ae77Skettenis 
2585b725ae77Skettenis   error ("A %s in expression, near `%s'.", (msg ? msg : "error"), lexptr);
2586b725ae77Skettenis }
2587*11efff7fSkettenis 
2588*11efff7fSkettenis 
2589