37 lines
685 B
Markdown
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
|