2012-10-25 3 views
0

에는 런타임에 ANTLR을 사용하여 토큰의 축소 작업을 제어하는 ​​방법이 있습니다. 예를 들어, 나는처럼 보이는 ANTLR 문법했습니다 : 나는 런타임에 결정하려는, 즉 모두 'A'와 'B'와 관련된 정확한 가능한 값은 런타임에 알려져있다토큰 감소 제어

s: (a | b); 
a: WORD; 
b: WORD; 
WORD: ('a'..'z')+ 

를할지 여부 WORD를 'a'또는 'b'로 줄이십시오.

+0

죄송하지만이 문법은 작동하지 않습니다. 더 구체적으로 설명해 주실 수 있습니까? 정말로 원하는 것은 무엇입니까? 몇 가지 예가 될 수 있습니다 ... – Andremoniy

+0

나는 reduce-reduce 충돌이 있음을 알고 있지만 런타임에서이 충돌을 해결할 방법을 찾고 있습니다. 나는 'a'에서 'b'로 축소 될 수있는 단어 표를 가지고 있지만이 시간은 런타임에 채워집니다. – bachr

답변

1

의미 론적 조건자를 사용하십시오. 규칙 a 및 b에 작업을 추가 할 계획이 아니라면이 예제는 특히 유용하지 않습니다.

s: 
    {someBoolFunction();}? a 
| b 
; 
a: WORD; 
b: WORD; 
WORD: ('a'..'z')+ 
+0

안녕하세요, 그것은 무엇을 찾고 있었는지 [명확한 의미 론적 술어] (http://stackoverflow.com/questions/3056441/what-is-a-semantic-predicate-in-antlr3)입니다. 감사 – bachr