2014-02-28 2 views
0

파서와 대서양 표준시가 있습니다. 이제 Treewalkergrammar가 필요합니다. AST에는 "="토큰이 있습니다.Antlr Treewalker가 토큰을 찾을 수 없습니까?

Treewalker는에서 "="토큰을 찾아야한다

: "="상위 토큰 "="는 또는, 컴파일러는 "numericExpression"로보고 그것이 알게해야하지만

relationalExpression 
: (numericExpression) ( (^(EQUAL relationalExpression)) 
         | (^(NOT_EQUAL relationalExpression)) 
       )? 
; 

을 "="토큰이 아닙니다. 마지막으로 "입력시 실용적인 대안 없음 = '"이라는 오류가 발생합니다.

"="는 파서의 최상위 토큰이지만 treewalker는 아닙니다.

무엇이 잘못 되었나요?

당신은 아마 numericExpression 가능성이 EQUAL의 자식 대신에 그것의 형제 자사의 트리 형태로 relationalExpression를 작성하는 의미

답변

0

많은 감사합니다.

// tree parser rule: 
relationalExpression 
    : ^(EQUAL numericExpression relationalExpression) 
    | ^(NOT_EQUAL numericExpression relationalExpression) 
    | numericExpression 
    ; 

이 당신의 파서합니다 (AST 연산자 ^ 사용) 다음 형식 중 하나와 relationalExpression 규칙이 가정 물론이다

// parser rule: 
relationalExpression 
    : numericExpression 
    (EQUAL^ relationalExpression 
    | NOT_EQUAL^ relationalExpression 
    )? 
    ; 

또는 다음 다시 쓰기 연산자를 사용 -> :

// parser rule: 
relationalExpression 
    : numericExpression 
    (EQUAL relationalExpression 
     -> ^(EQUAL numericExpression relationalExpression) 
    | NOT_EQUAL relationalExpression 
     -> ^(NOT_EQUAL numericExpression relationalExpression) 
    )? 
    ; 
관련 문제