#lua #lua53 #parser #lexer


Yet another Lua lexer and Lua parser for Lua 5.3

10 releases

0.2.8 Nov 29, 2022
0.2.7 Nov 15, 2022
0.2.6 Jun 22, 2020
0.2.2 May 31, 2020
0.1.0 May 30, 2020

#380 in Parser implementations

38 downloads per month
Used in wrk-api-bench


7.5K SLoC

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


Crates.io Rust

Yet another Lua lexer and Lua parser for Lua 5.3 written in pure Rust.


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

Lexer Config

Key Type Default Descripten
use_origin_string bool false Use origin string as token value instead of escaped one.
reserve_comments bool false Reserve comments as tokens.


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

AST walker

Use ast_walker to travel the AST, implement the AstVisitor trait to run custom logic.

A complete example

Read Lua source files from ./lua folder, parse them, generate ASTs and walk them through, use a LuaWritter struct which impletements the AstVisitor trait to re-generate formatted Lua source again to ./tmp folder.

See tests/lua_to_lua.rs