【发布时间】:2010-03-29 16:22:36
【问题描述】:
我可以构造一个令牌
ENDPLUS: '+' (options (greedy = false;):.) * '+'
;
仅当它前面有一个标记 PRE 而不包括在 ENDPLUS 中时才被词法分析器考虑?
PRE: '<<'
;
谢谢。
【问题讨论】:
标签: parsing antlr grammar token lexer
我可以构造一个令牌
ENDPLUS: '+' (options (greedy = false;):.) * '+'
;
仅当它前面有一个标记 PRE 而不包括在 ENDPLUS 中时才被词法分析器考虑?
PRE: '<<'
;
谢谢。
【问题讨论】:
标签: parsing antlr grammar token lexer
不,AFAIK,这不可能“开箱即用”。通过使用属性input 并在其上调用LA(int) (look-ahead),只有 look-ahead-control 在词法分析器或解析器中的标记流上。例如,以下词法分析器规则:
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;)。
【讨论】: