レクサー文法を別のレクサー文法にインポートしようとしています。インポートされた文法は、異なるモードを使用します(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の制限ですか?