Related articles |
---|
Example of building an AST in Bison drewpvogel@gmail.com (eyeris) (2007-08-03) |
From: | eyeris <drewpvogel@gmail.com> |
Newsgroups: | comp.compilers |
Date: | Fri, 03 Aug 2007 15:22:34 -0700 |
Organization: | Compilers Central |
Keywords: | AST, question, comment |
Posted-Date: | 07 Aug 2007 09:43:31 EDT |
Can anyone here point me to an example Bison input file that shows how
to construct an AST? I've read a few papers on ASTs and I understand
their function and how to build one by hand, but I can't get my head
around how to handle some of my Bison rules. e.g.
item: ITEMDECL itemparts ;
itemparts: | itemparts itempart;
itempart: TEXT | KEYWORD;
In the action for the "item" rule, what would $2 represent? In my AST
it would be a series of sibling nodes, but how does Bison represent
them in C code? They can't be an array because TEXT and KEYWORD could
return different types, which would produce invalid C code. I fear I'm
missing something simple.
[In a LALR parser, you build the tree from the bottom up, e.g.:
itempart: TEXT { $$ = node(TEXTPART,$1,NULL); }
itemparts: itemparts itempart { $$ = node(PARTLIST, $1, $2); }
item: ITEMDECL itemparts { $$ = node(ITEM, $1, $2); }
where node(type,l,r) allocates a new node.
-John]
Return to the
comp.compilers page.
Search the
comp.compilers archives again.