Antlr解析器规则无法匹配任何指定的词法分析器规则

时间:2015-12-13 23:34:05

标签: java antlr grammar antlr4

我有一个正在进行中的小型Antlr语法,如下所示:

filterExpression returns [ActivityPredicate pred]
    : NAME OPERATOR (PACE | NUMBER) {
        if ($PACE != null) {
            $pred = new SingleActivityPredicate($NAME.text, Operator.fromCharacter($OPERATOR.text), $PACE.text);
        } else {
            $pred = new SingleActivityPredicate($NAME.text, Operator.fromCharacter($OPERATOR.text), $NUMBER.text);
        }
    };

OPERATOR: ('>' | '<' | '=') ;

NAME: ('A'..'Z' | 'a'..'z')+ ;

NUMBER: ('0'..'9')+ ('.' ('0'..'9')+)? ;

PACE: ('0'..'9')('0'..'9')? ':' ('0'..'5')('0'..'9');

WS: (' ' | '\t' | '\r'| '\n')+ -> skip;

希望解析像:

这样的东西

distance = 4pace < 8:30

但是,这两个输入都导致null PACENUMBER,同时尝试解析:

enter image description here

但是,删除该选项只需选择PACE就可以正常工作(其他方式也可以正常工作,选择NUMBER):

filterExpression returns [ActivityPredicate pred]
        : NAME OPERATOR PACE { ... };

enter image description here

为什么当我提供选项时,他们都是null

1 个答案:

答案 0 :(得分:1)

试试这个。

filterExpression returns [ActivityPredicate pred]
    : n=NAME o=OPERATOR (p=PACE | i=NUMBER) {
        if ($PACE != null) {
            $pred = new SingleActivityPredicate(
                $n.text, Operator.fromCharacter($o.text), $p.text);
        } else {
            $pred = new SingleActivityPredicate(
                $n.text, Operator.fromCharacter($o.text), $i.text);
        }
    };