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.scm21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/modules/lexer/lexer.scm b/src/modules/lexer/lexer.scm
index a6be215..4078db4 100644
--- a/src/modules/lexer/lexer.scm
+++ b/src/modules/lexer/lexer.scm
@@ -28,13 +28,25 @@ current input port."
'close-brace)
((eqv? chr #\;)
'semi-colon)
+ ((eqv? chr #\~)
+ 'complement)
- ((char-alphabetic? chr)
- (lookup-keyword (read-identifier chr)))
+ ((eqv? chr #\+)
+ (if (take-two? chr)
+ 'increment
+ 'add))
+
+ ((eqv? chr #\-)
+ (if (take-two? chr)
+ 'decrement
+ 'sub))
((char-numeric? chr)
(read-constant chr))
+ ((char-alphabetic? chr)
+ (lookup-keyword (read-identifier chr)))
+
(#t (error "illegal lexical syntax")))))
(define (read-constant chr)
@@ -58,6 +70,11 @@ current input port."
(#t (reverse chrs-so-far)))))
(list->string (read-identifier-helper (list chr))))
+(define (take-two? chr)
+ (if (eqv? chr (peek-char))
+ (read-char)
+ #f))
+
(define (lookup-keyword id)
"Given identifier ID, converts it to a keyword
if one is known."