4 typedef enum {cGLOBAL, cLOCAL} class;
5 typedef enum {tREAL, tINTEGER} type;
8 struct symbol { class c; type t; name id; };
9 typedef struct symbol symbol;
11 struct namelist { symbol *s; struct namelist *next; };
12 typedef struct namelist namelist;
14 extern symbol *mksymbol(type t, class c, name id);
17 #define YYLEX_DECL() yylex(void)
18 #define YYERROR_DECL() yyerror(const char *s)
19 extern int YYLEX_DECL();
20 extern void YYERROR_DECL();
24 %token <cval> GLOBAL LOCAL
25 %token <tval> REAL INTEGER
28 %type <nlist> declaration namelist locnamelist
43 declaration: class type namelist
49 class : GLOBAL { $$ = cGLOBAL; }
50 | LOCAL { $$ = cLOCAL; }
53 type : REAL { $$ = tREAL; }
54 | INTEGER { $$ = tINTEGER; }
57 namelist: namelist NAME
58 { $$->s = mksymbol($<tval>0, $<cval>-1, $2);
62 { $$->s = mksymbol($<tval>0, $<cval>-1, $1);
68 { $<cval>$ = cLOCAL; } /* set up semantic stack for <class> = LOCAL */
69 { $<tval>$ = $<tval>-1; } /* copy <type> to where <namelist> expects it */
75 extern int YYLEX_DECL();
76 extern void YYERROR_DECL();