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