47b6a1eb82e6a107f43816527e0c97e159ccedcf
Co-authored-by: aider (openrouter/moonshotai/kimi-k2.6) <aider@aider.chat>
Forth Interpreter in C
A minimal Forth interpreter written in C. This project implements a subset of the Forth programming language using a threaded-code architecture with separate data and return stacks.
What This Is
This is a toy/subset Forth interpreter designed for educational purposes. It provides an interactive REPL where you can define words, manipulate the stack, and execute built-in primitives.
How It Works
- Threaded Code: The interpreter uses an inner/outer interpreter model. Colon definitions are sequences of word addresses (threaded code) traversed by an instruction pointer.
- Architecture:
- 64-bit signed integer cells (
int64_t) - Separate data and return stacks
- Fixed-size dictionary, user memory, and compile buffer
- Dictionary is a singly-linked list searched linearly
- 64-bit signed integer cells (
- Supported Features:
- Stack manipulation (
DUP,DROP,SWAP,OVER,ROT, etc.) - Arithmetic and logic (
+,-,*,/,MOD, bitwise ops, comparisons) - Colon definitions (
: word ... ;) - Variables and constants
- Control flow (
IF ... ELSE ... THEN,BEGIN ... UNTIL,BEGIN ... WHILE ... REPEAT) - Memory access (
@,!,C@,C!,HERE,ALLOT) - Simple string output (
.")
- Stack manipulation (
- Limitations:
- Fixed user memory limit (1M cells); dictionary and stacks grow dynamically
- 64-bit signed integers only; no floating-point support
- No file I/O or operating system interface beyond stdin/stdout
- No immediate user-defined words or advanced introspection
- Single-threaded execution
- Error handling is basic (prints message and often returns zero or ignores)
Building
Run make to build the project. The resulting binary can be run directly for an interactive Forth session.
Disclaimer
This project was written with the assistance of AI. It is provided as-is for educational and experimental use.
Description
An experimental Forth interpreter made with AI. Primary purpose is to test the current capabilities of LLMs.
Languages
C
93.6%
Assembly
4.1%
Makefile
1.5%
Linker Script
0.8%