我正在为其他人正在编写的 ANTLR 语法创建 Java 分析器。
是否可以合并 ANTLR 文件,以便我可以通过与原始语法 (.g) 文件分开的文件将括号中的 Java 代码添加到 ANTLR 生成的 Java 文件中?我研究了复合语法,但似乎我不能将现有语法作为组合词法分析器/解析器导入。
例如,我可以这样做:
语法.g
grammar Grammar;
statement : first=WORD ';' ;
WORD : ('A'..'z')* ;
Java语法.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); } ;