2013-10-07 37 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