From bbac9a9c6e88b098c120f4c9d6798ae0ef3d23df Mon Sep 17 00:00:00 2001
From: Simon Brooke <simon@journeyman.cc>
Date: Tue, 10 Feb 2015 22:26:53 +0000
Subject: [PATCH] New work on the parser, based on instaparse.

---
 project.clj             |  1 +
 src/mw_parser/insta.clj | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+)
 create mode 100644 src/mw_parser/insta.clj

diff --git a/project.clj b/project.clj
index 4fb0b2a..9615663 100644
--- a/project.clj
+++ b/project.clj
@@ -13,5 +13,6 @@
   :plugins [[lein-marginalia "0.7.1"]]
   :dependencies [[org.clojure/clojure "1.5.1"]
                  [org.clojure/tools.trace "0.7.8"]
+                 [instaparse "1.3.5"]
                  [mw-engine "0.1.5-SNAPSHOT"]
                  ])
diff --git a/src/mw_parser/insta.clj b/src/mw_parser/insta.clj
new file mode 100644
index 0000000..f663861
--- /dev/null
+++ b/src/mw_parser/insta.clj
@@ -0,0 +1,32 @@
+(ns mw-parser.insta
+  (:use mw-engine.utils
+        [clojure.string :only [split trim triml]])
+  (:require [instaparse.core :as insta]))
+
+
+(def grammar 
+  "RULE := 'if' SPACE CONDITIONS SPACE 'then' SPACE ACTIONS;
+   CONDITIONS := CONDITION | CONDITION SPACE 'and' SPACE CONDITIONS;
+   CONDITION := DISJUNCT-CONDITION | PROPERTY-CONDITION;
+   DISJUNCT-CONDITION := CONDITION SPACE 'or' SPACE CONDITION;
+   PROPERTY-CONDITION := PROPERTY SPACE 'is' SPACE EXPRESSION;
+   EXPRESSION := VALUE QUALIFIER EXPRESSION | VALUE OPERATOR EXPRESSION | VALUE;
+   QUALIFIER := SPACE 'more' SPACE 'than' SPACE | SPACE 'less' SPACE 'than' SPACE | SPACE 'fewer' SPACE 'than' SPACE | SPACE 'equal' SPACE 'to' SPACE ;
+   OPERATOR := '+' | '-' | '*' | '/';
+   PROPERTY := SYMBOL;
+   VALUE := SYMBOL | NUMBER;
+   NUMBER := #'[0-9.]+';
+   SYMBOL := #'[a-z]+';
+   ACTIONS := ACTION | ACTION SPACE 'and' SPACE ACTIONS
+   ACTION := SYMBOL SPACE 'should' SPACE 'be' SPACE EXPRESSION
+   SPACE := #'[:blank:]*'"
+  )
+
+(def rule-parser
+  (insta/parser grammar))
+
+(def token-parser (insta/parser "TOKEN := #'[a-z]+'"))
+
+
+  
+  
\ No newline at end of file