2017-12-10 6 views
0

私は、MySQLの.g4ファイルからParserとLexerをhttps://github.com/antlr/grammars-v4/tree/master/mysqlに構築しようとしています。私はエラー"添付ファイルに示されているように、パーサールールのチャンネルが"レクサーで許可されていません "と表示されます。このANTLR 4レクサーファイルで、「パーサールール」チャネルが「レクサーで許可されていません」というエラーはありますか?

This is the error in the Lexer file

+1

それはまったく意味がありません。これはIDEのエラーであり、文法ではありません。それはどんなIDEなのですか?私のANTLR4エクステンションを使ってVisual Studio Codeを試してみると、正しい詳細が得られます。 –

+1

おそらく、このIDEは古いバージョンのANTLRを使用しています。このような構文は4.5バージョンで登場しました。https://github.com/antlr/antlr4/blob/master/doc/lexer-rules.md#channel –

+0

@MikeLischke IDEはEclipseのANTLR4プラグインです。私はチャンネルラインをコメントアウトし、必要に応じてチャンネル番号をハードコードすることでそれを '修正'しました。 – nicomp

答えて

1

レクサーのみの文法は、レクサーのみのルールを含めることができます。私が考えていることは、あなたが使用しているツールが、このレクサー専用の文法では大文字で始まり、そのために外れているため、 "ルール" channelsをパーサルールとして解釈しているということです。

しかし、Mikeのコメントは正しいです。このchannels構文は、(現在)レクサーファイルの有効なANTLR文法です。 See this page.。それはレクサー文法ファイルに入っているはずなので、あなたが得ているエラーについて推測できるのは、使用しているツール(IDE)がchannelsカスタム仕様の構文を理解していないということだけです。

このgithubリストのすべての文法が完璧であるわけではなく、ANTLR本来のものではなく、様々な著者やときどき異なるバージョンのANTLRによって提供されていることに注意してください。

+2

'channels'は規則ではありませんが、文法に支配されたチャネルのリストであり、**だけがレクサー文法で有効です。 –

+0

Parserファイルには入っていますか? – nicomp

+1

いいえ、 'channels'コマンドは、レクサー文法でのみ許可されています。 –

関連する問題