From 76041390b66ae1a7e903bfd40b3b176dc895b385 Mon Sep 17 00:00:00 2001 From: Shagun Agrawal Date: Sun, 21 Jul 2024 00:11:14 +0530 Subject: add parser for ch1 --- src/cljcc/cljcc.clj | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/cljcc/cljcc.clj') diff --git a/src/cljcc/cljcc.clj b/src/cljcc/cljcc.clj index 6493b08..1e102af 100644 --- a/src/cljcc/cljcc.clj +++ b/src/cljcc/cljcc.clj @@ -1,6 +1,28 @@ (ns cljcc.cljcc + (:require + [instaparse.core :as insta] + [clojure.java.io :as io]) (:gen-class)) +(def ex-prg "int main(void) {return 2;}") + +(def whitespace + (insta/parser + "whitespace = #'\\s+'")) + +(def c-parser + (insta/parser + " = function+ + function = #'int\\b' identifier <'('> #'void\\b' <')'> <'{'> statement <'}'> + statement = #'return\\b' exp <';'> + exp = constant + identifier = #'[a-zA-Z_]\\w*\\b' + constant = #'[0-9]+\\b' + keyword = #'int\\b' | #'return\\b' | #'void\\b'" + :auto-whitespace whitespace)) + +(println (c-parser ex-prg)) + (defn greet "Callable entry point to the application." [data] @@ -9,4 +31,5 @@ (defn -main "I don't do a whole lot ... yet." [& args] + (let [input-file-path (first args)]) (greet {:name (first args)})) -- cgit v1.2.3