3
원본 규칙에서 특정 조건이 발생했을 때 다시 쓰기 규칙을 올바르게 형식 지정하는 방법에 대해 스스로에게 의문의 여지가 있습니다.ANTLR 3.x - 다시 쓰기 규칙의 형식을 지정하는 방법
이를 다시 작성하는 적절한 방법은 무엇입니까 :
unaryExpression: op=('!' | '-') t=term
-> ^(UNARY_EXPR $op $t)
ANTLR 날 라벨 및 "OP ="와 함께 괄호 안에 아무것도 브랜드처럼 보이지 않는다 실패합니다. 또한 시도해 보았습니다.
unaryExpression: ('!' | '-') t=term
-> ^(UNARY_EXPR ('!' | '-') $t)
Antlr이 '또는'을 좋아하지 않습니다. 문법 오류가 발생합니다.
토큰 이름으로 문자 클래스를 바꾸면이 문제가 해결되지만 내 문법과 관련된 다른 문제가 발생합니다.
--- 편집 ----
두 번째 문제가 추가되었습니다.
multExpression : unaryExpression (MULT_OP unaryExpression)* ;
아주 간단합니다 :
: 내 기대 (가상) 그래서 같은 끝낼 것을MULT
토큰 부모의 모든 일치하는 토큰을 둘러싸 나를 트리 문법이 규칙의 형식을 도와주세요
MULT
o
|
o---o---o---o---o
| | | | |
'3' '*' '6' '%' 2
고맙습니다. 나는 전에 TOKEN [$ op]을 사용하는 것에 대해 들어 본 적이 없지만, 나는 넓은 전문가는 아니다. 이 문맥에서 그것을 사용하는 것은 내가 찾고있는 결과를 만들어 내지 못했다. UNARY_EXPR 토큰은 허수이며이 컨텍스트에서 이어지는 두 개의 토큰을 설명하는 데 사용됩니다. 그러나 op = x | op = y는 정확하게 정확하게 수행하지 못했습니다. – Kivin