2013-06-01 2 views
4

I가 내가 규칙에 일치 할 다음 문자열, stringLiteral :ANTLR 4 문자열 일치에서 제외 "및 하는 방법

"D:\\Downloads\\Java\\MyFile" 

그리고 내 문법 파일입니다 : String.g4로 다음과 같습니다 :

grammar String; 

fragment 
HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ; 

stringLiteral 
    : '"' (EscapeSequence | XXXXX )* '"' 
    ; 
fragment 
EscapeSequence 
    : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\') 
    | UnicodeEscape 
    | OctalEscape 
    ; 

fragment 
OctalEscape 
    : '\\' ('0'..'3') ('0'..'7') ('0'..'7') 
    | '\\' ('0'..'7') ('0'..'7') 
    | '\\' ('0'..'7') 
    ; 

fragment 
UnicodeEscape 
    : '\\' 'u' HexDigit HexDigit HexDigit HexDigit 
    ; 

\ 또는 "\"가 아닌 문자를 찾으려면 어떻게해야합니까?

나는 다음을 시도하고, 모든 작동하지 않습니다 :이 밖으로 시도 ANTLRWorks 2를 사용하고

~['\\'"'] 
~['\\'\"'] 
~["\] 
~[\"\\] 
~('\"'|'\\') 
~[\\\"] 

. 오류는 다음과 같습니다 : 문자 클래스 내부

D:\Downloads\ANTLR\String.g4 line 26:5 mismatched character '<EOF>' expecting '"' 
error(50): D:\Downloads\ANTLR\String.g4:26:5: syntax error: '<EOF>' came as a complete surprise to me while looking for rule element 

답변

4

, 만 백 슬래시 이스케이프해야합니다

불법되어 다음, 그것은 ] 탈출 : 다음

[\] 

백 슬래시와 일치합니다.

[\\] 
["] 

그리고 다음과 일치 백 슬래시 또는 따옴표 중 하나 :다음은 견적과 일치

[\\"] 

V4 스타일을, 문법은 다음과 같이 수 :

grammar String; 

/* other rules */ 

StringLiteral 
    : '"' (EscapeSequence | ~[\\"] )* '"' 
    ; 

fragment 
HexDigit 
    : [0-9a-fA-F] 
    ; 

fragment 
EscapeSequence 
    : '\\' [btnfr"'\\] 
    | UnicodeEscape 
    | OctalEscape 
    ; 

fragment 
OctalEscape 
    : '\\' [0-3] [0-7] [0-7] 
    | '\\' [0-7] [0-7] 
    | '\\' [0-7] 
    ; 

fragment 
UnicodeEscape 
    : '\\' 'u' HexDigit HexDigit HexDigit HexDigit 
    ; 

주 당신은 파서 규칙 내에서 조각을 사용할 수 없습니다 : StringLiteral는 렉서 규칙해야합니다!