[antlr-interest] Using the python output with ANTLR3

Loring Craymer lgcraymer at yahoo.com
Thu Feb 19 16:17:05 PST 2009


Take a look at SWIG (http://www.swig.org/).  It may do everything that you want already.

--Loring



----- Original Message ----
> From: Dahlhoff Achim (CM-AI/PJ-VW37) <Achim.Dahlhoff at de.bosch.com>
> To: "antlr-interest at antlr.org" <antlr-interest at antlr.org>
> Sent: Thursday, February 19, 2009 7:10:04 AM
> Subject: [antlr-interest] Using the python output with ANTLR3
> 
> Hi all.
> 
> I just signed up on this list after contacting Mr. Niemann about the antlr 
> Python binding. He suggested checking here for a little help.
> 
> To transform a large bunch of java interface files to classes and stubs for a 
> (broad) Java-to-C interface, I would like to generate all of the wrapper code 
> and tables needed for JNI using a code-generator written in Python (I have more 
> experience in python and think it es better suited for creating text outputs).
> 
> When I launch ANTLR 3.1.1 with the Python output option on the Java 1.5 grammar 
> file (from the antlr website), I am experiencing some problems.
> 
> First of all, antlr outputs an internal error and some warnings. Then, the 
> generated python files contain a few lines of code, which are more java than 
> python and won't compile without some manual fixing. And when I'm done with 
> that, the generated parser won't work... :-(
> 
> Am I missing something here?
> 
> 
> 
> The output of antlr when taking the Java 1.5 grammer and just adding the 
> 'language=Python' option:
> 
> 
> C:\MIB\ANTLR>java -classpath ./antlrworks-1.2.1.jar org.antlr.Tool 
> grammar\Java.g
> 
> ANTLR Parser Generator  Version 3.1.1
> error(10):  internal error: eval tree parse error : :0:0: unexpected AST 
> node:
> 
> org.antlr.stringtemplate.language.ActionEvaluator.expr(Unknown Source)
> org.antlr.stringtemplate.language.ActionEvaluator.action(Unknown Source)
> org.antlr.stringtemplate.language.ASTExpr.evaluateExpression(Unknown Source)
> org.antlr.stringtemplate.language.ASTExpr.handleExprOptions(Unknown Source)
> org.antlr.stringtemplate.language.ASTExpr.write(Unknown Source)
> org.antlr.stringtemplate.StringTemplate.write(Unknown Source)
> org.antlr.stringtemplate.language.ConditionalExpr.writeSubTemplate(Unknown Sourc
> e)
> org.antlr.stringtemplate.language.ConditionalExpr.write(Unknown Source)
> org.antlr.stringtemplate.StringTemplate.write(Unknown Source)
> org.antlr.stringtemplate.language.ASTExpr.write(Unknown Source)
> org.antlr.stringtemplate.language.ASTExpr.writeAttribute(Unknown Source)
> org.antlr.stringtemplate.language.ActionEvaluator.action(Unknown Source)
> org.antlr.stringtemplate.language.ASTExpr.write(Unknown Source)
> org.antlr.stringtemplate.StringTemplate.write(Unknown Source)
> org.antlr.stringtemplate.language.ASTExpr.write(Unknown Source)
> org.antlr.stringtemplate.language.ASTExpr.writeAttribute(Unknown Source)
> org.antlr.stringtemplate.language.ActionEvaluator.action(Unknown Source)
> org.antlr.stringtemplate.language.ASTExpr.write(Unknown Source)
> org.antlr.stringtemplate.StringTemplate.write(Unknown Source)
> org.antlr.codegen.CodeGenerator.write(CodeGenerator.java:1275)
> org.antlr.codegen.Target.genRecognizerFile(Target.java:94)
> org.antlr.codegen.CodeGenerator.genRecognizer(CodeGenerator.java:460)
> org.antlr.Tool.generateRecognizer(Tool.java:420)
> org.antlr.Tool.process(Tool.java:287)
> org.antlr.Tool.main(Tool.java:72)
> 
> 
> 
> Then, the python interpreter stumbles over this:
> 
>   if not ((t1.getLine() == t2.getLine() && .....
> 
> (python requires 'and', not '&&'.)
> 
> or this:
> 
>   protected boolean enumIsKeyword = true;
> 
> that looks like java. Python wood need something like    enumIsKeyword=True
> Finally this:
> 
>   if (!enumIsKeyword) _type=Identifier;
> 
> Here, the ! operator instead of 'not' is used, and the colon is missing.
> It should be:    if not enumIsKeyword: _type=Identifier
> 
> 
> When I fix these little bugs manually in the antlr output and try to feed it 
> with a sample java file, the parser fails:
> 
> Traceback (most recent call last):
>   File "testprog.py", line 59, in ?
>     main(sys.argv[1:])
>   File "testprog.py", line 35, in main
>     parser.compilationUnit()
>   File "grammar\JavaParser.py", line 361, in compilationUnit
>     alt8 = self.dfa8.predict(self.input)
>   File "C:\Dahlhoff\MIB\ANTLRtest\antlr3\dfa.py", line 92, in predict
>     c = input.LA(1)
>   File "C:\Dahlhoff\MIB\ANTLRtest\antlr3\streams.py", line 859, in LA
>     return self.LT(i).type
>   File "C:\Dahlhoff\MIB\ANTLRtest\antlr3\streams.py", line 801, in LT
>     self.fillBuffer()
>   File "C:\Dahlhoff\MIB\ANTLRtest\antlr3\streams.py", line 669, in fillBuffer
>     t = self.tokenSource.nextToken()
>   File "C:\Dahlhoff\MIB\ANTLRtest\antlr3\recognizers.py", line 1133, in 
> nextToken
>     self._state.tokenStartCharIndex = self.input.index()
> TypeError: find/rfind/index/rindex() takes at least 1 argument (0 given)
> 
> 
> 
> Thanks for any help with this.
> 
> Achim.
> ____________________________________
> 
> . (CM-AI/PJ-VW37)
> 
> Blaupunkt GmbH
> Robert-Bosch-Straße 200
> 31139 Hildesheim
> www.blaupunkt.com
> 
> Tel. 5395
> Fax -
> PC-Fax -
> Mobil -
> Achim.Dahlhoff at de.bosch.com
> 
> Sitz: Hildesheim, Registergericht: Amtsgericht Hildesheim HRB 120
> Aufsichtsratsvorsitzender: Volkmar Denner; Geschäftsführung: Uwe Thomas,
> Egbert Hellwig, Dirk Hoheisel, Michael Klemm
> Blaupunkt GmbH - Ein Unternehmen der Bosch Gruppe
> 
> 
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: 
> http://www.antlr.org/mailman/options/antlr-interest/your-email-address



      


More information about the antlr-interest mailing list