#lua #lexer #lua53 #parser

rslua

专为Lua 5.3设计的另一个Lua词法分析和Lua解析器

11次发布

0.3.0 2023年9月10日
0.2.8 2022年11月29日
0.2.6 2020年6月22日
0.2.2 2020年5月31日
0.1.0 2020年5月30日

#1008 in 解析器实现

Download history 12/week @ 2024-03-10 1/week @ 2024-03-17 22/week @ 2024-03-31 1/week @ 2024-04-07

67 每月下载次数
用于 wrk-api-bench

MIT/Apache

295KB
7.5K SLoC

Rust 4K SLoC // 0.1% comments Lua 3.5K SLoC // 0.2% comments

rslua

Crates.io Rust

使用纯Rust编写的Lua 5.3词法分析和Lua解析器。

词法分析器

  • 输入 str
  • 输出 Result<&Vec<Token>, LexError>
use rslua::lexer::Lexer;
let mut lexer = Lexer::new();
let tokens = lexer.run(input_lua_code)?;

词法分析器配置

类型 默认值 描述
use_origin_string bool false 使用原始字符串作为标记值,而不是转义值。
reserve_comments bool false 保留注释作为标记。

解析器

  • 输入 &Vec<Token>
  • 输出 Result<Block, SyntaxError>
let mut parser = Parser::new();
let block = parser.run(tokens)?;

AST遍历器

使用ast_walker遍历AST,实现AstVisitor特质以运行自定义逻辑。

完整示例

./lua文件夹中读取Lua源文件,解析它们,生成AST并遍历它们,使用实现了AstVisitor特质的LuaWritter结构体将格式化的Lua源代码重新生成到./tmp文件夹。

tests/lua_to_lua.rs

依赖项

~0.3–0.9MB
~19K SLoC