无关的输入错误

时间:2015-07-26 01:00:25

标签: antlr antlr4

我试图匹配具有相同开头但最终不同的东西,例如:

' +'东西+

' +' | ' - ' | ' /' | ' *'什么东西不同的东西是什么

我的以下代码是:

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

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

问题是我无法使其发挥作用,我似乎总是得到无关的输入'当我通过以' +'开头的rule2时出错(它试图匹配第一个并失败,因为它有一个不同的东西,但它不会落到第二个规则......

1 个答案:

答案 0 :(得分:1)

词法分析者将消耗所有' +'字符在到达解析器之前,因此rule1会混淆Antlr - 可能在生成解析器/词法分析器时出现错误或警告,并且可能为什么运行时错误消息似乎没有多少感。在继续之前应纠正所有代错误和警告。

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

这很可能是你想要的:

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

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