2 struct parser_param *param,
9 typedef enum {cGLOBAL, cLOCAL} class;
10 typedef enum {tREAL, tINTEGER} type;
13 struct symbol { class c; type t; name id; };
14 typedef struct symbol symbol;
16 struct namelist { symbol *s; struct namelist *next; };
17 typedef struct namelist namelist;
24 extern symbol *mksymbol(type t, class c, name id);
27 #define YYLEX_DECL() yylex(void)
28 #define YYERROR_DECL() yyerror(const char *s)
32 %token <cval> GLOBAL LOCAL
33 %token <tval> REAL INTEGER
36 %type <nlist> declaration
37 %type <nlist> locnamelist
40 %type <nlist> namelist
42 %destructor { if (!param->rtrn) close($$); } <file>
49 free(pp->s); free(pp);
64 declaration: class type namelist'(' class ',' type ')'
66 | type locnamelist '(' class ')'
70 class : GLOBAL { $$ = cGLOBAL; }
71 | LOCAL { $$ = cLOCAL; }
74 type : REAL { $$ = tREAL; }
75 | INTEGER { $$ = tINTEGER; }
78 namelist: namelist NAME
79 { $$->s = mksymbol($<tval>0, $<cval>0, $2);
83 { $$->s = mksymbol(0, 0, $1);
88 locnamelist: namelist '(' LOCAL ',' type ')'
93 extern int YYLEX_DECL();
94 extern void YYERROR_DECL();