bobg+@andrew.cmu.edu (Robert Steven Glickstein) (06/21/89)
I've written a parser for ANSI-C using YACC (adhering strictly to the grammar given in K&R, second edition) that doesn't work. Despite the claim in section A13 that "this grammar is acceptable to the YACC parser-generator"(modulo some changes, which I've made), it in fact is not; it's not even LR(1). I get syntax errors in which the parser can't decide if it's seeing a function-definition or a declaration (while working on an external-declaration). Here's the very beginning of the grammar: file ::= external-declaration | file external-declaration external-declaration ::= function-definition | declaration function-definition ::= opt-declaration-specifiers declarator opt-declaration-list compound-statement declaration ::= declaration-specifiers opt-init-declarator-list ';' Now consider the input extern struct foo bar[]; Every token up to (and including) the ']' represents a legal sequence to begin either a function-definition or a declaration. My parser chooses to begin parsing this as a function-definition, and it barfs when it sees a ';' instead of a compound-statement. On the other hand, struct foo *bar() {} is also legal for both function-definitions and declarations (up to the ')'), but the parser chooses to parse this as a declaration, and barfs when it sees a '{' instead of a ';'. Can any YACC gurus advise me on how to proceed? I will gladly mail you a copy of my YACC source if you can take a look at it. Thanks, -Bob Glickstein