Antlr4.5.3和Python 2.7:EOF问题

时间:2016-06-23 10:06:00

标签: python python-2.7 antlr antlr4 eof

我正在使用Antlr 4.5.3和Python 2.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

我使用编译:

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)

我试图解析的文件(是的,只是带换行符的单个整数值),名为&#39; test.rules&#39;:

19

运行脚本的输出:

> python RuleParser.py test.rules 
line 2:0 missing INT at '<EOF>'
19

这是如此基本,我无法理解为什么它不起作用。我已经尝试过在入口规则中有和没有结束EOF,但无济于事。

有没有人知道为什么这不起作用,或者更好的是,有一个解决方案?!

非常感谢!

0 个答案:

没有答案