无关输入错误

  • 本文关键字:错误 antlr antlr4
  • 更新时间 :
  • 英文 :


我正在尝试匹配一些开头相同但结尾不同的内容例如:

' + '东西+

'+' | '-' | '/' | '*' something something something somethingDifferentAtTheEnd

,下面的代码是:

something: // rule for something here
rule1: '+' something+
rule2: OPERATOR something something somethingDifferentAtTheEnd
ruleForSomethingDifferent: // goes here
OPERATOR: '+' | '-' | '/' | '*'

问题是我不能让这个工作,我似乎总是得到'多余的输入'错误,当我通过以'+'开始的rule2(它试图匹配第一个失败,因为有一个'somethingDifferentAtTheEnd',但它不属于第二条规则。

词法分析器将在'+'字符到达解析器之前消耗所有的'+'字符,因此rule1将使Antlr感到困惑-在生成解析器/词法分析器时可能会出现错误或警告,并且可能导致运行时错误消息似乎没有多大意义。应在继续之前纠正所有生成错误和警告。

在匹配规则中,总是首先选择匹配令牌序列最长的规则。

这可能是你想要的:

rule1    : Plus a+ ;
rule2    : operator a a b ;
a        : .... ;
b        : .... ;
operator : Plus | Minus | Div | Star ;
Plus : '+' ;
Minus: '-' ;
Div  : '/' ;
Star : '*' ;

相关内容

  • 没有找到相关文章

最新更新