gists/first-interpreter/readme.md
2026-01-09 09:55:09 +02:00

37 lines
685 B
Markdown

# My first interpreter
Code for a very simple interpreter.
Accompanying blogpost: https://alloca.space/blog/my-first-interpreter.html
## Build and run
Requires: gcc, make
```sh
make run
```
## Example Program
```go
sum = 0
counter = 10
while counter {
sum = add(sum, counter)
counter = add(counter, negate(1))
}
print(sum)
```
## Structure
- `main.c` - entry point. Reads user input and calls the interpreter
- `run.c` - glue code. invokes the interpreter stages.
- `ast.h` - AST definitions
- `lex.h` - Tokens definitions
- `lex.c` - Stage 1 - Lexing: Text -> Tokens
- `parsing.c` - Stage 2 - Parsing: Tokens -> Ast
- `execute.c` - Stage 3 - Execute: Ast -> Output