[antlr-interest] C grammar problem

Jan Obdrzalek obdrzalek at gmail.com
Fri Jan 5 07:10:34 PST 2007


Hello,

I think I've encountered a problem in the cgram C grammar. The code
below can pass "gcc -c -std=c89" (i.e. should be allright as far as
ISO C89 standard is concerned), but GnuCParser from cgram crashes on
it.

<<< test.c <<<
void a(void){
       int a=5;
       struct s *ps=({
       typedef int T;
       T t;
       &a;
       });
       return;
}
>>> test.c >>>

I've tried to investigate the problem and found that it looks to be
caused by the following sequence of steps:
- when the parser first encounters the initializer of ps (which is a
compound statement),  the action of opening new scope is not executed
because the parser is in "guess mode"
- for the same reason the new type T not added to the symbol table
- when "T t" is encountered, the check whether T is a tyoedef name
fails, since there is no typedef name T in our current symbol table

Have I missed something, or is it genuine error in cgram? Is there an
easy way to fix this?

Thanks,
Jan


More information about the antlr-interest mailing list