mirror of
https://github.com/hanzoai/expr.git
synced 2026-09-24 16:58:58 +00:00
Add repl
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"flag"
|
||||
"fmt"
|
||||
"github.com/antonmedv/expr/compiler"
|
||||
@@ -16,6 +17,7 @@ var (
|
||||
debug bool
|
||||
run bool
|
||||
ast bool
|
||||
repl bool
|
||||
)
|
||||
|
||||
func init() {
|
||||
@@ -23,6 +25,7 @@ func init() {
|
||||
flag.BoolVar(&debug, "debug", false, "debug program")
|
||||
flag.BoolVar(&run, "run", false, "run program")
|
||||
flag.BoolVar(&ast, "ast", false, "print ast")
|
||||
flag.BoolVar(&repl, "repl", false, "start repl")
|
||||
}
|
||||
|
||||
func main() {
|
||||
@@ -44,6 +47,10 @@ func main() {
|
||||
debugger()
|
||||
os.Exit(0)
|
||||
}
|
||||
if repl {
|
||||
startRepl()
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
flag.Usage()
|
||||
os.Exit(2)
|
||||
@@ -92,3 +99,37 @@ func runProgram() {
|
||||
|
||||
litter.Dump(out)
|
||||
}
|
||||
|
||||
func startRepl() {
|
||||
scanner := bufio.NewScanner(os.Stdin)
|
||||
prompt()
|
||||
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
|
||||
tree, err := parser.Parse(line)
|
||||
if err != nil {
|
||||
fmt.Printf("%v\n", err)
|
||||
continue
|
||||
}
|
||||
|
||||
program, err := compiler.Compile(tree)
|
||||
if err != nil {
|
||||
fmt.Printf("%v\n", err)
|
||||
continue
|
||||
}
|
||||
|
||||
out, err := vm.Run(program, nil)
|
||||
if err != nil {
|
||||
fmt.Printf("%v\n", err)
|
||||
continue
|
||||
}
|
||||
|
||||
fmt.Printf("%v\n", litter.Sdump(out))
|
||||
prompt()
|
||||
}
|
||||
}
|
||||
|
||||
func prompt() {
|
||||
fmt.Print("> ")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user