2013-02-14 8 views
9

以外の任意の文字に一致する私は、フラグメントの次deffinitionを持っている:はANTLR

fragment CHAR :'a'..'z'|'A'..'Z'|'\n'|'\t'|'\\'|EOF; 

は、今私は、文字列のための字句解析規則を定義する必要があります。私は次のようでした:

STRING : '"'(CHAR)*'"' 

ただし、文字列に私は新しい行「\ n」を除いて、私のすべての文字にマッチします。どのように私はそれを達成することができる任意のアイデア?

答えて

11

また、改行以外に"を除外する必要があります。これを試してみてください:

STRING : '"' ~('\r' | '\n' | '"')* '"' ; 

~がchar-セットを否定。私は私のCHARからのみ新しい行を否定したい

UTは、この私の知る限りより他に方法

を設定していない:

STRING : '"' CHAR_NO_NL* '"' ; 

fragment CHAR_NO_NL : 'a'..'z'|'A'..'Z'|'\t'|'\\'|EOF; 
+0

OK、どこの文字が文字列に行くのですか? – Andrey

+0

まあ申し訳ありませんが、私はantlrに新しいです...私が求めているのは、以前に文字列を一連のCHARとして定義しました。あなたのSTRINGの定義では、私はCHARをどこに置いたのかわかりません。それで、プログラムは、改行文字以外のすべての文字をCHARSから取り出すべきであることをどのように知るでしょうか? – Andrey

+0

はい、あなたのケースでは私のCHARセットから新しい行だけを無効にしたいと思います。私は新しい行を除いてすべてを取る – Andrey