[英]Antlr how to escape quote symbol in quoted string
我想要一些語法來表示一個字符串,並用“引起來,並且字符串內的符號可以像\\一樣被引用。以下是我的語法:
fragment
NUM_LETTER : ('a'..'z'|'A'..'Z'|'0'..'9');
STRING_LITERAL : '"' (NUM_LETTER|'_'|('\\"'))* '"';
但這行不通。 我嘗試在AntlrWorks1.5中解釋“ \\” a,它在生成的STRING_LITERAL的語法樹中給出了MismatchedTokenException。我的語法哪一部分是錯誤的?
語法沒有錯。 您可能會收到此錯誤,因為您正在使用解釋器,這是有問題的。 請改用ANTLRWorks的調試器。 調試器將向您顯示輸入"\\"a"
的解析就很好了(按CTRL + D開始調試)。
另外,您的字符串規則可能看起來像這樣更好:
STRING_LITERAL : '"' (~('"' | '\\' | '\r' | '\n') | '\\' ('"' | '\\'))* '"';
換句話說,字符串的內容為零或更多:
~('"' | '\\\\' | '\\r' | '\\n')
要么
'\\\\' ('"' | '\\\\')
嘗試以下表達式:
STRING : '"' (options{greedy=false;}:( ~('\\'|'"') | ('\\' '"')))* '"';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.