java - Antlr 解析器规则无法匹配指定的词法分析器规则

标签 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

最佳答案

试试这个。

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);
        }
    };

关于java - Antlr 解析器规则无法匹配指定的词法分析器规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34257717/

相关文章:

java - 使用 JNDI 进行分布式配置

python - 人类可读的时间表语法,如我的应用程序中的功能?

parsing - ANTLR 4 中的重叠 token

java - 如何使用 ANTLR 获取直到文件末尾的所有内容?

javascript - 在 Jison 中制作数组

java - 与服务器连接的 AsyncTask

Java 计时器 - 调用的函数未完成!

javascript - 找不到带有排除模板 JAVA + Spring 的 CSS 和 JS 文件

parsing - 将 BNF 转换为 Parsec 程序有什么技巧吗?

sql - 在哪里可以找到有关 ODBC SQL 方言/语法的信息,包括。内置函数/运算符?