43 lines
723 B
C
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
|