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) を直接呼び出そうとすると、null ポインター例外が発生します。

単体テストを有効にするためにこのサブルールを呼び出す推奨される方法は何ですか?

参考までに、私が書こうとしている単体テスト リグのコードを次に示します。

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