zua
zua copied to clipboard
An implementation of Lua 5.1 in Zig, for learning purposes
Zua
An attempt at a Lua 5.1 implementation in Zig.
Goals, in order of priority:
- Learn more about Lua internals
- Learn more about Zig
- Anything else
Status
- [ ] Lexer (llex.c/.h) -> lex.zig
- [x] Keywords
- [x] Identifiers
- [x]
..
,...
- [x]
==
,>=
,<=
,~=
- [x] String literals (single/double quoted and multi-line (
[[
)) - [x] Comments (
--
and--[[
) - [x] Numbers
- [x] Improve tests, perhaps use fuzz testing
- [ ] Cleanup implementation
- [x] 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
- [x] 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)
- [x] 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