Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/ehwan/lua_rust

lua syntax parser & interpreter in Rust
https://github.com/ehwan/lua_rust

compiler glr-parsing lalr1 lua rust

Last synced: 6 days ago
JSON representation

lua syntax parser & interpreter in Rust

Awesome Lists containing this project

README

        

# lua_rust
[![crates.io](https://img.shields.io/crates/v/lua_ir.svg)](https://crates.io/crates/lua_ir)
[![docs.rs](https://docs.rs/lua_ir/badge.svg)](https://docs.rs/lua_ir)

lua syntax parser & runtime interpreter in Rust

- LALR(1), GLR parser
- syntax referenced from [lua 5.4 reference manual](https://www.lua.org/manual/5.4/manual.html)
- ***Greatly in progress***
- grammar fully implemented
- std library barely implemented

## Cargo Features
- `32bit`: use 32bit integer and float for `lua numeric` type

## How to use

### As Library
add [`lua_ir`](https://crates.io/crates/lua_ir) crate to your `Cargo.toml`
```toml
[dependencies]
lua_ir = "..."
```

```rust
let mut env = lua_ir::LuaEnv::new();

env.eval_chunk( b"var_hello = 'Hello'" )?;
env.eval_chunk( b"var_world = 'World'" )?;
env.eval_chunk( b"print( var_hello .. ', ' .. var_world .. '!' )" )?;
// Hello, World!

let hello_value = env.get_global( "var_hello" )?;
let world_value = env.get_global( "var_world" )?;
env.set_global( "var_hello", 10.into() )?;
```

### As REPL interpreter
clone this repository and simply run
```
$ cargo run
```
or
```
$ cargo run
```
will start lua REPL. Note that this executable is not `cargo publish`ed.