parser: add comments and [...]; main: add file mode

This commit is contained in:
2018-05-14 00:37:14 +02:00
parent 3386ec0c4b
commit 8cb7c37096
3 changed files with 84 additions and 6 deletions

48
main.go
View File

@@ -2,7 +2,9 @@ package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"strings"
"github.com/chzyer/readline"
@@ -11,7 +13,7 @@ import (
"github.com/hellerve/argos/parser"
)
func main() {
func runRepl() {
rl, err := readline.New("argos> ")
if err != nil {
@@ -22,13 +24,13 @@ func main() {
e := eval.ParentEnv()
for {
prompt, err := rl.Readline()
input, err := rl.Readline()
if err != nil {
return
}
parsed, err, unconsumed := parser.Parse(prompt)
parsed, err, unconsumed := parser.Parse(input)
if err != nil {
fmt.Println(err)
@@ -52,3 +54,43 @@ func main() {
fmt.Println(evald.Pretty())
}
}
func runFile(path string) {
e := eval.ParentEnv()
input, err := ioutil.ReadFile(path)
if err != nil {
fmt.Println(err)
return
}
parsed, err, unconsumed := parser.Parse(string(input))
if err != nil {
fmt.Println(err)
return
}
if len(unconsumed) != 0 {
fmt.Println("Unconsumed input:", strings.Join(unconsumed, " "))
return
}
evald, err := eval.Eval(parsed, e)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(evald.Pretty())
}
func main() {
args := os.Args
if len(args) == 1 {
runRepl()
} else {
runFile(os.Args[1])
}
}