aboutsummaryrefslogtreecommitdiff
path: root/demos/parse/EliminateLeftRecursion.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'demos/parse/EliminateLeftRecursion.cpp')
-rw-r--r--demos/parse/EliminateLeftRecursion.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/demos/parse/EliminateLeftRecursion.cpp b/demos/parse/EliminateLeftRecursion.cpp
new file mode 100644
index 00000000..e5b97cc0
--- /dev/null
+++ b/demos/parse/EliminateLeftRecursion.cpp
@@ -0,0 +1,21 @@
+#include <iostream>
+
+#include "cru/parse/Grammar.hpp"
+
+int main() {
+ using namespace cru::parse;
+ Grammar grammar;
+
+ auto S = grammar.CreateNonterminal(u"S");
+ auto a = grammar.CreateTerminal(u"a");
+
+ grammar.CreateProduction(u"S := S a", S, {S, a});
+ grammar.CreateProduction(u"S := a", S, {a});
+ grammar.SetStartSymbol(S);
+
+ grammar.EliminateLeftRecursions();
+
+ std::cout << grammar.ProductionsToString().ToUtf8();
+
+ return 0;
+}