【发布时间】: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。
【问题讨论】: