aboutsummaryrefslogtreecommitdiff
path: root/src/cljcc/cljcc.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/cljcc/cljcc.clj')
-rw-r--r--src/cljcc/cljcc.clj23
1 files changed, 23 insertions, 0 deletions
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
+ "<program> = 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)}))