私は、他の誰かが書いている ANTLR 文法用の Java アナライザーを作成中です。
ANTLR ファイルを結合して、元の文法 (.g) ファイルとは別のファイルを介して、括弧で囲まれた Java コードを ANTLR で生成された Java ファイルに追加することはできますか? 複合文法を調査しましたが、既存の文法を結合されたレクサー/パーサーとしてインポートできるようには見えません。
たとえば、次のようなことができますか。
Grammar.g
grammar Grammar;
statement : first=WORD ';' ;
WORD : ('A'..'z')* ;
JavaGrammar.g
grammar JavaGrammar;
imports Grammar;
@header {
package pkg;
import Container;
}
@lexer::header {
package pkg;
}
@members{
Container c = null;
public void setContainer(Container c) { this.c = c; }
@Override
protected Object recoverFromMismatchedToken(IntStream input, int ttype, BitSet follow) throws RecognitionException {
throw new MismatchedTokenException(ttype, input);
}
@Override
public Object recoverFromMismatchedSet(IntStream input, RecognitionException e, BitSet follow) throws RecognitionException {
throw e;
}
}
@rulecatch {
catch (RecognitionException e) {
throw e;
}
}
jStatement: statement { if(c!=null) c.add($first.text); } ;