Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ANTLR 4在Python 3中生成Java解析器_Java_Python 3.x_Antlr4 - Fatal编程技术网

使用ANTLR 4在Python 3中生成Java解析器

使用ANTLR 4在Python 3中生成Java解析器,java,python-3.x,antlr4,Java,Python 3.x,Antlr4,从这里使用Lexer和解析器: 使用antlr-4.6生成Python3目标 java-jar./antlr-4.6-complete.jar-Dlanguage=Python3./JavaLexer.g4 java-jar./antlr-4.6-complete.jar-Dlanguage=Python3./JavaParser.g4 但是,我无法在生成的解析器上运行compilationUnit()方法。这句话错了 ipdb>parser.compilationUnit() 编译单元中的

从这里使用Lexer和解析器:

使用antlr-4.6生成Python3目标

java-jar./antlr-4.6-complete.jar-Dlanguage=Python3./JavaLexer.g4

java-jar./antlr-4.6-complete.jar-Dlanguage=Python3./JavaParser.g4

但是,我无法在生成的解析器上运行compilationUnit()方法。这句话错了

ipdb>parser.compilationUnit()

编译单元中的第1063行“/home/sviyer/onmt fresh/java/JavaParser.py” localctx=JavaParser.CompilationUnitContext(self,self.\u ctx,self.state) 文件“/home/sviyer/.conda/envs/allennlp/lib/python3.6/site packages/antlr4/error/ErrorStrategy.py”,第223行,同步 引发输入不匹配异常(识别器) antlr4.error.Errors.InputMismatchException:无 在处理上述异常期间,发生了另一个异常: 回溯(最近一次呼叫最后一次): 文件“TestAntlr.py”,第13行,在 parser.compilationUnit() 文件“/home/sviyer/onmt-fresh/java/JavaParser.py”,第1063行,在CompileUnit中 localctx=JavaParser.CompilationUnitContext(self,self.\u ctx,self.state) 文件“/home/sviyer/.conda/envs/allennlp/lib/python3.6/site packages/antlr4/error/ErrorStrategy.py”,reportError中第126行 self.reportInputMismatch(识别器,e) 文件“/home/sviyer/.conda/envs/allennlp/lib/python3.6/site packages/antlr4/error/ErrorStrategy.py”,第266行,报告输入不匹配 +“应为”+e.getExpectedTokens().toString(识别器.文字名称,识别器.符号名称) 文件“/home/sviyer/.conda/envs/allennlp/lib/python3.6/site packages/antlr4/error/ErrorStrategy.py”,第522行,在getTokenErrorDisplay中 s=t.text AttributeError:“int”对象没有属性“text” 但是Lexer工作得很好,解析器解析它。我的代码是:

stream=antlr4.InputStream(代码)

lexer=JavaLexer(流)

toks=antlr4.CommonTokenStream(lexer)

parser=JavaParser(流)


你的代码不正确。试试这个:

code = open('sample.java', 'r').read()
codeStream = InputStream(code)
lexer = JavaLexer(codeStream)

# First lexing way
tokensStream = CommonTokenStream(lexer)
parser = JavaParser(tokensStream)

# Second lexing way
'''tokens = lexer.getAllTokens()
tokensSource = ListTokenSource(tokens)
tokensStream = CommonTokenStream(tokensSource)
parser = JavaParser(tokensStream)'''

tree = parser.compilationUnit()
print "Tree " + tree.toStringTree(recog=parser);

另外,请使用最新的稳定ANTLR版本(4.7)。

这与我的完全相同。有什么区别?不完全一样。您从同一个流创建lexer和parser。噢!我没注意到!谢谢我做了改变,一切都成功了!我必须做一些小的改变才能让样本运行
tokensSource=ListTokenSource.ListTokenSource(令牌)
tree=parser.compilation\u unit()
以及Python 3所需的
print(“tree”,tree.toString树(recog=parser))
code = open('sample.java', 'r').read()
codeStream = InputStream(code)
lexer = JavaLexer(codeStream)

# First lexing way
tokensStream = CommonTokenStream(lexer)
parser = JavaParser(tokensStream)

# Second lexing way
'''tokens = lexer.getAllTokens()
tokensSource = ListTokenSource(tokens)
tokensStream = CommonTokenStream(tokensSource)
parser = JavaParser(tokensStream)'''

tree = parser.compilationUnit()
print "Tree " + tree.toStringTree(recog=parser);