안녕하세요 저는 JavaCC로 작업하고 있으며 ""사이에 하나의 문자열을 넣는 토큰을 작성 중입니다. 문맥:
void literalString(): {} { """ (characteresString())? """ }
void characteresString(): {} { <characterString> | characteresString() <characterString> }
그래서이 토큰을 하나의 문자열로 만들었습니다.
TOKEN : {<characterString : ~["\", "] >}
문제는 토큰에서 "기호를 제외하는 방법을 모른다는 것입니다." ""를 넣으면 오류가 발생하고 "오류를 다시 넣으면"오류가 발생합니다.
미리 감사드립니다
대신에
void literalString(): {} { """ (characteresString())? """ }
토큰 정의 사용
TOKEN : { <STRING : "\"" (<CHAR>)* "\"" >
| <#CHAR : ~["\""] > // Any character that is not "
}
이제 이것은 문자열을 a로 정의하고 "
그 뒤에 "
s 가 아닌 0 개 이상의 문자가 뒤 따르고 다른 "
.
그러나 일부 언어에는 특정 범위의 문자 만 허용하는 것과 같은 추가 제한이 있습니다. 예를 들어 "
허용되는 s를 제외한 인쇄 가능한 ASCII 문자 만 사용하는 경우
TOKEN : { <STRING : "\"" (<CHAR>)* "\"" >
| <#CHAR: [" ","!","#"-"~"]> // Printable ASCII characters excluding "
}
그러나 "
가 앞에 오는 경우 문자 를 허용 \
하고 \
뒤에 a "
또는 다른 \
또는 n
. 그런 다음 사용할 수 있습니다.
TOKEN : { <STRING : "\"" (<CHAR> | <ESCAPESEQ>)* "\"" >
| <#CHAR: [" ","!","#"-"[","]"-"~"] > // Printable ASCII characters excluding \ and "
| <#ESCAPESEQ: "\\" ["\"","\\","n"] > // 2-character sequences \\, \", and \n
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다