0

私は文法のスタブを書きました(これまでのところコメントにのみ一致します)、それは私にエラーを与えています:

構文エラー: 無効な文字リテラル: <INVALID>

さらに、次のコマンドでエラーを追跡しました。

... ~LINE_ENDING* ...
LINE_ENDING     : ( '\n' | '\r' | '\r\n');

誰かがこれを修正するのを手伝ってくれますか?

4

2 に答える 2

2

演算子は~セットにのみ適用できます。レクサーでは、セットの要素は入力ストリームの文字です。言い換えれば、あなたはこれを持つことができます:

~(  'a'..'z'
|   'C'
|   '\r'
|   '\n'
)

ただし、これはセットではなく(2文字の)シーケンスであるため、これを使用することはできません。

~('\r\n')

発生した問題は、この2番目のケースの拡張です。

于 2009-12-10T02:33:49.683 に答える
1

なぜそのエラーが発生するのかわかりません (現時点では自分でテストする手段がありません)。おそらく、単一の文字 (\rまたは\n) または二重の文字 ( \r\n) を否定しているという事実が問題なのでしょうか?

試してみるとどうなりますか:

SingleLineComment
    :   '//' (~LineBreakChar)* (NewLine | EOF)
    ;

LineBreakChar
    :   '\r' | '\n'
    ;

NewLine
    :   '\r'? '\n' | '\r'
    ;

?

于 2009-12-09T18:39:00.193 に答える