2026-05-07 18:01:59 +02:00
2026-05-07 18:00:56 +02:00
2026-05-07 15:03:33 +02:00
2026-04-29 22:16:25 +02:00
2026-05-06 19:58:39 +02:00
2026-05-07 14:31:38 +02:00
2026-04-29 22:16:25 +02:00
2026-04-29 22:16:25 +02:00
2026-04-29 22:16:25 +02:00
2026-05-07 18:01:59 +02:00

uutils AWK

This is a human, WIP, and clean implementation of an AWK interpreter, written in Rust and compatible with GNU's AWK (gawk) bug-for-bug. Expected to be production-ready before Ubuntu 26.10. Made with love.

State of the Repo

Lexer

Essentially done; it is only lacking thorough testing and numeric escapings (good first contribution).

Parser

Also mostly done; some bullet points:

  • Extend spans during Pratt parsing for better error messages (trivial-ish?).
  • The preprocessor is TBD (not complicated, but will tangle up pretty printing).
  • It would be nice to reduce LOC.
  • We are working on test coverage and fuzzing.
    • It's possible we move to the chumsky crate for this reason and ariadne support. I currently think it's not necessary, though; we probably are better suited to owning the parser given how idiosyncratic and ambiguous AWK's grammar is.
  • Start running gawk parsing tests at some point (especially when we get a basic interpreter and nail down --pretty-print).

Interpreter

We are looking forward to building a basic tree-walking interpreter to get integration testing going, as well as a baseline for future iterations. Ideally, these should be a bytecode machine or a JIT. Expect this to be a fast-paced repo. The design sketch is for it to be a cooperative I/O machine, probably built with smol; if we want to better support AWK's long-forgotten number-crunching intent, we could easily extend this to parallel computations.

Contributing

See this.

License

This is licensed under either the MIT License or the Apache License v2.0. See the LICENSE-MIT and LICENSE-APACHE files for details.

S
Description
No description provided
Readme 362 KiB
Languages
Rust 100%