21
votes

I'm working on a parser for C. I'm trying to find a list of all of the context-free derivations for C. Ideally it would be in BNF or similar. I'm sure such a thing is out there, but googling around hasn't given me much.

Reading the source code for existing parsers/compilers has proven to be far more confusing than helpful, as most that I've found are much more ambitious and complicated than the one I'm building.

2
I can confirm this is good. I built a flex/bison parser out of the LEX/YACC grammars from that page, just the other week.Morten Jensen
@CongXu, looks good, the only disadvantage that it has that I see that it is only historical C and neither C99 nor C11.Jens Gustedt
@JonathanLeffler no, you can still have a context free grammar by parsing type name in declarations as a terminal identifier and performing the check at semantic level. In fact, Clang does exactly that.Stefano Sanfilippo
@ThuyNguyen just the GNU preprocessor cpp. Mcpp is another alternative with a more permissive licenseMorten Jensen

2 Answers

9
votes

You could always use Annex A of the C11 standard itself. The freely available draft standard will work for your purposes, at http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf .

9
votes

This is an ANSI-C grammar, updated to C11 standard. Should serve your purpose.

http://www.quut.com/c/ANSI-C-grammar-y.html