我有一个规则匹配的字符串,看起来像这样:ANTLR的词法分析规则
STRING
: '"' (~('"' | '\\') | '\\' .)* '"'
;
我不想引号是标记文本的一部分。在Antlr2中,我会在引号后面加上'!'
,告诉Antlr不要将它们添加到文本中。
注意'!'下面是。
STRING
: '"'! (~('"' | '\\') | '\\' .)* '"'!
;
然而,在Antlr3我再也不能这样做,因为我得到的错误:
warning(149): Crv__.g:0:0: rewrite syntax or operator with no output option; setting output=AST
我不知道我是否可以使用一个重写规则这里我不知道该怎么写匹配所有标记'。'
我唯一的想法是抓住匹配的文本并且不用引号就可以返回它,但我不确定如何做到这一点,因为令牌尚未创建。
我正在使用C Antlr运行时。 我该如何做到这一点?
在这种情况下,您将要删除感叹号。此外,您现在只删除引号,但留下可能在其中跳出其他字符的反斜杠:我希望它们在引号时被删除从标记中剥离 –
@感谢!你是对的事实上,最初的问题是ANTLR 3不允许感叹号: )我从记忆中重新输入了我的答案。我已经更新了我的答案。 – chollida
没有比添加这种耗时的操作更好的解决方案吗? –