aboutsummaryrefslogtreecommitdiff
path: root/users
diff options
context:
space:
mode:
Diffstat (limited to 'users')
-rw-r--r--users/fcuny/exp/monkey/cmd/repl/main.go12
-rw-r--r--users/fcuny/exp/monkey/pkg/repl/repl.go29
2 files changed, 41 insertions, 0 deletions
diff --git a/users/fcuny/exp/monkey/cmd/repl/main.go b/users/fcuny/exp/monkey/cmd/repl/main.go
new file mode 100644
index 0000000..46b865c
--- /dev/null
+++ b/users/fcuny/exp/monkey/cmd/repl/main.go
@@ -0,0 +1,12 @@
+package main
+
+import (
+ "fmt"
+ "monkey/pkg/repl"
+ "os"
+)
+
+func main() {
+ fmt.Printf("Welcome to monkey's REPL.")
+ repl.Start(os.Stdin, os.Stdout)
+}
diff --git a/users/fcuny/exp/monkey/pkg/repl/repl.go b/users/fcuny/exp/monkey/pkg/repl/repl.go
new file mode 100644
index 0000000..e8b3b1f
--- /dev/null
+++ b/users/fcuny/exp/monkey/pkg/repl/repl.go
@@ -0,0 +1,29 @@
+package repl
+
+import (
+ "bufio"
+ "fmt"
+ "io"
+ lexer "monkey/pkg/lexer"
+ token "monkey/pkg/token"
+)
+
+const PROMPT = ">> "
+
+func Start(in io.Reader, out io.Writer) {
+ scanner := bufio.NewScanner(in)
+ for {
+ fmt.Printf(PROMPT)
+ scanned := scanner.Scan()
+
+ if !scanned {
+ return
+ }
+
+ line := scanner.Text()
+ l := lexer.New(line)
+ for tok := l.NextToken(); tok.Type != token.EOF; tok = l.NextToken() {
+ fmt.Printf("%+v\n", tok)
+ }
+ }
+}