2012-11-20 3 views
1

ANTLR을 사용하여 AST를 작성하고 있습니다. 내가 가진 내 문법 파일에서ANTLR : 다시 쓰기 규칙의 토큰에 대한 토큰

${identifier} 

: :이 문자열과 일치하는 생산을 작성하려면이 잘 작동

reference 
    : DOLLAR LBRACE IDENT RBRACE -> ^(NODE_VAR_REFERENCE IDENT) 
; 

. 내 자신의 어댑터를 사용하여 트리 노드를 방출합니다. 다시 쓰기 규칙을 사용하면 노드 2 개가 생성됩니다. 하나는 NODE_VAR_REFERENCE이고 하나는 IDENT입니다.

내가 원하는 것은 NODE_VAR_REFERENCE 토큰의 경우 하나의 노드 만 만들고이 노드의 "토큰"필드에 IDENT 토큰이 있어야합니다.

다시 쓰기 규칙을 사용하면 가능합니까? 감사.

답변

2

글쎄, IDENT을 노드 NODE_VAR_REFERENCE의 토큰으로 지정하면 NODE_VAR_REFERENCE이 전혀 없음을 의미합니다. 토큰은 유형 (NODE_VAR_REFERENCE 또는 IDENT)과이 토큰이 일치하는 텍스트로 구성됩니다. 트리 노드의 토큰이 IDENT이되도록하려면 텍스트는 모두 IDENT (NODE_VAR_REFERENCE 토큰을 잃거나 입력하십시오)이라는 텍스트를 의미합니다. 아마 당신은 무엇을 의미

는이 같은 일을 할 수있는 경우에 유형 NODE_VAR_REFERENCEIDENT의 텍스트가 하나의 노드를 가지고있다 :

내 말은 무엇
reference 
: DOLLAR LBRACE IDENT RBRACE -> NODE_VAR_REFERENCE[$IDENT.text] 
; 
+0

. 감사. – Antonio

+0

@Antonio를 환영합니다. –

관련 문제