提问人:ongenz 提问时间:6/23/2016 最后编辑:peter.cycongenz 更新时间:9/20/2020 访问量:373
Antlr4.5.3 和 Python 2.7:EOF 问题
Antlr4.5.3 and Python 2.7 : EOF problems
问:
我正在使用 Antlr 4.5.3 和 Python 2.7 创建一个解析器,并且遇到了其他人已经提到的问题,即解析器不想识别文件末尾。
以下帖子指出这是一个已知错误,并建议在语法的输入规则中显式包含EOF终端符号的解决方案:
所以,很自然地,我这样做了。但是,当我尝试解析我的规则文件时,我仍然遇到错误。
这是我正在测试的玩具语法
grammar TestGrammar;
startRule : (basicRule)+ EOF ;
basicRule : INT ;
INT : [0-9]+ ;
WS : [ \t\r\n]+ -> skip ; // Define whitespace rule, ignore
我使用以下方法进行编译:
antlr4 -Dlanguage=Python2 TestGrammar.g4
我的 Python 代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from antlr4 import *
from TestGrammarLexer import TestGrammarLexer
from TestGrammarParser import TestGrammarParser
from RuleParserListener import RuleParserListener
import sys
def main(argv):
input = FileStream(argv[1])
lexer = TestGrammarLexer(input)
stream = CommonTokenStream(lexer)
parser = TestGrammarParser(stream)
listener = RuleParserListener()
parser.addParseListener(listener)
parser.startRule()
tree = parser.startRule()
walker = ParseTreeWalker()
walker.walk(listener, tree)
print input
if __name__ == '__main__':
main(sys.argv)
我尝试解析的文件(是的,只是一个带换行符的整数值)名为“test.rules”:
19
运行脚本的输出:
> python RuleParser.py test.rules
line 2:0 missing INT at '<EOF>'
19
这太基本了,我不明白为什么它不起作用。我尝试过在入口规则中使用和不使用结尾 EOF,但无济于事。
有谁知道为什么这不起作用,或者更好的是,有一个解决方案?!
多谢!
答: 暂无答案
评论