Antlr:清理词法分析器中的字符串标记?

时间:2014-05-06 22:42:37

标签: antlr antlr4

我正在编写一个组合语法,该语法具有在权威指南中定义的标准STRING标记;

STRING: '"' (ESC|.)*? '"' ;
fragment
ESC : '\\"' | '\\\\' ; // 2-char sequences \" and \\

我注意到的一件事是STRING令牌的.Text属性始终是输入中看到的引用的转义形式,就像这样;

// from grammar like rule: title:STRING;
var title = context.title.Text; // == \"my string\"

这意味着我必须纠正'解析器中的字符串,剥离引号和处理转义字符,无论我在哪里引用字符串标记。这感觉就像在解析器中完成了一项令人兴奋的工作。

我想知道是否有办法改变词法分析器的输出,以便词法分析器可以显示清理内容?我注意到生成的词法分析器上有很多可能的覆盖,但我注意到IToken.Text是只读的,所以我无法看到如何改变它。

其他有用的地方是;

  • 双引号字符串,例如"foo"
  • 单引号字符串,例如'sql string'
  • 变量引用,例如$foo,其中有趣的文字为foo

1 个答案:

答案 0 :(得分:0)

您还可以检查令牌是否实现WritableToken并设置值。

请参阅java doc here

或C#来源here

CommonToken实施(I)WritableToken