Related articles |
---|
YACC and inherited attributes pkeddie@axion.bt.co.uk (1992-03-11) |
Re: YACC and inherited attributes rockwell@socrates.umd.edu (Raul Deluth Miller-Rockwell) (1992-03-12) |
Re: YACC and inherited attributes max@nic.gac.edu (Max Hailperin) (1992-03-12) |
Newsgroups: | comp.compilers |
From: | Max Hailperin <max@nic.gac.edu> |
Keywords: | yacc, attribute |
Organization: | Gustavus Adolphus College, St. Peter, MN |
References: | 92-03-047 92-03-052 |
Date: | Thu, 12 Mar 1992 13:43:00 GMT |
In article 92-03-052 the moderator writes:
[You can use the $-1 hack to look at attributes in enclosing
productions, so long as you understand your contexts very well, but
I am not aware of any general solution that isn't really ugly. In
this particular case, you can build a data structure holding
references to x, y, and z, then do something to it when the
enclosing int declaration is reduced. -John]
Some readers may not be familiar with what the "$-1 hack" is (yes, I
know it's documented), and it doesn't help any that in this particular
case it is more likely to be the $0 hack than the $-1 hack. So, to
clarify, here are excerpts from an actual example (actually used with
Bison, not Yacc, but it should work with either):
%type <type> type
decl: type decl_idlist ';' {}
;
decl_idlist: ID {declare($<type>0, $1);}
| decl_idlist ',' ID {declare($<type>0, $3);}
;
Where the token 'int' is derivable from type, the token ID would
include 'x', 'y', 'z' above, and the productions for type all have
actions of the form {$$ = ...;} where the ... is of the right type for
the first argument to declare (which is also the type of the 'type'
union member declared in the %union{...} declaration).
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.