我可以构造一个令牌吗?
ENDPLUS: '+' (options (greedy = false;):.) * '+'
;只有在前面有一个令牌PRE而不包括在ENDPLUS中的情况下,才会被lexer考虑?
PRE: '<<'
;谢谢。
发布于 2010-03-29 19:21:10
不,AFAIK,这是不可能的。只有通过使用属性input并在其上调用LA(int) (前瞻性)来对lexer或解析器中的令牌流进行前瞻性控制。例如,以下lexer规则:
Token
: {input.LA(2) == 'b'}? .
;匹配任何单个字符,只要该单个字符后面跟着一个b。不幸的是,在令牌流中没有input.LA(-1)特性可查看。{...}?部分被称为“句法谓词”,如果您想知道,或者想搜索它。
本文讨论了如何解决这个问题,并给出了一些建议:http://www.antlr.org/pipermail/antlr-interest/2004-July/008673.html。
注意,这是{greedy=false;},而不是(greedy=false;)。
https://stackoverflow.com/questions/2539539
复制相似问题