2009-06-11 5 views
1

필자는 ANTLR 문법을 사용하며 선택적 매개 변수를 허용하는 언어로 함수를 정의하고 있습니다. 선택적 매개 변수가 코드 생성 블록 내에서 전달되는지 여부를 어떻게 확인할 수 있습니까?ANTLR : 선택적 매개 변수에 대한 문법 테스트 (? 연산자 사용)

나는 기본적으로이 가상의 나무 문법 문 같은 것을 할 수있는 구문을 찾고 있어요

: 문서에

myFunc returns [int retval] : 'myFunc' arg1=number arg2=string? 
{ 
    // Check if arg2 exists. 
    if (/* arg2 exists */) { $retval = $arg1.value + 10; } 
    else { $retval = $arg1.value; } 
} 

어떤 제안이나 포인터는 크게 감사합니다!

+0

, 내가 ANTLR3 문서에 대한 찾은 최고의 자원은 여기에 있습니다 : http://java.ociweb.com/mark/programming/ANTLR3/ANTLR3.pdf – Han

답변

3

arg2! = null인지 여부 만 확인하면됩니다.

0

스콧의 대답은 매력처럼 작동합니다!

는 시간 $의 나머지가 필요한 반면, 달러 기호 ($가),없이 을 인 if 문에 ANTLR 정의 변수를 참조하는 방법을 끈다. 또한

, 당신이 더 일반적으로 다음 대신 하나 개의 선택 매개 변수를 하드 코딩의 당신이 당신의 코드 구문 분석을 가질 수 있습니다 원하는 경우

if (arg2.tree != NULL) 
0

를 사용하여 간단한 문자열보다 복잡한 구조의 존재 여부 확인 그래서 같은 여러 요소 : 관심있는 사람들을 위해

myFunc returns [int retval] 
: 'myFunc' funcArgs 
{ 
    // Here you can run through the funcArg Tree and do what 
    // ever you'd like here. 
} 

protected 
funcArgs 
: arg (COMMA arg)* 
관련 문제