antlr4 python 绑定 java8 缺少开始规则
antlr4 python binding for java8 missing start rule
我正在尝试在其中一种语法上使用 antlr here (specifically, java 8):
$ antlr4 -Dlanguage=Python3 grammars-v4/java/java8/Java8Lexer.g4
$ antlr4 -Dlanguage=Python3 grammars-v4/java/java8/Java8Parser.g4
这一步看起来很顺利,当我检查目录时:
$ ls -l grammars-v4/java/java8/*.py
-rw-r--r-- 1 root root 56583 Nov 30 14:32 grammars-v4/java/java8/Java8Lexer.py
-rw-r--r-- 1 root root 798326 Nov 30 14:32 grammars-v4/java/java8/Java8Parser.py
-rw-r--r-- 1 root root 79928 Nov 30 14:32 grammars-v4/java/java8/Java8ParserListener.py
一切都在那里。尽管如此,当我尝试使用 the hello world example:
from antlr4 import *
from Java8Lexer import Java8Lexer
from Java8Parser import Java8Parser
input_stream = FileStream("/main.java")
lexer = Java8Lexer(input_stream)
stream = CommonTokenStream(lexer)
parser = Java8Parser(stream)
tree = parser.startRule()
我收到一个错误:
AttributeError: 'Java8Parser' object has no attribute 'startRule'
在您的例子中,解析器方法 startRule
对应于 .g4
语法中定义的解析器规则。
查看 Java 语法,其中有一个带有 EOF
的解析器规则,名为 compilationUnit
。改用它:
tree = parser.compilationUnit()
我正在尝试在其中一种语法上使用 antlr here (specifically, java 8):
$ antlr4 -Dlanguage=Python3 grammars-v4/java/java8/Java8Lexer.g4
$ antlr4 -Dlanguage=Python3 grammars-v4/java/java8/Java8Parser.g4
这一步看起来很顺利,当我检查目录时:
$ ls -l grammars-v4/java/java8/*.py
-rw-r--r-- 1 root root 56583 Nov 30 14:32 grammars-v4/java/java8/Java8Lexer.py
-rw-r--r-- 1 root root 798326 Nov 30 14:32 grammars-v4/java/java8/Java8Parser.py
-rw-r--r-- 1 root root 79928 Nov 30 14:32 grammars-v4/java/java8/Java8ParserListener.py
一切都在那里。尽管如此,当我尝试使用 the hello world example:
from antlr4 import *
from Java8Lexer import Java8Lexer
from Java8Parser import Java8Parser
input_stream = FileStream("/main.java")
lexer = Java8Lexer(input_stream)
stream = CommonTokenStream(lexer)
parser = Java8Parser(stream)
tree = parser.startRule()
我收到一个错误:
AttributeError: 'Java8Parser' object has no attribute 'startRule'
在您的例子中,解析器方法 startRule
对应于 .g4
语法中定义的解析器规则。
查看 Java 语法,其中有一个带有 EOF
的解析器规则,名为 compilationUnit
。改用它:
tree = parser.compilationUnit()