Skip to content

Commit

Permalink
added examples and flag to run code from files
Browse files Browse the repository at this point in the history
  • Loading branch information
jairo-litman committed Feb 18, 2024
1 parent e53916c commit d6455ea
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 0 deletions.
8 changes: 8 additions & 0 deletions example/arithmetic.cidoka
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
let x = 1
let y = 2 + x
let z = 3 * y

let result = x + y + z

print(result)
result
1 change: 1 addition & 0 deletions example/helloworld.cidoka
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
print("hello world")
49 changes: 49 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
@@ -1,18 +1,30 @@
package main

import (
"cidoka/compiler"
"cidoka/evaluator"
"cidoka/lexer"
"cidoka/object"
"cidoka/parser"
"cidoka/repl"
"cidoka/vm"
"flag"
"fmt"
"os"
"os/user"
)

var engine = flag.String("engine", "vm", "use 'vm' or 'eval'")
var input = flag.String("input", "", "input file")

func main() {
flag.Parse()

if *input != "" {
runFile(*input)
return
}

user, err := user.Current()
if err != nil {
panic(err)
Expand All @@ -22,3 +34,40 @@ func main() {
fmt.Printf("Feel free to type in commands\n")
repl.Start(os.Stdin, os.Stdout, *engine)
}

func runFile(input string) {
f, err := os.ReadFile(input)
if err != nil {
panic(err)
}

var result object.Object

l := lexer.New(string(f))
p := parser.New(l)
program := p.ParseProgram()

if *engine == "vm" {
comp := compiler.New()
err := comp.Compile(program)
if err != nil {
fmt.Printf("compiler error: %s", err)
return
}

machine := vm.New(comp.Bytecode())

err = machine.Run()
if err != nil {
fmt.Printf("vm error: %s", err)
return
}

result = machine.LastPoppedStackElem()
} else {
env := object.NewEnvironment()
result = evaluator.Eval(program, env)
}

fmt.Printf("engine=%s, result=%s\n", *engine, result.Inspect())
}

0 comments on commit d6455ea

Please sign in to comment.