3 个版本 (重大变更)
0.3.0 | 2023年3月12日 |
---|---|
0.2.0 | 2023年3月5日 |
0.0.1 | 2023年2月24日 |
#121 in #identifier
每月 28 次下载
115KB
4K SLoC
语法
本库包含 Hebi 的 lexer、parser 和 AST。
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