3 个版本 (重大变更)

0.3.0 2023年3月12日
0.2.0 2023年3月5日
0.0.1 2023年2月24日

#121 in #identifier

每月 28 次下载

MIT/Apache

115KB
4K SLoC

语法

本库包含 Hebi 的 lexerparserAST

lexer 是使用 logos 自动生成的。parser 是手写的 递归下降解析器

缩进是通过将每行第一个非空白标记的空白字符数量分配给该行来进行词法分析的。例如

asdf
  asdf
  asdf asdf

会产生以下标记

Identifier("asdf", indentation_level=0)
Identifier("asdf", indentation_level=2)
Identifier("asdf", indentation_level=2)
Identifier("asdf", indentation_level=None)

注意最后一个标记,它没有任何缩进,因为它不是其行上的第一个非空白标记。

解析器使用缩进级别通过 这些函数 跟踪块

  • no_indent,当前标记可能没有缩进
  • indent_eq,当前标记的缩进级别等于当前缩进栈
  • indent_gt,当前标记的缩进级别大于当前缩进栈。此函数还会将新的缩进级别添加到缩进栈
  • dedent,当前标记的缩进级别低于当前缩进栈。此函数还会将缩进栈上的最后一个缩进级别弹出

这些函数用于在战略位置查询缩进,但解析器代码可以不关心它不重要的地方的缩进。例如,请参阅 import_stmt 节点,它根本不关心缩进,因此也不需要跟踪它!

依赖关系

~2–2.9MB
~29K SLoC