diff --git a/src/LR0.cpp b/src/LR0.cpp index a0ecac2c..5d174678 100644 --- a/src/LR0.cpp +++ b/src/LR0.cpp @@ -116,13 +116,12 @@ LR0::Closure LR0::getClosure (const Closure& items) //////////////////////////////////////////////////////////////////////////////// // Collect a unique set of expected symbols from the closure. -std::vector LR0::getExpected (const Closure& closure) +std::set LR0::getExpected (const Closure& closure) { - std::vector expected; + std::set expected; for (auto& item : closure) - if (! item.done () && - std::find (expected.begin (), expected.end (), item.next ()) == expected.end ()) - expected.push_back (item.next ()); + if (! item.done ()) + expected.insert (item.next ()); return expected; } diff --git a/src/LR0.h b/src/LR0.h index ae7635ff..cdaa2d80 100644 --- a/src/LR0.h +++ b/src/LR0.h @@ -28,6 +28,7 @@ #define INCLUDED_LR0 #include +#include #include #include @@ -68,7 +69,7 @@ public: private: Closure getClosure (const Closure&); - std::vector getExpected (const Closure&); + std::set getExpected (const Closure&); private: // Copy of the augmented grammar.