2013-02-08 1 views
28

v3에서 v4로 전환하기로 결정한 후 ANTLR 4 문법에 대한 도움이 필요합니다. 아무런 규칙이없는 V4에서

COMMENT 
    : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;} 
    | '/*' (options {greedy=false;} : .)* '*/' {$channel=HIDDEN;} 
    ; 

: v3에서

내가 자바 스타일의 코멘트를 검출하기 위해 다음 코드를 사용) 나는 매우 그래서 내 질문은 바보 같은 경우 정말 죄송 ANTLR 경험하고 있지 않다 특정 옵션. 동작 (숨겨진 채널로 이동)도 잘못되었습니다.

누군가 제발 ANTLR v4에서 어떻게하는지 알려주세요. HIDDEN 채널의 모든 단일 및 멀티 라인 주석을 넣어 것입니다

COMMENT 
    : ('//' ~[\r\n]* '\r'? '\n' 
     | '/*' .*? '*/' 
     ) -> channel(HIDDEN) 
    ; 

:

답변

33

V4 상당 같을 것이다. 그러나,이 같을 것이다 당신이이 HIDDEN -tokens으로 아무것도하지 않는 경우, 그럴 수도 skip이 토큰 : ungreedy 일치하도록 렉서 또는 파서 말할 수

COMMENT 
    : ('//' ~[\r\n]* '\r'? '\n' 
     | '/*' .*? '*/' 
     ) -> skip 
    ; 

주, 당신은 돈 ' 더 이상 options {greedy=false;}을 사용하지만, 많은 정규식 구현과 비슷한 ?을 추가하십시오.

+0

대단히 감사합니다! – user2055330

+0

이제 오류를 던지는 제안 된 코드 (채널을 사용한 첫 번째 변형)를 사용합니다. 렉서 규칙에서'-> 명령 'COMMENT'는 가장 바깥 쪽 단일 alt'의 마지막 요소 여야합니다. 무엇이 문제입니까? – user2055330

+0

@ user2055330, 내 편집 된 버전을 사용해보세요. –