xref: /freebsd/contrib/byacc/test/err_inherit4.y (revision 242b24828472137ec4411826b86e753d49bd2c39)
10c8de5b0SBaptiste Daroussin %locations
20c8de5b0SBaptiste Daroussin %{
30c8de5b0SBaptiste Daroussin #include <stdlib.h>
40c8de5b0SBaptiste Daroussin 
50c8de5b0SBaptiste Daroussin typedef enum {cGLOBAL, cLOCAL} class;
60c8de5b0SBaptiste Daroussin typedef enum {tREAL, tINTEGER} type;
70c8de5b0SBaptiste Daroussin typedef char * name;
80c8de5b0SBaptiste Daroussin 
90c8de5b0SBaptiste Daroussin struct symbol { class c; type t; name id; };
100c8de5b0SBaptiste Daroussin typedef struct symbol symbol;
110c8de5b0SBaptiste Daroussin 
120c8de5b0SBaptiste Daroussin struct namelist { symbol *s; struct namelist *next; };
130c8de5b0SBaptiste Daroussin typedef struct namelist namelist;
140c8de5b0SBaptiste Daroussin 
150c8de5b0SBaptiste Daroussin extern symbol *mksymbol(type t, class c, name id);
160c8de5b0SBaptiste Daroussin 
170c8de5b0SBaptiste Daroussin #ifdef YYBISON
180c8de5b0SBaptiste Daroussin #define YYLEX_DECL() yylex(void)
190c8de5b0SBaptiste Daroussin #define YYERROR_DECL() yyerror(const char *s)
200c8de5b0SBaptiste Daroussin #endif
210c8de5b0SBaptiste Daroussin %}
220c8de5b0SBaptiste Daroussin 
230c8de5b0SBaptiste Daroussin %token <cval> GLOBAL LOCAL
240c8de5b0SBaptiste Daroussin %token <tval> REAL INTEGER
250c8de5b0SBaptiste Daroussin %token <id>   NAME
260c8de5b0SBaptiste Daroussin 
270c8de5b0SBaptiste Daroussin %type <nlist> declaration namelist(<cval>, <tval>) locnamelist(<tval>)
280c8de5b0SBaptiste Daroussin %destructor	{ } <nlist>
290c8de5b0SBaptiste Daroussin %type <cval>  class
300c8de5b0SBaptiste Daroussin %type <tval>  type
310c8de5b0SBaptiste Daroussin 
320c8de5b0SBaptiste Daroussin %destructor	{
330c8de5b0SBaptiste Daroussin 		  namelist *p = $$;
340c8de5b0SBaptiste Daroussin 		  while (p != NULL)
350c8de5b0SBaptiste Daroussin 		  { namelist *pp = p;
360c8de5b0SBaptiste Daroussin 		    p = p->next;
370c8de5b0SBaptiste Daroussin 		    free(pp->s); free(pp);
380c8de5b0SBaptiste Daroussin 		  }
390c8de5b0SBaptiste Daroussin 		} <nlist>
400c8de5b0SBaptiste Daroussin 
410c8de5b0SBaptiste Daroussin %union
420c8de5b0SBaptiste Daroussin {
430c8de5b0SBaptiste Daroussin     class	cval;
440c8de5b0SBaptiste Daroussin     type	tval;
450c8de5b0SBaptiste Daroussin     namelist *	nlist;
460c8de5b0SBaptiste Daroussin     name	id;
470c8de5b0SBaptiste Daroussin }
480c8de5b0SBaptiste Daroussin 
490c8de5b0SBaptiste Daroussin %start declaration
500c8de5b0SBaptiste Daroussin 
510c8de5b0SBaptiste Daroussin %%
520c8de5b0SBaptiste Daroussin declaration: class type namelist($1, $2)
53*c5b5d71aSJung-uk Kim 	{ $$ = $3; @$ = @3; }
540c8de5b0SBaptiste Daroussin 	| type locnamelist($1)
55*c5b5d71aSJung-uk Kim 	{ $$ = $2; @$ = @-1; }
560c8de5b0SBaptiste Daroussin 	;
570c8de5b0SBaptiste Daroussin 
580c8de5b0SBaptiste Daroussin class	: GLOBAL { $$ = cGLOBAL; }
590c8de5b0SBaptiste Daroussin 	| LOCAL  { $$ = cLOCAL; }
600c8de5b0SBaptiste Daroussin 	;
610c8de5b0SBaptiste Daroussin 
620c8de5b0SBaptiste Daroussin type	: REAL    { $$ = tREAL; }
630c8de5b0SBaptiste Daroussin 	| INTEGER { $$ = tINTEGER; }
640c8de5b0SBaptiste Daroussin 	;
650c8de5b0SBaptiste Daroussin 
namelist($c,$t)660c8de5b0SBaptiste Daroussin namelist($c, $t): namelist NAME
670c8de5b0SBaptiste Daroussin 	    { $$->s = mksymbol($t, $c, $2);
680c8de5b0SBaptiste Daroussin 	      $$->next = $1;
690c8de5b0SBaptiste Daroussin 	    }
700c8de5b0SBaptiste Daroussin 	| NAME
710c8de5b0SBaptiste Daroussin 	    { $$->s = mksymbol($t, $c, $1);
720c8de5b0SBaptiste Daroussin 	      $$->next = NULL;
730c8de5b0SBaptiste Daroussin 	    }
740c8de5b0SBaptiste Daroussin 	;
750c8de5b0SBaptiste Daroussin 
locnamelist($t)760c8de5b0SBaptiste Daroussin locnamelist($t): namelist
770c8de5b0SBaptiste Daroussin 	{ $$ = $1; @$ = @2; }
780c8de5b0SBaptiste Daroussin 	;
790c8de5b0SBaptiste Daroussin %%
800c8de5b0SBaptiste Daroussin 
810c8de5b0SBaptiste Daroussin extern int YYLEX_DECL();
820c8de5b0SBaptiste Daroussin extern void YYERROR_DECL();
83