使用ANTLR4表达规则

时间:2015-07-02 11:48:17

标签: antlr4 greedy non-greedy

我必须定义一个表达以下语句的规则:{x in y | x> 0}。 对于理解“x in y”的第一部分,我有一个子规则:

FIRSTPART: Name "in" Name

,而名字可以是一切。

我的问题是我不想要贪婪的行为。所以,应该解析直到“|”签字然后停下来。由于我是ANTLR4的新手,我不知道如何实现这一点。

最好的问候,

1 个答案:

答案 0 :(得分:0)

通常,词法分析器/解析器规则应表示源输入流的允许语法。

源如何匹配任何规则或子规则的评估(和结果)是语义问题 - 输入是否与特定子规则匹配,以及是否应控制规则最终如何评估。

通常,语义是作为树行走分析的一部分实现的。您可以使用备用子规则标签(#inExpr等)创建易于区分的树节点以进行分析:

comprehension : LBrace expression property? RBrace ;
expression    : ....
              | Name In Name     #inExpr
              | Name BinOp Name  #binExpr
              | ....
              ;
property      : Provided expression ;

BinOp    : GT | LT | GTE | .... ;
Provided : '|'  ;
In       : 'in' ;