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

ANTLR4 GUI解析树可视化工具无限运行无输出无异常问题求助

解决ANTLR4 4.13.1可视化解释器无限挂起问题

问题原因

你使用的Expr.g4语法包含直接左递归,尽管ANTLR4的代码生成器支持处理左递归,但可视化解释器(org.antlr.v4.gui.Interpreter)的实现逻辑未正确适配这种语法结构,导致解析过程陷入无限循环,表现为命令持续运行无输出。

修复方案

将语法修改为非左递归形式(保持等价的优先级逻辑),避免解释器陷入循环:

修改后的Expr.g4

grammar Expr;

prog:   expr EOF ;

// 拆分优先级层级,消除左递归
expr:   additiveExpr ;

additiveExpr: multiplicativeExpr (('+'|'-') multiplicativeExpr)* ;

multiplicativeExpr: primaryExpr (('*'|'/') primaryExpr)* ;

primaryExpr: INT | '(' expr ')' ;

NEWLINE : [\r\n]+ -> skip;
INT     : [0-9]+ ;

验证步骤

  1. 替换原Expr.g4为上述内容
  2. 重新执行命令:
    java -cp antlr4-4.13.1-complete.jar org.antlr.v4.gui.Interpreter Expr.g4 prog
    

此时会正常弹出可视化窗口,展示10+20*30的解析树结构。

额外验证(可选)

若需确认语法本身逻辑正确,可使用ANTLR4的TestRig工具测试:

java -cp antlr4-4.13.1-complete.jar org.antlr.v4.gui.TestRig Expr prog -gui prog

该工具能正常生成解析树,说明语法逻辑无问题,问题仅出在可视化解释器对左递归的处理上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:45:10