From cef65063cec641a93973b38a48e100fdd115db44 Mon Sep 17 00:00:00 2001
From: Patrick Simianer
Date: Sat, 23 Aug 2014 22:59:16 +0100
Subject: rewritten grammar
---
fast/parse.hh | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 103 insertions(+)
create mode 100644 fast/parse.hh
(limited to 'fast/parse.hh')
diff --git a/fast/parse.hh b/fast/parse.hh
new file mode 100644
index 0000000..9fbcdea
--- /dev/null
+++ b/fast/parse.hh
@@ -0,0 +1,103 @@
+#pragma once
+
+#include
+#include
+#include
+#include
+
+#include "grammar.hh"
+
+
+using namespace std;
+
+typedef pair Span;
+namespace std {
+ template <>
+ struct hash
+ {
+ size_t
+ operator()(Span const& k) const
+ {
+ return ((hash()(k.first)
+ ^ (hash()(k.second) << 1)) >> 1);
+ }
+ };
+}
+
+namespace Parse {
+
+void visit(vector& p,
+ size_t i, size_t l, size_t r, size_t x=0)
+{
+ for (size_t span = i; span <= r-x; span++) {
+ for (size_t k = l; k <= r-span; k++) {
+ p.push_back(Span(k,k+span));
+ }
+ }
+}
+
+struct ChartItem
+{
+ Span span;
+ G::Rule const* rule;
+ vector tails;
+ size_t dot;
+
+ ChartItem(G::Rule* r)
+ {
+ rule = r;
+ dot = 0;
+ }
+
+ ChartItem(ChartItem const& o)
+ {
+ span.first = o.span.first;
+ span.second = o.span.second;
+ rule = o.rule;
+ for (auto it: o.tails)
+ tails.push_back(it);
+ dot = o.dot;
+ }
+};
+
+struct Chart
+{
+ size_t n_;
+ unordered_map > m_;
+ unordered_map b_;
+
+ vector& at(Span s)
+ {
+ return m_[s];
+ }
+
+ string h(ChartItem* item, Span s)
+ {
+ ostringstream ss;
+ ss << item->rule->lhs->symbol;
+ ss << s.first;
+ ss << s.second;
+ return ss.str();
+ }
+
+ void add(ChartItem* item, Span s)
+ {
+ m_[s].push_back(item);
+ b_[h(item, s)] = true;
+ }
+
+ Chart(size_t n)
+ {
+ }
+};
+
+
+void init(vector const& in, size_t n, Chart& active, Chart& passive, G::Grammar const& g)
+{
+ for (auto rule: g.flat) {
+ }
+}
+
+
+} //
+
--
cgit v1.2.3