使用参数测试规则

时间:2013-02-14 15:36:07

标签: antlr4

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

expression: expression PLUS expression      # plusExpression
          | expression IS NOT? NULL         # nullExpression
          | columnIdentifier                # columnExpression
          | literal                         # literalExpression
          ;

在生成的解析中,方法签名为:

public final ExpressionContext expression(int _p) throws RecognitionException {

我无法确定要作为_p参数传递的值。

当我在解析器中检查对expression方法的调用时,我看到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 );
}

0 个答案:

没有答案