Nearley后处理意外删除有效空白字符问题求助
Nearley语法匹配括号内容时空格被压缩的原因
核心原因
- 你引入的
@builtin "whitespace.ne"内置规则自带全局空白标准化逻辑,默认会将输入中所有连续空白字符统一压缩为单个空格,该处理是全局生效的,不会主动识别引号范围做特殊保留,你测试输入中引号内的4个空格,在词法预处理阶段就已经被压缩为1个。 - 你当前的语法没有做字符串字面量的单独匹配:
args -> .:*是无差别匹配所有字符,没有将引号内的内容标记为需要保留原始格式的范围,无法避开全局空白压缩逻辑。
修复思路
如果要保留引号内的原始空格,可做两处调整:
- 废弃
whitespace.ne的全局空白处理,改为在需要忽略空白的语法节点(比如括号两端、参数分隔符两侧)单独配置空白匹配规则 - 新增独立的字符串字面量匹配规则,优先级高于普通字符匹配,匹配到引号内容时直接返回原始字符,不做压缩处理
内容的提问来源于stack exchange,提问作者arindam
相关产品推荐
相关产品推荐

