外来输入错误
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 : '*' ;
我正在尝试匹配开头相同但结尾不同的内容,例如:
'+'某事+
'+' | '-' | '/' | '*' 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 : '*' ;