summaryrefslogtreecommitdiff
path: root/src/modules/lexer/lexer.scm
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/lexer/lexer.scm')
-rw-r--r--src/modules/lexer/lexer.scm31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/modules/lexer/lexer.scm b/src/modules/lexer/lexer.scm
new file mode 100644
index 0000000..0661fa6
--- /dev/null
+++ b/src/modules/lexer/lexer.scm
@@ -0,0 +1,31 @@
+(define-module (modules lexer lexer)
+ #:export (read-tokens-from-port))
+
+(define (read-tokens-from-port port)
+ ""
+ (display (read-char port)))
+
+(define (read-token)
+
+ (define (read-token-loop first-char)
+ (cond
+
+ ((or (char-whitespace? first-char))
+ (read-token)
+
+ ((eq? first-char #\()
+ (cons 'left-paren #\())
+ ((eq? first-char #\))
+ (cons 'right-paren #\)))
+ ((eq? first-char #\{)
+ (cons 'right-bracket #\{))
+ ((eq? first-char #\})
+ (cons 'right-bracket #\}))
+
+ (#t
+ (error "illegal lexical syntax")))))
+
+ (let ((first-char (read-char)))
+ (if (eof-object? first-char)
+ '()
+ (cons (read-token-loop first-char) '()))))