diff options
| author | Shagun Agrawal <agrawalshagun07@gmail.com> | 2024-08-11 22:16:47 +0530 |
|---|---|---|
| committer | Shagun Agrawal <agrawalshagun07@gmail.com> | 2024-08-11 22:16:47 +0530 |
| commit | ca4892ea62cfaca99f9174f58500457ea4a87354 (patch) | |
| tree | 1d876fc539fd26179c34f95b8d3c4e5f5b1805e4 /src/cljcc/driver.clj | |
| parent | 0f4b96b2b02822abf6f84903366709b1336905a2 (diff) | |
Add lexer
Add custom lexer
Pass chapter 1 lex stages
Diffstat (limited to 'src/cljcc/driver.clj')
| -rw-r--r-- | src/cljcc/driver.clj | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/src/cljcc/driver.clj b/src/cljcc/driver.clj index 9f81bb0..780bd8d 100644 --- a/src/cljcc/driver.clj +++ b/src/cljcc/driver.clj @@ -3,6 +3,7 @@ [clojure.java.io :as io] [cljcc.compiler :as c] [cljcc.tacky :as t] + [cljcc.lexer :as l] [cljcc.emit :as e] [clojure.pprint :as pp] [cljcc.log :as log] @@ -56,6 +57,14 @@ (log/info "Input file is succesfully parsed.") (throw (Exception. "Failed during parsing"))))) +(defn lexer-step [directory filename] + (let [preprocessed-file-path (make-file-name directory (remove-extension filename) "i") + file (io/file preprocessed-file-path) + source (slurp file) + output (l/lex source)] + (log/info "Input file is succesfully lexed.") + (pp/pprint output))) + (defn tacky-step [directory filename] (let [preprocessed-file-path (make-file-name directory (remove-extension filename) "i") file (io/file preprocessed-file-path) @@ -78,18 +87,19 @@ (io/delete-file (make-file-name directory file-without-ext "s") true))) (defn create-steps [options directory filename] - (let [base-steps [(partial validate-os) - (partial preprocessor-step directory filename)] - parser-step-fn (partial parser-step directory filename) - compiler-step-fn (partial compiler-step directory filename) - assemble-step-fn (partial assemble-step directory filename) - tacky-step-fn (partial tacky-step directory filename)] + (let [steps [(partial validate-os) + (partial preprocessor-step directory filename) + (partial lexer-step directory filename) + (partial parser-step directory filename) + (partial tacky-step directory filename) + (partial compiler-step directory filename) + (partial assemble-step directory filename)]] (cond - (:parse options) (concat base-steps [parser-step-fn]) - (:tacky options) (concat base-steps [parser-step-fn tacky-step-fn]) - (:codegen options) (concat base-steps [parser-step-fn tacky-step-fn compiler-step-fn]) - :else (concat base-steps - [parser-step-fn tacky-step-fn compiler-step-fn assemble-step-fn])))) + (:lex options) (subvec steps 0 3) + (:parse options) (subvec steps 0 4) + (:tacky options) (subvec steps 0 5) + (:codegen options) (subvec steps 0 6) + :else steps))) (defn run-steps [options directory filename] (let [steps (create-steps options directory filename)] |
