From 7db3c0405a7fc2895095e91abe910626aee2bc5d Mon Sep 17 00:00:00 2001 From: Shagun Agrawal Date: Fri, 16 Aug 2024 23:40:18 +0530 Subject: Add lexer implementation for ch2 Add lexer implementation Add reference for base implementation of the lexer --- src/cljcc/lexer.clj | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/cljcc/lexer.clj') 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) @@ -20,6 +22,12 @@ (-> ctx (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) -- cgit v1.2.3