外来输入错误

Extraneous input error

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

'+'某事+

'+' | '-' | '/' | '*' something something something DifferentAtTheEnd

我的代码如下:

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

OPERATOR: '+' | '-' | '/' | '*'

问题是我无法让它工作,当我通过以“+”开头的规则 2 时,我似乎总是遇到 'extraneous input' 错误(它试图匹配第一个但失败了,因为有一个 'somethingDifferentAtTheEnd' 但它不符合第二条规则..

词法分析器将在所有“+”字符到达解析器之前消耗它们,因此 rule1 会混淆 Antlr - 生成 [=18 时可能会出现错误或警告=] 以及为什么 运行-time 错误消息似乎没有多大意义。应在继续之前更正所有生成错误和警告。

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

这可能是您想要的:

rule1    : Plus a+ ;
rule2    : operator a a b ;
a        : .... ;
b        : .... ;
operator : Plus | Minus | Div | Star ;

Plus : '+' ;
Minus: '-' ;
Div  : '/' ;
Star : '*' ;