2014-11-28 1 views
3

특수 기호가 발생할 때까지 ANTLR에서 여러 줄 문자를 읽는 방법은 무엇입니까? 아래 텍스트 등, 마찬가지로 : -특수 기호가 발생할 때까지 ANTLR의 다중 행 값을 읽음

@Description(" 
Hi There I am. 
") 

나는 키로 읽을 필요 -> @description값을 ->는 "안녕하세요 나는".

은 내가 VALUE 문법하지만 행운의 많은 변화를 시도 문법

KEY 
: '@' [a-zA-Z] (~[(\r\n] | '\\)')* 
; 


VALUE 
: '(' ~[\r\n]* 
; 

를 다음 그것을 시도했다.

+0

값 규칙이 이상한 보인다. 렉서 모드를 살펴 보거나 두 개의 렉서 규칙만으로 해결하려고 시도하지 마십시오 (즉, 파서 규칙 추가). – Onur

답변

1

여기의 렉서/파서 분리로 인해 혼란 스러울 수 있습니다. 당신은 단지 하나의 예를 제공 못했지만, 나는 다음을 추론 할 수

declaration: KEY '(' STRING ')' ; 
KEY : '@' [a-zA-Z]+ ; 
STRING: '"' (~'"')* '"' ; 
WS: [ \t\r\n] -> skip; 

declaration는 파서 규칙입니다. KEY (@, 글자), 여는 괄호, STRING (따옴표 사이의 모든 텍스트) 및 닫는 괄호로 구성됩니다. KEYSTRING은 렉서 규칙입니다.

위의 STRING 규칙은 문자를 이스케이프하도록 허용하지 않습니다. 당신은 (또한 백 슬래시와 백 슬래시) 백 슬래시 견적을 탈출 할 수 있도록해야하는 경우, 대신에 다음과 같은 규칙을 사용

STRING: '"' ('\\' ["\\] | ~'"')* '"'