2012-12-12 2 views
3

나는 Antlr4 질문이 있습니다. 아래의 문법 발췌를 감안할 때. 방문자 내에서 선택적인 actualParameters 하위 트리가 있는지 테스트하는 올바른 방법은 무엇입니까?ANTLR4 방문자 하위 트리 확인

나는 procedureCallStatement 컨텍스트의 getChildCount 메소드를 시도했다. 또한 컨텍스트에서 null actualParameters 매개 변수를 테스트했습니다.

actualParameters 하위 트리가 없으면 방문하고 싶지 않습니다. 그렇게하면 예외가 발생합니다.

감사합니다.

켈빈 존슨

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

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

actualParameters : expressionStatement (';' expressionStatement)* ; 

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

답변

4

자동 생성 컨텍스트 방법 ProcedureCallStatementContext.actualParameters() 것 파싱 ​​된 경우 ActualParametersContext을 반환하고, 그렇지 않으면 null을 반환합니다.

이 같은 방문자에서의 사용을 만들 수 있습니다

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

    ... 
} 
+0

고마워요 280Z28 :) 이것은 내가하려는 일입니다. null에 대한 컨텍스트를 테스트하지만이 기술은 실패했습니다. 내가 오타가 있다고 밝혀졌습니다. 방금 다시 시도했는데 작동 중입니다. 컴퓨터가 너무 귀찮을 수 있습니다. 그들은 단지 당신이 그들에게 말하는 것을합니다! –

1

어느 ctx.getArgs()를 ctx.getActualParameters()를 호출하거나

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

를 레이블을 누른 후

+0

안녕하세요. 나는 ctx.actualParameters를 사용하고있다. 나는 그것이 get 접두어로 gernerated 아니 었 통지합니다. –

+0

으악! 네가 옳아. 그 어떤 것도 "얻지"않습니다. –

관련 문제