簡體   English   中英

Antlr如何在引用字符串中轉義引用符號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM