Antlr4.5.3和python2.7:EOF问题

2024-04-27 02:28:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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

这太基本了,我不明白为什么它不起作用。我试过在入口规则中加上或不加结束符,但都没用。在

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

非常感谢!在


Tags: 文件fromimportparserinputmain规则int