我最近被授權爲虛構語言編寫ANTLR3語法。一切似乎都很好,但我遇到了一些小問題,我可以用一些幫助來做:ANTLR3字符串文字和禁止嵌套註釋
1)註釋在'/*'
和'*/'
之間,可能不是嵌套的。我知道如何自己實施評論('/*' .* '*/'
),但我會如何去禁止他們的嵌套?
2)字符串文字被定義爲一對雙引號之間的任何字符序列(雙引號和新行除外)。它們只能用在輸出語句中。我試圖這樣定義的:
output : OUTPUT (STRINGLIT | IDENT) ;
STRINGLIT : '"' ~('\r' | '\n' | '"')* '"' ;
出於某種原因,然而,解析器接受
OUTPUT "Hello,
World!"
和tokenises它作爲"Hello, \nWorld
。感嘆號或關閉"
去了,我不知道。可能與空白有關?
WHITESPACE : ('\t' | ' ' | '\n' | '\r' | '\f')+ { $channel = HIDDEN; } ;
任何意見將不勝感激 - 感謝您的時間! :)
非常感謝280Z28 - 你對非嵌套性質完全正確,我不相信我沒有發現!你的編輯確實代表了輸入 - 謝謝! 我需要澄清第2點:不應允許STRINGLIT跨多行分割,但使用我定義的語法,解釋器允許我這樣做,輸出顯示在上面。我不確定爲什麼會出現這種情況! – 2013-04-25 16:33:31
ANTLR 3 *解釋器*經常產生不正確的結果。您是否嘗試過運行實際的解析器? – 2013-04-25 16:43:06