49 lines
797 B
Plaintext
49 lines
797 B
Plaintext
|
%{
|
||
|
extern void mksymbol(int t, int c, int id);
|
||
|
|
||
|
#ifdef YYBISON
|
||
|
#define YYLEX_DECL() yylex(void)
|
||
|
#define YYERROR_DECL() yyerror(const char *s)
|
||
|
extern int YYLEX_DECL();
|
||
|
extern void YYERROR_DECL();
|
||
|
#endif
|
||
|
%}
|
||
|
|
||
|
%token GLOBAL LOCAL
|
||
|
%token REAL INTEGER
|
||
|
%token NAME
|
||
|
|
||
|
%start declaration
|
||
|
|
||
|
%%
|
||
|
declaration: class type namelist
|
||
|
{ $$ = $3; }
|
||
|
| type locnamelist
|
||
|
{ $$ = $2; }
|
||
|
;
|
||
|
|
||
|
class : GLOBAL { $$ = 1; }
|
||
|
| LOCAL { $$ = 2; }
|
||
|
;
|
||
|
|
||
|
type : REAL { $$ = 1; }
|
||
|
| INTEGER { $$ = 2; }
|
||
|
;
|
||
|
|
||
|
namelist: namelist NAME
|
||
|
{ mksymbol($0, $-1, $2); }
|
||
|
| NAME
|
||
|
{ mksymbol($0, $-1, $1); }
|
||
|
;
|
||
|
|
||
|
locnamelist:
|
||
|
{ $$ = 2; } /* set up semantic stack for <class>: LOCAL */
|
||
|
{ $$ = $-1; } /* copy <type> to where <namelist> expects it */
|
||
|
namelist
|
||
|
{ $$ = $3; }
|
||
|
;
|
||
|
%%
|
||
|
|
||
|
extern int YYLEX_DECL();
|
||
|
extern void YYERROR_DECL();
|