An open API service indexing awesome lists of open source software.

https://github.com/sssooonnnggg/rslua

Yet another Lua lexer and Lua parser for Lua 5.3 written in pure Rust.
https://github.com/sssooonnnggg/rslua

ast handwritten lexer lua parser rust transpiler

Last synced: 7 months ago
JSON representation

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

Awesome Lists containing this project

README

          

# rslua

[![Crates.io](https://img.shields.io/crates/v/rslua)](https://crates.io/crates/rslua)
![Rust](https://github.com/sssooonnnggg/rslua/workflows/Rust/badge.svg)

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

## Lexer

- **input** str
- **output** Result, LexError>

```rust
use rslua::lexer::Lexer;
let mut lexer = Lexer::default();
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. |

## Parser

- **input** Vec\
- **output** Result

```rust
let mut parser = Parser::default();
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](tests/lua_to_lua.rs)