2013-08-20 2 views
0

AST 및 출력 의미 론적 경고를 다시 쓰려고합니다. 내가 렉서 규칙에 []를 사용하면 파서 규칙을 수락하지만 룰을 따르지 않습니다? 나는 "VAR"라는 파서 규칙이와 나는 이런 식으로 뭔가 수행하여 선언 된 경우 값을 테스트 할 것입니다 :[]로 트리 재 작성

-> ^(DECLARATION TYPE var[Main.symbols.test_declared($var.text)] expression?); 

을하지만 난이 얻을 :

unexpected token: Main.symbols.test_declared($var.text) 

이 얻을 수있는 방법이있다 이 주변?

대부분의 자습서 저는 LEXER 규칙 만 사용했지만 본인의 문법 (예 : IDENTIFIER는 var의 일부)을 기반으로 할 수 없습니다.

답변

1

ANTLR 3에서 var[xxx] 구문은 xxx을 인수로 사용하여 var 규칙에 전달 함을 의미합니다. 이것이 당신이하려는 일이 아니라면, 당신은 당신의 목표가 무엇인지 명확하게 밝혀야 할 것입니다. 재 작성 규칙 (-> 연산자의 오른쪽)에서 var 규칙은 이미 완료되었으므로 인수가 의미가 없습니다. 당신은 var와 결과를 참조 할 수 있습니다

내가 함께하려고하면 var에 심볼 테이블에 이미 선언 가능성이 tree.It의 출력을 인쇄 한 경우 내가 확인하기 위해 인수를 전달하고자합니다
+0

작동

-> ^(DECLARATION TYPE var expression?); 
렉서 규칙 "IDENTIFIER"는 있지만 "var"가 아닙니다. 왜 그런지 모르겠다 고요? 제 질문이 맞습니까? – Undisputed007

+0

이것은 달성하려는 코드 조각입니다. 그러나 여기에 사용 된 "VAR"은 LEXER 규칙입니다. 이후 나는이 예제를 따르기 때문에, 나는 "var"대신 파서 (parser) 규칙을 사용하므로 오류가 발생합니다. ^ ('='VAR exp) ->^('='VAR [Compile.symbolTable.lookupStaticName ($ VAR.text)] exp) – Undisputed007