Xref: utzoo comp.unix.questions:14417 comp.lang.c:19516 Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!rochester!pt.cs.cmu.edu!andrew.cmu.edu!bobg+ From: bobg+@andrew.cmu.edu (Robert Steven Glickstein) Newsgroups: comp.unix.questions,comp.lang.c Subject: Yacc probs w/ANSI-C Message-ID: Date: 21 Jun 89 00:13:43 GMT Organization: Information Technology Center, Carnegie Mellon, Pittsburgh, PA Lines: 38 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