我可以构造一个令牌吗
ENDPLUS: '+' (options (greedy = false;):.) * '+'
;
PRE
仅当它前面有一个令牌而不包括在 ENDPLUS 中时才被词法分析器考虑?
PRE: '<<'
;
谢谢。
不,AFAIK,这不可能“开箱即用”。通过使用属性并在其上调用(前瞻),只能对词法分析器或解析器中的标记流进行前瞻控制。例如,以下词法分析器规则:input
LA(int)
Token
: {input.LA(2) == 'b'}? .
;
匹配任何单个字符,只要该单个字符后跟一个b
. input.LA(-1)
不幸的是,在令牌流中没有可以查看的功能。这{...}?
部分称为“句法谓词”,以防您想知道或想用 Google 搜索它。
此处给出了讨论以及有关如何解决它的一些指示:http ://www.antlr.org/pipermail/antlr-interest/2004-July/008673.html
请注意,它是{greedy=false;}
,不是(greedy=false;)
。