我正在尝试在我的解析器中测试一些子规则,以检查变体。我正在检查的规则是表达式规则
expression: expression PLUS expression # plusExpression
| expression IS NOT? NULL # nullExpression
| columnIdentifier # columnExpression
| literal # literalExpression
;
在生成的解析中,方法签名是:
public final ExpressionContext expression(int _p) throws RecognitionException {
我无法确定要作为 _p 参数传递的值。
当我在解析器中检查对表达式方法的调用时,我看到 0 被传递。但是,当我尝试直接调用 parser.expression(0) 时,我得到一个空指针异常。
调用此子规则以启用单元测试的推荐方法是什么?
作为参考,这是我正在尝试编写的单元测试平台的代码:
private Expression parseExpression( String expressionString ) {
DataProcessorLexer lexer = new DataProcessorLexer( new ANTLRInputStream( expressionString ) );
DataProcessorParser parser = new DataProcessorParser( new CommonTokenStream( lexer ) );
parser.removeErrorListeners();
parser.addErrorListener( new DiagnosticErrorListener() );
// Perform the Parse
ParseTree tree = parser.expression(0);
ParseTreeWalker walker = new ParseTreeWalker();
statementWalker = new StatementWalker();
walker.walk( statementWalker, tree );
return statementWalker.getExpressionValue( tree );
}