Skip to content

Latest commit

 

History

History
45 lines (37 loc) · 2.19 KB

README.md

File metadata and controls

45 lines (37 loc) · 2.19 KB

Zua

An attempt at a Lua 5.1 implementation in Zig.

Goals, in order of priority:

  1. Learn more about Lua internals
  2. Learn more about Zig
  3. Anything else

Status

  • Lexer (llex.c/.h) -> lex.zig
  • String parsing (in Lua this was done at lex-time) -> parse_literal.zig (see 4324bd0 for more details)
  • Number parsing (in Lua this was done at lex-time) -> parse_literal.zig
    • Basic number parsing
    • Proper strtod-compatible number parsing implementation
  • Parser (lparser.c/.h) (in Lua this was done as one step with no AST intermediate)
    • Parsing tokens into an AST -> parse.zig (mostly done, needs some more testing/cleanup)
    • Compiling the AST into bytecode -> compiler.zig
  • ...

Why Lua 5.1?

It's what I'm most familiar with, and I'm also assuming that 5.1 is simpler internally than more recent Lua versions.

Building / running

  • zig build to build zua.exe
  • zig build test to build & run the main test suite
  • zig build run to build & run zua.exe (does nothing right now)
  • zig build lua51_tests to run tests on the PUC Lua 5.1 test files (currently it just tests parsing them)
  • zig build fuzzed_lex to run lexer tests on a large set of inputs/outputs generated by fuzzing-lua
  • zig build bench_lex to run a benchmark of the lexer (this benchmark needs improvement)
  • zig build fuzzed_strings to run string parsing tests on a set of inputs/outputs generated by fuzzing-lua