err_inherit1.y revision 296373
118334Speter%{ 218334Speter#include <stdlib.h> 390075Sobrien 4169689Skantypedef enum {cGLOBAL, cLOCAL} class; 550397Sobrientypedef enum {tREAL, tINTEGER} type; 618334Spetertypedef char * name; 790075Sobrien 818334Speterstruct symbol { class c; type t; name id; }; 990075Sobrientypedef struct symbol symbol; 1090075Sobrien 1190075Sobrienstruct namelist { symbol *s; struct namelist *next; }; 1290075Sobrientypedef struct namelist namelist; 1318334Speter 1490075Sobrienextern symbol *mksymbol(type t, class c, name id); 1590075Sobrien 1690075Sobrien#ifdef YYBISON 1790075Sobrien#define YYLEX_DECL() yylex(void) 1890075Sobrien#define YYERROR_DECL() yyerror(const char *s) 1990075Sobrien#endif 2090075Sobrien%} 2190075Sobrien 2218334Speter%token <cval> GLOBAL LOCAL 2390075Sobrien%token <tval> REAL INTEGER 2490075Sobrien%token <id> NAME 2590075Sobrien 2690075Sobrien%type <nlist> declaration namelist(<cval>, <tval>) locnamelist(<tval>) 2790075Sobrien%type <cval> class 2818334Speter%type <tval> type 2990075Sobrien 30169689Skan%destructor { 31169689Skan namelist *p = $$; 3218334Speter while (p != NULL) 3390075Sobrien { namelist *pp = p; 3418334Speter p = p->next; 3518334Speter free(pp->s); free(pp); 3618334Speter } 3718334Speter } <nlist> 3818334Speter 3918334Speter%union 4018334Speter{ 4118334Speter class cval; 4218334Speter type tval; 4318334Speter namelist * nlist; 4418334Speter name id; 4518334Speter} 4618334Speter 4718334Speter%start declaration 4818334Speter 4918334Speter%% 5018334Speterdeclaration: class type namelist($1, $2) 5118334Speter { $$ = $3; } 5218334Speter | type locnamelist($1) 5318334Speter { $$ = $2; } 54169689Skan ; 55169689Skan 5618334Speterclass : GLOBAL { $$ = cGLOBAL; } 57169689Skan | LOCAL { $$ = cLOCAL; } 58169689Skan ; 59169689Skan 6090075Sobrientype : REAL { $$ = tREAL; } 61169689Skan | INTEGER { $$ = tINTEGER; } 62169689Skan ; 63169689Skan 64169689Skannamelist($c, $t 65169689Skan