如何让Lexical定义的带引号字符串支持空字符解析?
如何让带引号字符串的词法规则支持空字符?
现有两组词法定义:
lexical DQChr = !["] | ["]["]; lexical String = "\"" DQChr* "\"";
目前能正常解析这些场景:
parse(#String,"\"a\""); parse(#String,"\"\"");
但如果字符串内容包含空字符(比如"\0"),就会触发解析错误:
parse(#String,"\"�\"");
解决方法
原来的DQChr规则里,!["]在部分词法分析器实现中会默认把空字符(\x00)排除在外,导致空字符无法被识别为合法的字符串内容。我们只需要修改DQChr的定义,明确允许空字符即可:
方案一:直接显式包含空字符
lexical DQChr = [\x00] | !["] | ["]["];
方案二:用any关键字匹配任意字符(自然包含空字符),再排除双引号
lexical DQChr = (any - [""]) | ["]["];
修改后,DQChr就能匹配空字符、除双引号外的所有普通字符,以及转义的双引号,这样String规则就可以正常解析包含空字符的带引号字符串了。
内容的提问来源于stack exchange,提问作者Steven Klusener
相关产品推荐
相关产品推荐

