Lexer antlr3令牌问题

时间:2010-03-29 16:22:37

标签: parsing antlr grammar token lexer

我可以构建一个令牌

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

只有在没有包含在ENDPLUS中的令牌PRE之前,才会被词法分子考虑?

PRE: '<<'
       ;

感谢。

1 个答案:

答案 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;)