|
|
|
@ -18,14 +18,20 @@ func main() {
|
|
|
|
|
Dictionary: dict,
|
|
|
|
|
Stack: &stack,
|
|
|
|
|
RStack: &rstack,
|
|
|
|
|
Immediate: true,
|
|
|
|
|
Words: []string{},
|
|
|
|
|
Flags: Flags{
|
|
|
|
|
"Immediate": true,
|
|
|
|
|
"Comment": false,
|
|
|
|
|
},
|
|
|
|
|
Words: []string{},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
b := &Builtins{}
|
|
|
|
|
// word definitions
|
|
|
|
|
dict.AddWord(":", b.Colon(&c.Immediate), nil, false)
|
|
|
|
|
dict.AddWord(":", b.Colon(&c), nil, false)
|
|
|
|
|
dict.AddWord(";", b.Semicolon(&c), nil, true)
|
|
|
|
|
// comments
|
|
|
|
|
dict.AddWord("(", b.OpenComment(&c), nil, true)
|
|
|
|
|
dict.AddWord(")", b.CloseComment(&c), nil, true)
|
|
|
|
|
// math
|
|
|
|
|
dict.AddWord("+", b.Add(&stack), nil, false)
|
|
|
|
|
dict.AddWord("-", b.Sub(&stack), nil, false)
|
|
|
|
@ -34,7 +40,7 @@ func main() {
|
|
|
|
|
// output
|
|
|
|
|
dict.AddWord(".", b.Print(&stack), nil, false)
|
|
|
|
|
dict.AddWord("EMIT", b.Emit(&stack), nil, false)
|
|
|
|
|
dict.AddWord("CR", b.CR(), nil, false)
|
|
|
|
|
dict.AddWord("CR", nil, []string{"10", "EMIT"}, false) // emit a newline
|
|
|
|
|
// logic
|
|
|
|
|
dict.AddWord("=", b.Eq(&stack), nil, false)
|
|
|
|
|
dict.AddWord("0=", nil, []string{"0", "="}, false)
|
|
|
|
@ -53,6 +59,7 @@ func main() {
|
|
|
|
|
dict.AddWord("ROT", b.Rot(&stack), nil, false)
|
|
|
|
|
// debugging
|
|
|
|
|
dict.AddWord("WORDS", b.Words(dict), nil, false)
|
|
|
|
|
dict.AddWord("FLAGS", b.Flags(c), nil, false)
|
|
|
|
|
dict.AddWord(".S", b.Debug(&stack), nil, false)
|
|
|
|
|
dict.AddWord(".R", b.Debug(&rstack), nil, false)
|
|
|
|
|
dict.AddWord("R>", b.RFrom(&stack, &rstack), nil, false)
|
|
|
|
@ -66,11 +73,15 @@ func main() {
|
|
|
|
|
dict.AddWord("BYE", b.Quit(), nil, false)
|
|
|
|
|
|
|
|
|
|
reader := bufio.NewReader(os.Stdin)
|
|
|
|
|
fmt.Print("prosper")
|
|
|
|
|
fmt.Print("prosper\n")
|
|
|
|
|
|
|
|
|
|
// read loop
|
|
|
|
|
for {
|
|
|
|
|
fmt.Print("\n> ")
|
|
|
|
|
if c.Flags["Immediate"] {
|
|
|
|
|
fmt.Print("> ")
|
|
|
|
|
} else {
|
|
|
|
|
fmt.Print(" ")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
line, err := reader.ReadString('\n')
|
|
|
|
|
if err != nil {
|
|
|
|
@ -83,9 +94,9 @@ func main() {
|
|
|
|
|
fmt.Printf("bye\n")
|
|
|
|
|
os.Exit(0)
|
|
|
|
|
} else if err != nil {
|
|
|
|
|
fmt.Printf("error in evaluation: %v", err)
|
|
|
|
|
} else {
|
|
|
|
|
fmt.Print("ok")
|
|
|
|
|
fmt.Printf("error in evaluation: %v\n", err)
|
|
|
|
|
} else if c.Flags["Immediate"] {
|
|
|
|
|
fmt.Print("ok\n")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|