gists/first-interpreter/src/ast.h
2026-01-08 00:24:21 +02:00

43 lines
723 B
C

#ifndef INTERPRETER_AST_H
#define INTERPRETER_AST_H
typedef struct {
void* elements;
unsigned length;
} Array;
typedef struct {
enum {
LITERAL,
VARIABLE,
FUNCTION,
} tag;
union {
int integer;
char* variable;
struct { char* name; Array args; } function;
} data;
} Expr;
typedef struct {
enum {
SET,
WHILE,
EXPR,
} tag;
union {
struct { char* name; Expr expr; } Set;
struct { Expr condition; Array block; } While;
struct { Expr expr; } Expr;
} data;
} Stmt;
typedef struct {
Stmt* stmts;
unsigned length;
} StmtArray;
void print_expr(Expr);
void print_ast(StmtArray);
#endif