2012-12-01 3 views
3

다음은 예제입니다. 이 ($ type)은 ANTLR4에 의해 인식되지 않습니다.

Number //options { backtrack=true; } 
    : IntegerLiteral { $type = IntegerLiteral; } 
    | FloatLiteral { $type = FloatLiteral; } 
    | IntegerLiteral { $type = IntegerLiteral; } 
    ; 

무엇으로 대체 할 수 있습니까?

감사합니다.

ANTLR의 V4에서
+0

대신 280Z28의 답변을 수락 할 수 있습니까? 선호하는 방법입니다 (대상에 종속적이지 않습니다). –

답변

2

이 수행

은 ANTLR 4,이 새로운 구문
Number 
: IntegerLiteral {setType(IntegerLiteral);} 
| ... 
5

: 그러나

Foo 
    : Bar -> type(SomeType) 
    | ... 
    ; 

단지 Number 규칙을 제거해야 당신이 위에있는 규칙과 FloatLiteralIntegerLiteral 규칙이 단편 규칙이 아닌지 확인하십시오.

+0

아, 나는 Terence의 새 책에서 더 짧은 것을 건너 뛰었다는 것을 알았다! 아마도'->'는 오래된 v3 사람들을위한 AST- 다시 쓰기 연산자가 아니라고 말할 수 있습니다. :) –

+0

@ 280Z28 "Number'rule"과 단편화되지 않은 규칙을 제거하는 것의 의미는 무엇입니까? 이것이 내 이슈에 대한 해답을 갖고 있기 때문에 이것을 분명하게 할 수 있습니까? –