summaryrefslogtreecommitdiff
path: root/src/piraha/Grammar.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/piraha/Grammar.cc')
-rw-r--r--src/piraha/Grammar.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/piraha/Grammar.cc b/src/piraha/Grammar.cc
new file mode 100644
index 00000000..9cb7f0b0
--- /dev/null
+++ b/src/piraha/Grammar.cc
@@ -0,0 +1,24 @@
+#include "Piraha.hpp"
+
+extern smart_ptr<Pattern> compile(smart_ptr<Group> g,bool ignCase,smart_ptr<Grammar> gram);
+
+smart_ptr<Grammar> pegGrammar = AutoGrammar::reparserGenerator();
+
+void Grammar::compile(std::string name,smart_ptr<Group> g) {
+ default_rule = name;
+ smart_ptr<Pattern> p = ::compile(g,false,this);
+ patterns.put(name,p);
+}
+void Grammar::compile(std::string name,std::string pattern) {
+ default_rule = name;
+ smart_ptr<Matcher> m = new Matcher(pegGrammar,"pattern",pattern.c_str());
+ smart_ptr<Group> g = m.dup<Group>();
+ if(m->matches()) {
+ smart_ptr<Pattern> p = ::compile(g,false,this);
+ patterns.put(name,p);
+ } else {
+ std::cout << "Could not compile(" << name << "," << pattern << ")" << std::endl;
+ std::cout << "pos = " << m->pos << std::endl;
+ assert(false);
+ }
+}