我正在用antlr4.5.3和python2.7创建一个解析器,遇到了其他人已经提到的一个问题,即解析器不想识别文件末尾。在
下面的帖子指出这是一个已知的错误,并建议在语法的输入规则中显式包含EOF终端符号的解决方案:
ANTLR mismatched input '<EOF>'
所以,很自然,我这么做了。但是,当我试图解析我的规则文件时仍然会遇到一个错误。在
这是我正在测试的一个玩具语法
grammar TestGrammar;
startRule : (basicRule)+ EOF ;
basicRule : INT ;
INT : [0-9]+ ;
WS : [ \t\r\n]+ -> skip ; // Define whitespace rule, ignore
我使用以下方法编译:
^{pr2}$我的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)
我试图解析的文件(是的,只有一个带换行符的整数值)名为'测试规则':
19
运行脚本的输出:
> python RuleParser.py test.rules
line 2:0 missing INT at '<EOF>'
19
这太基本了,我不明白为什么它不起作用。我试过在入口规则中加上或不加结束符,但都没用。在
有没有人知道为什么这不起作用,或者更好的是,有一个解决方案?!在
非常感谢!在
目前没有回答
相关问题 更多 >
编程相关推荐