3

レクサー文法を別のレクサー文法にインポートしようとしています。インポートされた文法は、異なるモードを使用します(XMLLexerの例ではモードINSIDEおよびPROC_INSTR)。

lexer grammar HTMLLexer;
import XMLLexer;

コンパイル時に、モード名に対応する変数が定義されていないというエラーが表示されます。

具体的な例として、(antlr4ブックの)XMLLexerの上にHTMLLexerを定義すると、次のエラーが発生します。

C:\Users\<user>\AppData\Local\Temp\TestRigTask-1360839400637\HTMLLexer.java:143: 
  error: cannot find symbol
  case 6: more(); pushMode(PROC_INSTR);  break;
                         ^
  symbol:   variable PROC_INSTR
  location: class HTMLLexer
1 error

トップレベルのレクサーのモードを追加のトークンで再定義することでこのエラーを克服できますが、他のモード内にインポートされたトークンは、デフォルトとして認識されません。

インポートされた部分をメインのレクサー定義にインライン化するとパーサーは機能しますが、インポート機能を使用して明確に分離したいと思います。(xml / htmlの例ではありませんが、別の場合です。)

インポートを使用して動作させることは可能ですか、それともantlr4の制限ですか?

4

1 に答える 1

4

マルチモード レクサー文法のインポートは、ANTLR 4 ではまだサポートされていません。次の問題は、この機能の進行状況を追跡します。

マルチモードの字句解析文法のインポートをサポート

于 2013-02-19T16:45:23.293 に答える