This commit is contained in:
Pavel Flegr 2026-03-05 14:55:09 +01:00
commit 8f4f858d86
30 changed files with 9765 additions and 0 deletions

235
internal/lang/ast.go Normal file
View file

@ -0,0 +1,235 @@
package lang
type Program struct {
PackagePath string
Imports []ImportDecl
Interfaces []InterfaceDecl
Classes []ClassDecl
Workers []WorkerDecl
Functions []FunctionDecl
}
type ImportDecl struct {
Alias string
Path string
}
type InterfaceDecl struct {
Name string
Methods []FunctionSignature
}
type ClassDecl struct {
Name string
Fields []FieldDecl
Parents []string
Methods []FunctionDecl
}
type WorkerDecl struct {
Name string
Fields []WorkerFieldDecl
Methods []FunctionDecl
}
type WorkerFieldDecl struct {
Mutable bool
Name string
Type string
Value Expr
}
type FieldDecl struct {
Mutable bool
Name string
Type string
}
type FunctionSignature struct {
Name string
Params []Param
ReturnType string
}
type FunctionDecl struct {
Name string
Params []Param
ReturnType string
Body []Stmt
}
type Param struct {
Name string
Type string
}
type Stmt interface {
stmtNode()
}
type Expr interface {
exprNode()
}
type VarDecl struct {
Mutable bool
Name string
Type string
Value Expr
}
func (VarDecl) stmtNode() {}
type MultiVarDecl struct {
Mutable bool
Names []string
Value Expr
}
func (MultiVarDecl) stmtNode() {}
type AssignStmt struct {
Name string
Value Expr
}
func (AssignStmt) stmtNode() {}
type AddAssignStmt struct {
Name string
Value Expr
}
func (AddAssignStmt) stmtNode() {}
type MultiAssignStmt struct {
Names []string
Value Expr
}
func (MultiAssignStmt) stmtNode() {}
type ReturnStmt struct {
Value Expr
}
func (ReturnStmt) stmtNode() {}
type ThrowStmt struct {
Value Expr
}
func (ThrowStmt) stmtNode() {}
type GoStmt struct {
Value Expr
}
func (GoStmt) stmtNode() {}
type ExprStmt struct {
Value Expr
}
func (ExprStmt) stmtNode() {}
type IfStmt struct {
Cond Expr
Then []Stmt
Else []Stmt
}
func (IfStmt) stmtNode() {}
type WhileStmt struct {
Cond Expr
Body []Stmt
}
func (WhileStmt) stmtNode() {}
type TryCatchStmt struct {
TryBody []Stmt
CatchName string
CatchType string
CatchBody []Stmt
}
func (TryCatchStmt) stmtNode() {}
type SelectStmt struct {
Cases []SelectCase
}
func (SelectStmt) stmtNode() {}
type SelectCase struct {
Source Expr
Body []Stmt
}
type IdentExpr struct {
Name string
}
func (IdentExpr) exprNode() {}
type IntExpr struct {
Value string
}
func (IntExpr) exprNode() {}
type StringExpr struct {
Value string
}
func (StringExpr) exprNode() {}
type BoolExpr struct {
Value bool
}
func (BoolExpr) exprNode() {}
type NullExpr struct{}
func (NullExpr) exprNode() {}
type UnaryExpr struct {
Op string
Value Expr
}
func (UnaryExpr) exprNode() {}
type BinaryExpr struct {
Left Expr
Op string
Right Expr
}
func (BinaryExpr) exprNode() {}
type CallExpr struct {
Callee Expr
Args []Expr
TypeArgs []string
}
func (CallExpr) exprNode() {}
type SelectorExpr struct {
Receiver Expr
Name string
}
func (SelectorExpr) exprNode() {}
type LambdaExpr struct {
Params []Param
ImplicitIt bool
Body []Stmt
}
func (LambdaExpr) exprNode() {}