summaryrefslogtreecommitdiff
path: root/src/lexer.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lexer.lisp')
-rw-r--r--src/lexer.lisp48
1 files changed, 24 insertions, 24 deletions
diff --git a/src/lexer.lisp b/src/lexer.lisp
index 8694aa1..3dffc7c 100644
--- a/src/lexer.lisp
+++ b/src/lexer.lisp
@@ -1,4 +1,4 @@
-(in-package :monkey)
+(in-package :lexer)
(defparameter *eof* (code-char 0))
@@ -29,7 +29,7 @@
(ch :accessor ch)
(peek-ch :accessor peek-ch)))
-(defun make-lexer (input-string &optional len)
+(defun make (input-string &optional len)
(let ((l (make-instance 'lexer :input input-string
:length (if (not (null len))
len
@@ -67,35 +67,35 @@
(prog1 (case (ch l)
(#\= (cond ((char= #\= (lexer-peek l))
(lexer-read l)
- (make-token :t/== "=="))
+ (token:as-token :t/==))
(t ;;(whitespace? (lexer-peek l))
- (make-token :t/= (ch l)))))
- (#\+ (make-token :t/+ (ch l)))
- (#\- (make-token :t/- (ch l)))
+ (token:as-token :t/=))))
+ (#\+ (token:as-token :t/+))
+ (#\- (token:as-token :t/-))
(#\! (cond ((char= #\= (lexer-peek l))
(lexer-read l)
- (make-token :t/!= "!="))
+ (token:as-token :t/!=))
(t ;; (whitespace? (lexer-peek l))
- (make-token :t/! (ch l)))))
- (#\/ (make-token :t// (ch l)))
- (#\* (make-token :t/* (ch l)))
- (#\< (make-token :t/< (ch l)))
- (#\> (make-token :t/> (ch l)))
- (#\; (make-token :t/semicolon (ch l)))
- (#\, (make-token :t/comma (ch l)))
- (#\( (make-token :t/lparen (ch l)))
- (#\) (make-token :t/rparen (ch l)))
- (#\{ (make-token :t/lbrace (ch l)))
- (#\} (make-token :t/rbrace (ch l)))
+ (token:as-token :t/!))))
+ (#\/ (token:as-token :t//))
+ (#\* (token:as-token :t/*))
+ (#\< (token:as-token :t/<))
+ (#\> (token:as-token :t/>))
+ (#\; (token:as-token :t/semicolon))
+ (#\, (token:as-token :t/comma))
+ (#\( (token:as-token :t/lparen))
+ (#\) (token:as-token :t/rparen))
+ (#\{ (token:as-token :t/lbrace))
+ (#\} (token:as-token :t/rbrace))
(otherwise (cond ((eof? (ch l))
- (make-token :t/eof ""))
+ (token:as-token :t/eof))
((letter? (ch l))
(let ((literal (read-identifier l)))
- (return (make-token (lookup-identifier literal)
+ (return (token:make (token:lookup-identifier literal)
literal))))
((digit? (ch l))
- (return (make-token :t/int (read-number l))))
- (t (make-token :t/illegal "ILLEGAL")))))
+ (return (token:make :t/int (read-number l))))
+ (t (token:make :t/illegal "ILLEGAL")))))
(lexer-read l))))
(defmethod read-number ((l lexer))
@@ -113,8 +113,8 @@
(make-string-view (input l) start (pos l))))
-(defmethod lexer-tokens ((l lexer))
+(defmethod lex ((l lexer))
(loop :for token := (next-token l)
:collect token
- :until (eq :t/eof (_type token))))
+ :until (token:type-is token :t/eof)))