代替
void literalString(): {} { """ (characteresString())? """ }
使用令牌定义
TOKEN : { <STRING : "\"" (<CHAR>)* "\"" >
| <#CHAR : ~["\""] > // Any character that is not "
}
现在,这个定义字符串是"
后跟零个或多个字符不属于"
秒,然后另一个"
。
但是,某些语言还有其他限制,例如仅允许一定范围内的字符。 例如,如果仅允许使用可打印的ascii字符,但不包括"
,则应使用
TOKEN : { <STRING : "\"" (<CHAR>)* "\"" >
| <#CHAR: [" ","!","#"-"~"]> // Printable ASCII characters excluding "
}
但是,假设您要允许"
如果字符前面带有\\
并且要禁止\\
字符,除非它们后面带有"
或另一个\\
或n
。 那你可以用
TOKEN : { <STRING : "\"" (<CHAR> | <ESCAPESEQ>)* "\"" >
| <#CHAR: [" ","!","#"-"[","]"-"~"] > // Printable ASCII characters excluding \ and "
| <#ESCAPESEQ: "\\" ["\"","\\","n"] > // 2-character sequences \\, \", and \n
}