Antlr4.5.3 和 Python 2.7:EOF 问题

Antlr4.5.3 and Python 2.7 : EOF problems

提问人:ongenz 提问时间:6/23/2016 最后编辑:peter.cycongenz 更新时间:9/20/2020 访问量:373

问:

我正在使用 Antlr 4.5.3 和 Python 2.7 创建一个解析器,并且遇到了其他人已经提到的问题,即解析器不想识别文件末尾。

以下帖子指出这是一个已知错误,并建议在语法的输入规则中显式包含EOF终端符号的解决方案:

ANTLR 输入“<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,但无济于事。

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

多谢!

python-2.7 antlr4 eof

评论


答: 暂无答案