I built this project for two simple reasons: I've always used higher-level languages and wanted to finally understand what's happening "under the hood" of an interpreter. I also wanted a real project to force me to "power up" my C skills, especially with manual memory management and reference counting.
The result is ToyForth, a minimal interpreter for a Forth-like language, written from scratch in C, stack-based.
I focused on making the code clean and understandable. It's broken down into a few simple parts:
A parser that turns source text into a list of objects (parser.c).
A small stack-based virtual machine (main.c).
A manual reference counting system (incRef/decRef) to manage object memory (mem.c) and so on.
My main goal was learning, but I've tried to document it well in the README.md so it could be a "starter kit" for anyone else who wants to learn by reading a small, complete implementation.
It's easy to try out. I'd genuinely appreciate any feedback on my approach or my C code.
Here's the link: https://github.com/renvins/toyforth-interpreter