Maintaining scope while parsing C with a YACC grammar

eliben <eliben@gmail.com>
Mon, 25 Apr 2011 05:14:42 -0700 (PDT)

          From comp.compilers

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]
| List of all articles for this month |

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]



Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.