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 : <AST>: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.dahlh...@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 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "il-antlr-interest" group. To post to this group, send email to il-antlr-interest@googlegroups.com To unsubscribe from this group, send email to il-antlr-interest+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=en -~----------~----~----~----~------~----~------~--~---