【问题标题】:Antlr: cleaning up string tokens in the lexer?Antlr:清理词法分析器中的字符串标记?
【发布时间】:2014-05-06 22:42:37
【问题描述】:

我正在编写一个组合语法,它具有权威指南中定义的标准 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

【问题讨论】:

标签: antlr antlr4


【解决方案1】:

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

请参阅 java 文档 here

或 C# 源代码here

CommonToken 实现了(I)WritableToken

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    相关资源
    最近更新 更多