mirror of
https://github.com/Mercantec-GHC/h4-projekt-gruppe-0-sm.git
synced 2025-04-27 16:24:07 +02:00
52 lines
1.1 KiB
TypeScript
52 lines
1.1 KiB
TypeScript
export type Block = {
|
|
id: number;
|
|
lineEntry: number;
|
|
lineExit: number;
|
|
stmts: Stmt[];
|
|
};
|
|
|
|
export type Stmt = {
|
|
id: number;
|
|
line: number;
|
|
kind: StmtKind;
|
|
};
|
|
|
|
export type StmtKind =
|
|
| { tag: "error" }
|
|
| { tag: "fn" } & FnStmt
|
|
| { tag: "let"; ident: string; expr?: Expr }
|
|
| { tag: "loop"; body: Block }
|
|
| { tag: "if"; expr: Expr; truthy: Block; falsy?: Block }
|
|
| { tag: "return"; expr?: Expr }
|
|
| { tag: "break" }
|
|
| { tag: "assign"; subject: Expr; expr: Expr }
|
|
| { tag: "expr"; expr: Expr };
|
|
|
|
export type FnStmt = {
|
|
ident: string;
|
|
attrs: Attr[];
|
|
params: string[];
|
|
body: Block;
|
|
};
|
|
|
|
export type Expr = {
|
|
id: number;
|
|
line: number;
|
|
kind: ExprKind;
|
|
};
|
|
|
|
export type ExprKind =
|
|
| { tag: "error" }
|
|
| { tag: "ident"; ident: string }
|
|
| { tag: "int"; val: number }
|
|
| { tag: "string"; val: string }
|
|
| { tag: "call"; expr: Expr; args: Expr[] }
|
|
| { tag: "binary"; op: BinaryOp; left: Expr; right: Expr };
|
|
|
|
export type BinaryOp = "<" | "==" | "+" | "*";
|
|
|
|
export type Attr = {
|
|
ident: string;
|
|
args: Expr[];
|
|
};
|