3个稳定版本

使用旧Rust 2015

1.1.0 2017年7月18日
1.0.5 2017年6月1日
1.0.4 2017年4月25日

#6 in #kailua


5 个crate中使用

MIT/Apache

340KB
5.5K SLoC

Rust 5K SLoC // 0.1% comments Lua 650 SLoC // 0.7% comments

Kailua的AST和解析器。

Kailua按照以下顺序解析单个源文件

  1. 文件内容以调用者依赖的方式读入 kailua_env::Source。这一步足够灵活,调用者可以自由构造内容。Source为整个文件发出单个跨度。

  2. 解析器(kailua_syntax::lex::Lexer)接收跨度以及Source,并产生一个带有相关跨度的标记列表(kailua_syntax::lex::Tok)。

    解析器产生的标记包括普通Lua标记、Kailua特定的元注释(例如 --# = DashDashHash)、元注释末尾的换行符、普通注释和文件末尾。因此,它们足以突出显示任何Lua或Kailua代码。

    后续步骤依赖于Kailua特定的标记来产生Kailua特定的AST节点。当其他方式生成标记时应小心。

  3. 嵌套分析器(kailua_syntax::lex::Nest)向跨度标记添加额外信息,以便解析器可以从错误中恢复。

    "嵌套"大致是应该在解析错误时跳过的标记范围。嵌套可以是嵌套的,大致给出了源代码的轮廓。

    带有嵌套信息的标记(kailua_syntax::lex::NestedToken)没有关于嵌套的实际信息。相反,计算并记录区分不同嵌套的紧凑数据。

  4. 解析器(kailua_syntax::Parser)将一系列带有嵌套信息的标记转换为代码块(kailua_syntax::ast::Chunk)。

    该块还包含跨度的列表、每个跨度的名称、全局分配的名称以及每个标记的额外提示。这允许在不接触类型检查器的情况下进行基本分析。

依赖项

约215KB