1
파일의 일부를 무시하고 싶은 파일이 있습니다. Lexer에서 필자는 파일의 흥미롭지 않은 부분에 대한 토큰을 만드는 것을 피하기 위해 gated semantic predicates를 사용한다. 내 규칙은 다음과 유사합니다.Antlr 불필요한 조건이 필요합니까?
A
: {!ignore}?=> 'A'
;
START_IGNORE
: 'foo' {ignore = true; skip();}
;
END_IGNORE
: 'oof' {ignore = false; skip();}
;
IGNORE
: {ignore}?=> . {skip();}
;
그러나
A
: {!ignore}?=> 'A'
;
START_IGNORE
: {true}?=> 'foo' {ignore = true; skip();}
;
END_IGNORE
: {true}?=> 'oof' {ignore = false; skip();}
;
IGNORE
: {ignore}?=> . {skip();}
;
이유는 술어를 추가해야합니까 .. 내가 START 변경하고 END는 또한 작동하지 않습니다 (아래로) 의미 술어를 사용하지 않는?
편집 : 내가 사용하고 ANTLR-3.4
필자는 이클립스 플러그인을 사용하여 컴파일하지만 플러그인이 제공하는 인터프리터는 사용하지 않습니다. 명령 줄에서 컴파일하기 이전과 같은 결과를 얻었으므로 코드에 이상한 점이 있습니다. 보통 내가 가진 해결책으로 살 것이지만 몇 가지 다른 문제가 있습니다. 행동을 일으키는 것을 찾으려고 노력할 것입니다. –
@HeinrichOdy, v3.4를 사용하는 경우 v3.3으로 되돌아가보십시오. 내 경험상 v3.3의 문제가 적습니다. –
내가 쉽게 버전을 변경할 수 있는지 여부를 볼 것이며, 그렇다면 3.3을 시도합니다, 감사합니다. –