1

我可以构造一个令牌吗

ENDPLUS: '+' (options (greedy = false;):.) * '+'
       ;

PRE仅当它前面有一个令牌而不包括在 ENDPLUS 中时才被词法分析器考虑?

PRE: '<<'
       ;

谢谢。

4

1 回答 1

1

不,AFAIK,这不可能“开箱即用”。通过使用属性并在其上调用(前瞻),只能对词法分析器或解析器中的标记流进行前瞻控制。例如,以下词法分析器规则:inputLA(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;)

于 2010-03-29T19:21:10.573 回答