You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ANTLR解析Python文件遇InputStream及<EOF>错误求助

解决ANTLR4 Python解析器的文件传入及EOF错误问题

一、直接传入.py文件的正确方式

无需手动读取文件内容,ANTLR的Python运行时提供了FileStream类,可直接加载.py文件作为输入流,替代InputStream,既简洁又能避免手动读取可能的编码问题。

示例代码:

from antlr4 import FileStream, CommonTokenStream
from Python3Lexer import Python3Lexer
from Python3Parser import Python3Parser

def main():
    # 直接用FileStream加载目标.py文件,指定编码确保正确读取
    input_stream = FileStream('your_script.py', encoding='utf-8')
    lexer = Python3Lexer(input_stream)
    stream = CommonTokenStream(lexer)
    parser = Python3Parser(stream)
    # 使用文件专用的语法入口(下文会解释)
    tree = parser.file_input()
    print(tree.toStringTree(recog=parser))

if __name__ == '__main__':
    main()

二、解决EOF相关错误

你遇到的mismatched input <EOF>或no viable alternative as input <EOF>错误,核心原因是调用了错误的语法入口方法:

  • single_input是为Python交互式环境设计的单行输入入口,仅支持单行语句/表达式结构,当解析完整.py文件时,文件结尾的EOF会不符合单行输入的规则,触发错误。
  • file_input是ANTLR Python3.g4中专门用于解析完整Python模块/文件的入口,支持多行代码、类定义、函数定义等完整文件结构,替换后即可解决EOF匹配问题。

只需将代码中的parser.single_input()替换为parser.file_input()即可。另外需确保要解析的.py文件包含合法的Python代码内容,空文件也会触发EOF错误。

内容的提问来源于stack exchange,提问作者Fari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:50:29