我有这样的东西
fragment COMMENT_TEXT : ~(')')* ;
COMMENT : '(' COMMENT_TEXT ')' ;
SLASH_COMMENT : '//' COMMENT_TEXT '//' ;
comment : COMMENT | SLASH_COMMENT ;
并希望获得COMMENT_TEXT
字符串编码。这似乎是一个简单的任务,但我只是坚持了一段时间。这是侦听器的一部分:
public override void ExitComment(P.CommentContext context)
{
var cb = new CommentBlock();
cb.OriginalText = context.GetText();
_currentBlock = cb;
}
OriginalText
是带有大括号的注释。如何获得COMMENT_TEXT
本身?
请提供指向相关文章以解决此问题的链接,而不是Ultimate教程或参考手册本身。
例如,对于这样的输入:
(testCommentText123)
我想得到
CommentBlock.OriginalText == "testCommentText123"
答案 0 :(得分:2)
在ANTLR中没有访问令牌各个部分的特定方法。您只需要自己拆开琴弦即可。您可以使用正则表达式或通过检查标记类型(以查看它是斜线还是括号注释),然后使用Substring
来删除第一个和最后一个2或1(取决于注释的类型)来执行此操作)字符。
PS:您的SLASH_COMMENT
规则将匹配文件中第一个//
到最后一个//
的所有内容。那可能不是您想要的。