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