0

私は最近、架空の言語の ANTLR3 文法を作成する任務を負っています。他のすべては問題ないようですが、いくつかの小さな問題があり、いくつかの助けを借りて行うことができます:

1) コメントは と の間'/*'にあり'*/'、入れ子にすることはできません。コメント自体を実装する方法は知っていますが ( '/*' .* '*/')、コメントのネストを禁止するにはどうすればよいですか?

2) 文字列リテラルは、二重引用符のペアの間の任意の文字列 (二重引用符と改行を除く) として定義されます。これらは、出力ステートメントでのみ使用できます。私はこれを次のように定義しようとしました:

output : OUTPUT (STRINGLIT | IDENT) ;
STRINGLIT : '"' ~('\r' | '\n' | '"')* '"' ;

ただし、何らかの理由で、パーサーは受け入れます

OUTPUT "Hello,
World!"

としてトークン化し"Hello, \nWorldます。感嘆符や締めくくりがどこに"行ったのか、私にはわかりません。たぶん空白と関係がありますか?

WHITESPACE : ( '\t' | ' ' | '\n' | '\r' | '\f' )+ { $channel = HIDDEN; } ;

アドバイスをいただければ幸いです。お時間をいただきありがとうございます。:)

4

1 に答える 1