"Michael Gong" <mwgong@cs.utoronto.ca> writes:
To clarify myself a bit, is my following understanding correct ?
For this case:
int main() {
int foo;
foo abc;
}
The Gcc's grammar does parse it, ie. an "identifier" can follow
another "identifier".
Then in the semantic analysis, gcc checks to make sure the first
identifier "foo" must represent a type. In this case, it is not. So
an
error is reported.
I think you may be applying compiler theory to a real world compiler.
A better way to describe what happens would be to say that the lexer
looks up each identifier in the symbol table to see whether it is a
type before the parser proper ever sees it.
A truer way to describe what happens would be to observe that gcc uses
a recursive descent parser, not a grammar.
Ian