我可以构建一个令牌
ENDPLUS: '+' (options (greedy = false;):.) * '+'
;
只有在没有包含在ENDPLUS中的令牌PRE
之前,才会被词法分子考虑?
PRE: '<<'
;
感谢。
答案 0 :(得分:1)
不,AFAIK,这不可能“开箱即用”。通过使用属性input
并在其上调用LA(int)
(向前看),只有词法分析器或解析器中的标记流上有预测控制。例如,以下词法分析器规则:
Token
: {input.LA(2) == 'b'}? .
;
匹配任何单个字符,只要该单个字符后跟b
即可。遗憾的是,令牌流中没有input.LA(-1)
功能。 {...}?
部分被称为“句法谓词”,以防您想知道或想要谷歌。
这里给出了一个讨论,以及关于如何解决它的一些指示:http://www.antlr.org/pipermail/antlr-interest/2004-July/008673.html
请注意,它是{greedy=false;}
,而不是(greedy=false;)
。