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

ANTLR 4词法错误:'package'匹配异常问题求助

解决ANTLR 4语法中"mismatched input 'package' expecting 'package'"错误

要解析的目标代码:

package main () {
    name1;
    name2;
}

当前使用的Crimson语法:

// Parser rules
program 
    : packageDefinitionList EOF
    ;
packageDefinitionList
    : packageDefinition+
    ;
packageDefinition
    : Package Identifier parameterList packageBody
    ;
parameterList
    : parameter*
    ;
parameter
    : parameterType Identifier
    ;
packageBody
    : statement*
    ;
parameterType
    : Integer | Boolean
    ;
statement
    : Identifier
    ;
// Lexer rules
Package
    : 'package'
    ;
Integer
    : 'int'
    ;
Boolean
    : 'bool'
    ;
Identifier
    : NonDigit+
    ;
fragment NonDigit 
    : [a-zA-Z_]
    ;

错误原因及修正方案

出现该错误的核心原因是语法未处理空白字符,且解析规则未匹配目标代码中的括号、大括号、分号等结构,导致词法与语法解析逻辑混乱。具体修正如下:

  • 添加空白字符跳过规则
    ANTLR不会自动忽略空格、换行等空白字符,这些字符会被视为无效输入干扰解析。在词法规则中添加:
WS
    : [ \t\r\n]+ -> skip
    ;
  • 修正parameterList规则
    目标代码中参数列表被()包裹,原规则未定义括号逻辑,修改为:
parameterList
    : '(' parameter* ')'
    ;
  • 修正packageBody规则
    目标代码中包体被{}包裹,原规则未定义大括号逻辑,修改为:
packageBody
    : '{' statement* '}'
    ;
  • 修正statement规则
    目标代码中语句以分号结尾,原规则未处理分号,修改为:
statement
    : Identifier ';'
    ;

修正后的完整语法

// Parser rules
program 
    : packageDefinitionList EOF
    ;
packageDefinitionList
    : packageDefinition+
    ;
packageDefinition
    : Package Identifier parameterList packageBody
    ;
parameterList
    : '(' parameter* ')'
    ;
parameter
    : parameterType Identifier
    ;
packageBody
    : '{' statement* '}'
    ;
parameterType
    : Integer | Boolean
    ;
statement
    : Identifier ';'
    ;
// Lexer rules
Package
    : 'package'
    ;
Integer
    : 'int'
    ;
Boolean
    : 'bool'
    ;
Identifier
    : NonDigit+
    ;
fragment NonDigit 
    : [a-zA-Z_]
    ;

WS
    : [ \t\r\n]+ -> skip
    ;

将修正后的语法放入ANTLR Lab即可正常解析目标代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:55:27