私は文法のスタブを書きました(これまでのところコメントにのみ一致します)、それは私にエラーを与えています:
構文エラー: 無効な文字リテラル: <INVALID>
さらに、次のコマンドでエラーを追跡しました。
... ~LINE_ENDING* ...
LINE_ENDING : ( '\n' | '\r' | '\r\n');
誰かがこれを修正するのを手伝ってくれますか?
私は文法のスタブを書きました(これまでのところコメントにのみ一致します)、それは私にエラーを与えています:
構文エラー: 無効な文字リテラル: <INVALID>
さらに、次のコマンドでエラーを追跡しました。
... ~LINE_ENDING* ...
LINE_ENDING : ( '\n' | '\r' | '\r\n');
誰かがこれを修正するのを手伝ってくれますか?
演算子は~
セットにのみ適用できます。レクサーでは、セットの要素は入力ストリームの文字です。言い換えれば、あなたはこれを持つことができます:
~( 'a'..'z'
| 'C'
| '\r'
| '\n'
)
ただし、これはセットではなく(2文字の)シーケンスであるため、これを使用することはできません。
~('\r\n')
発生した問題は、この2番目のケースの拡張です。
なぜそのエラーが発生するのかわかりません (現時点では自分でテストする手段がありません)。おそらく、単一の文字 (\r
または\n
) または二重の文字 ( \r\n
) を否定しているという事実が問題なのでしょうか?
試してみるとどうなりますか:
SingleLineComment
: '//' (~LineBreakChar)* (NewLine | EOF)
;
LineBreakChar
: '\r' | '\n'
;
NewLine
: '\r'? '\n' | '\r'
;
?