字符串递归antlr词法分析器

时间:2010-03-31 19:19:27

标签: string recursion antlr token lexer

如何在词法分析器中构建一个可以在此字符串中处理递归的令牌:

${*anything*${*anything*}*anything*}

2 个答案:

答案 0 :(得分:2)

是的,您可以在词法规则中使用递归。

采用以下示例:

${a ${b} ${c ${ddd} c} a}

将通过以下语法正确解析:

parse
  : DollarVar
  ;

DollarVar
  : '${' (DollarVar | EscapeSequence | ~Special)+ '}'
  ;

fragment 
Special
  :  '\\' | '$' | '{' | '}'
  ;

fragment
EscapeSequence
  :  '\\' Special
  ;

正如ANTLRWorks中的解释器所示:

alt text http://img185.imageshack.us/img185/5471/recq.png

答案 1 :(得分:0)

ANTLR的词法分析器确实支持递归,正如@BartK在帖子中擅长指出的那样,但你只会在解析器中看到一个令牌。如果您需要解释该令牌中的各个部分,您可能希望在解析器中处理它。

IMO,你最好在解析器中做一些事情:

variable: DOLLAR LBRACE id variable id RBRACE;

通过执行上述操作,您将看到所有必要的部分,并可以构建AST或以其他方式处理。