4

我正在尝试在我的解析器中测试一些子规则,以检查变体。我正在检查的规则是表达式规则

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 );
}
4

0 回答 0