aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cljcc/lexer.clj10
-rw-r--r--src/cljcc/token.clj3
2 files changed, 11 insertions, 2 deletions
diff --git a/src/cljcc/lexer.clj b/src/cljcc/lexer.clj
index 10742f0..9922887 100644
--- a/src/cljcc/lexer.clj
+++ b/src/cljcc/lexer.clj
@@ -9,10 +9,12 @@
:line 1
:col 1})
+(str \1 nil)
+
(defn lex
([source]
(lex source 0 (lexer-ctx)))
- ([[ch :as source] pos {:keys [line col] :as ctx}]
+ ([[ch pk :as source] pos {:keys [line col] :as ctx}]
(cond
(empty? source) (update ctx :tokens #(conj % (t/create :eof line col)))
(newline? ch) (recur (next source)
@@ -21,6 +23,12 @@
(update :line inc)
(update :col (fn [_] 1))))
(contains?
+ t/chrs-kind-map (str ch pk)) (recur (next (next source))
+ (+ pos 2)
+ (-> ctx
+ (update :col #(+ % 2))
+ (update :tokens #(conj % (t/create (get t/chrs-kind-map (str ch pk)) line col)))))
+ (contains?
t/chrs-kind-map ch) (recur (next source)
(+ pos 1)
(-> ctx
diff --git a/src/cljcc/token.clj b/src/cljcc/token.clj
index 6df4f43..63c1eda 100644
--- a/src/cljcc/token.clj
+++ b/src/cljcc/token.clj
@@ -47,7 +47,8 @@
"++" :increment
\; :semicolon
\+ :plus
- \- :minus
+ \- :hyphen
+ \~ :complement
\* :multiply
\% :remainder
\/ :divide})