views:

2154

answers:

4

Is there a place I can find Backus–Naur Form or BNF grammars for popular languages? Whenever I do a search I don't turn up much, but I figure they must be published somewhere. I'm most interested in seeing one for Objective-C and maybe MySQL.

+4  A: 

There are some links from w:BNF#Language Grammers.

I also found a page that lists grammars for Objective C.

eed3si9n
+4  A: 

FWIW, the MySQL grammar file (mysql-server/sql/sql_yacc.y) is open source and browseable at launchpad.net (though it's a bit slow and I got an error when I tried to pull up the specific file).

Also, a snapshot of the whole MySQL Server source is downloadable from dev.mysql.com.

Bill Karwin
The issue with reusing the grammar that is used by the MySQL server is that is depends on the tokens generated by the lexer. The lexer, having ~115 members, is neither easy to use nor easy to replace.
+10  A: 

you have to search on tools used to create grammars: "lex/yacc grammar", "antlr grammar" "railroad diagram"

http://www.antlr.org/grammar/list

Here's some grammar files


objective-c

http://www.omnigroup.com/mailman/archive/macosx-dev/2001-March/022979.html

http://www.cilinder.be/docs/next/NeXTStep/3.3/nd/Concepts/ObjectiveC/B_Grammar/Grammar.htmld/index.html


python

http://www.python.org/dev/summary/2006-04-16_2006-04-30/#the-grammar-file-and-syntaxerrors


javascript

http://tomcopeland.blogs.com/EcmaScript.html

http://www.ccs.neu.edu/home/dherman/javascript/


ruby

http://www.ruby-doc.org/docs/ruby-doc-bundle/Manual/man-1.4/yacc.html

Gene T
ObjC grammar here is pretty old - doesn't include exceptions, synchronize or properties.
porneL
+2  A: 

IIRC, BNF grammars are just different enough from what yacc/bison want as input to be really annoying :) If you intend to feed these files into a parser generator, you may want to look for files in the appropriate format. I recall seeing such files for Java, JavaScript and C++ at one point. Probably as part of Eclipse, Firefox and GCC, respectively, but I can't remember for sure. I would assume you can find pretty much any parser input file by finding an open source project that uses that language.

rmeador