From e57216d3b29ba9688918972c683da3ab0da3ad95 Mon Sep 17 00:00:00 2001 From: Mel Date: Thu, 2 Jun 2022 01:09:33 +0000 Subject: Create Lang compiler package --- pkg/lang/compiler/compiler.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 pkg/lang/compiler/compiler.go (limited to 'pkg/lang/compiler') diff --git a/pkg/lang/compiler/compiler.go b/pkg/lang/compiler/compiler.go new file mode 100644 index 0000000..bf34487 --- /dev/null +++ b/pkg/lang/compiler/compiler.go @@ -0,0 +1,41 @@ +package compiler + +import ( + "jinx/pkg/lang/ast" + "jinx/pkg/lang/vm/code" +) + +type Compiler struct { + ast ast.Program +} + +func New(ast ast.Program) *Compiler { + return &Compiler{ + ast: ast, + } +} + +func (comp *Compiler) Compile() (code.Code, error) { + bc := make([]byte, 0, 1024) + + for _, stmt := range comp.ast.Stmts { + if stmt.Kind != ast.StmtKindExpr { + panic("statements other than expressions not implemented") + } + + expr := stmt.Value.(ast.StmtExpr).Value + + res, err := comp.compileExpr(expr) + if err != nil { + return code.Code{}, err + } + + bc = append(bc, res...) + } + + return code.New(bc, code.NewDebugInfo("unknown file")), nil +} + +func (comp *Compiler) compileExpr(expr ast.Expr) ([]byte, error) { + panic("not implemented") +} -- cgit 1.4.1