aboutsummaryrefslogtreecommitdiff
path: root/demos/parse/EliminateLeftRecursion.cpp
blob: 9e054859c101661f8d498a23071eec6f2ddcf9df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>

#include "cru/parse/Grammar.h"

int main() {
  using namespace cru::parse;
  Grammar grammar;

  auto S = grammar.CreateNonterminal("S");
  auto a = grammar.CreateTerminal("a");

  grammar.CreateProduction("S := S a", S, {S, a});
  grammar.CreateProduction("S := a", S, {a});
  grammar.SetStartSymbol(S);

  grammar.EliminateLeftRecursions();

  std::cout << grammar.ProductionsToString();

  return 0;
}