在ANTLR4语法中逃避两个字符转义序列的最佳方法是什么?

时间:2015-07-24 01:00:28

标签: antlr antlr4

我正在尝试为类似于胡子的模板语言编写ANTLR4解析器。这使用散布在普通文本文件中的{{...}}标记。如果模板需要在OPEN_TAG {旁边包含并发出{{,则词法分析器/解析器可能存在问题。我相信应该有一种方法来编写解析器:

This is a left brace {{{tag logic}} and here are two left braces {{{tag logic}}{

转换为

This is a left brace { and here are two left braces {{

或者:

  1. 如何告诉词法分析器仅将OPEN_TAG与{{匹配 除{以外的任何内容,将前导{吸收到前一个TEXT中 图案?
  2. 是否有更好的"为{{提供转义序列的方法?
  3. 谢谢!

1 个答案:

答案 0 :(得分:0)

使用模式处理词法分析器中的标签。

LBrace   : '{' ;
RBrace   : '}' ;
TOpenTag  : '{{' -> pushMode(tagLogic) ;


mode tagLogic ;

TLBrace   : '{' -> type(LBrace) ;
TRBrace   : '}' -> type(RBrace) ;
TCloseTag : '}}' -> popMode     ;
TLogic    : [a-zA-Z0-9]+        ;
TWs       : [ \t\r\n]+ -> skip  ;