我必须定义一个表达以下语句的规则:{x in y | x> 0}。 对于理解“x in y”的第一部分,我有一个子规则:
FIRSTPART: Name "in" Name
,而名字可以是一切。
我的问题是我不想要贪婪的行为。所以,应该解析直到“|”签字然后停下来。由于我是ANTLR4的新手,我不知道如何实现这一点。
最好的问候,
答案 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' ;