我正在使用TSX7代码到S7 SCL的代码转换器。在那里,我希望将原始TSX7代码作为生成的SCL代码中的注释。这个工作到目前为止很好,但我无法弄清楚如何在antrl规则中输出原始输入行,如:
使用TSX7输入线:
! INC W1469;0->W1465[3]
我喜欢SCL输出,如:
// OLD> ! INC W1469;0->W1465[3] <OLD
W1469 := W1469+1;
W1465 := 0;
为此,我在代码行规则上写了一个动作:
codelines returns [string code]
: codeline
{
_localctx.code = "// OLD> " + _localctx.codeline().GetText() + " <OLD" + Environment.NewLine;
_localctx.code += _localctx.codeline().code;
}
| commentline
{
_localctx.code = _localctx.commentline().code;
}
;
(实际的TSX7到SCL翻译在&#34;代码行&#34;规则中完成)
我得到的几乎没问题,但是我错过了字符串中的所有空格,我在调用&#34; _localctx.codeline()时得到了.GetText()&#34;:
// OLD> !INCW1469;0->W1465[3] <OLD
W1469 := W1469+1;
W1465 := 0;
(缺少INC和W1465之间的空间)
有没有办法让原始文本包含所有空格,用作规则的输入&#34;代码行&#34;?
答案 0 :(得分:0)
您必须直接从ANTLR流访问文本。这可能是带有方法CommonTokenStream
或getHiddenTokensToLeft()
的{{1}},但这是非常不切实际的。
然而,快速谷歌搜索将this question带入了应该回答您问题的问题。