2013-10-07 66 views
4

我对如何在ANTLR4中捕获带引号的字符串感到困惑。在ANTLR中使用转义引号捕获字符串文字

目前,这个词法分析器规则并不象我期望的那样标记化。

样本字符串是"=\""。我尝试了很多不同的方法来捕捉这些,但是我对我错误地做了些什么感到茫然。我真的很感谢有关这方面最佳实践的一些见解。非常感谢!

ESCAPED_QUOTE : '\"'; 
QUOTED_STRING : '"' (ESCAPED_QUOTE | ~('\n'|'\r'))*? '"'; 
+0

我想出了这个方法。它似乎工作,但我想知道这是否是最好的方式去做。谢谢! ESCAPED_QUOTE:'\''; QUOTE:'“'; QUOTED_STRING:QUOTE(ESCAPED_QUOTE |〜('\ n'|'\ r'|''''))* QUOTE; –

回答

6

上述规则有两个问题。

  1. 你实际上并没有像你想象的那样逃避你的报价。你打算使用'\\"'
  2. 您的ESCAPED_QUOTE规则不会自行形成标记,因此它应该是fragment规则。

这两个变化的结果将是以下几点:

fragment ESCAPED_QUOTE : '\\"'; 
QUOTED_STRING : '"' (ESCAPED_QUOTE | ~('\n'|'\r'))*? '"'; 
+0

我将规则复制到我的语法并进行了测试,当出现特殊字符时会出现错误如':','!','''等。〜('\ n'|'\ r')正则表达式应该接受除换行符之外的任何内容吗? – yoshi