3

Antlr4 について質問があります。以下の文法の抜粋を考えると。actualParameters訪問者内のオプションのサブツリー の存在をテストする正しいアプローチは何ですか?

procedureCallStatement コンテキストの getChildCount メソッドを試しました。また、コンテキストの null actualParameters パラメータについてもテストしました。

存在しない場合は、actualParameters サブツリーにアクセスしたくありません。これを行うと、例外が発生します。

ありがとうございました!

ケルビン・ジョンソン

program : statement (';' statement)* ';'?;

statement : CALLPREFIX('(' actualParameters? ')')?  #procedureCallStatement;

actualParameters : expressionStatement (';' expressionStatement)* ;

expressionStatement : '(' expressionStatement ')'  #parensExpression
| IDENT'[' expressionStatement ']' #subscript
...
4

2 に答える 2

4

自動生成されたコンテキスト メソッドProcedureCallStatementContext.actualParameters()は、ActualParametersContext解析された場合は を返し、そうでない場合は を返しnullます。

次のようなビジターで使用できます。

public T VisitProcedureCallStatement(ProcedureCallStatementContext ctx) {
    if (ctx.actualParameters() != null) {
        // do something here
    }

    ...
}
于 2012-12-13T03:59:14.560 に答える
1

ctx.getActualParameters() を呼び出すか、ラベルを付けます

statement : CALLPREFIX('(' args=actualParameters? ')')?  #procedureCallStatement;

次にctx.getArgs()を使用します

于 2012-12-13T01:36:49.377 に答える