Related articles |
---|
Maintaining scope while parsing C with a YACC grammar eliben@gmail.com (eliben) (2011-04-25) |
Re: Maintaining scope while parsing C with a YACC grammar bobduff@shell01.TheWorld.com (Robert A Duff) (2011-04-26) |
Re: Maintaining scope while parsing C with a YACC grammar bobduff@shell01.TheWorld.com (Robert A Duff) (2011-04-26) |
Re: Maintaining scope while parsing C with a YACC grammar eliben@gmail.com (eliben) (2011-04-28) |
Re: Maintaining scope while parsing C with a YACC grammar bobduff@shell01.TheWorld.com (Robert A Duff) (2011-05-02) |
Re: Maintaining scope while parsing C with a YACC grammar torbenm@diku.dk (2011-05-03) |
Re: Maintaining scope while parsing C with a YACC grammar paul@paulbmann.com (Paul B Mann) (2011-05-06) |
[2 later articles] |
From: | eliben <eliben@gmail.com> |
Newsgroups: | comp.compilers |
Date: | Mon, 25 Apr 2011 05:14:42 -0700 (PDT) |
Organization: | Compilers Central |
Keywords: | parse, symbols, question |
Posted-Date: | 26 Apr 2011 01:29:59 EDT |
Hello,
Suppose I'm parsing C with a YACC-like grammar. While parsing this
code:
int main()
{
int a = 1;
{ /* internal scope */
int b = 2;
}
}
I want to know that the declaration "int b = 2" happens inside an
internal scope. My problem is that the way YACC grammars (and bottom-
up parsing in general) are structured, "int b = 2" is analyzed
*before* the whole block { int b = 2;} so I've seen "int b = 2" before
I've seen the complete block. What is the usual solution to this
problem?
Thanks in advance
[There's a couple of possibilities. One is to add separate rules for
the open and close braces with action code that increments and
decrements the nesting level, so you know when you reduce the
declaration what scope it is in. Another is to parse the whole thing
into an AST without trying to interpret the symbols other than making
pointers to a generic symbol table entry per name, then walk the AST
and add the scope and type info. Perhaps people will have other
suggestions. -John]
Return to the
comp.compilers page.
Search the
comp.compilers archives again.