バリアントをチェックするために、パーサーでいくつかのサブルールをテストしようとしています。チェックしているルールは式ルールです
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 );
}