#indent #语法 #python #yaml #解析器 #前缀 #off-side

indent-stack

用于解析类似YAML或Python的偏移语法库

1个不稳定版本

0.1.0 2019年6月24日

#10#indent


用于 off-side

Apache-2.0

11KB
141

indent-stack

Rust库,用于解析类似YAML或Python的偏移语法

语法规范

虽然缩进通常由空格和制表符组成,但此库不对用于缩进的字符指定任何约束。只要字符序列相同(没有等效转换),就认为它们是相同的缩进级别。

此库接受调用者提供的缩进字符串;提取文件缓冲区中的缩进不是此库的责任。调用者应从每一行中提取缩进字符,并迭代地将它们传递给 accept() 函数。

偏移语法由以下规则定义

  • 如果第 x + 1 行的缩进比第 x 行长,并且以第 x 行的缩进开头,则称第 x + 1 行为第 x 行的 "子"。
  • 如果第 x 行和第 y 行具有相同的缩进,并且第 x+1..=y-1 行是第 x 行的子,则称第 x 行和第 y 行为 "兄弟"。
  • 如果第 y 行是第 x 行的子,并且第 z 行和第 y 行是兄弟,则第 z 行也是第 x 行的子。
  • 所有有效行要么是行0(定义为没有缩进的行)的子,要么是兄弟。

这导致以下结果

  • 如果一行没有前缀也不是上一行的延续,则该行为无效行。
  • 一行所有兄弟和子行的缩进的最长公共前缀是其自己的缩进。

不允许不一致的缩进

默认情况下,不允许不一致的缩进。也就是说,所有缩进必须是第一个缩进的重复。

例如,如果第一个缩进是2个空格,则所有缩进必须是2个空格;2个空格缩进的行后面跟着4个空格缩进的行是语法错误。

无运行时依赖