diff options
author | crupest <crupest@outlook.com> | 2021-12-14 21:34:59 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-12-14 21:34:59 +0800 |
commit | fa3794469430b4ddfe0b0ca62850e9911c99b558 (patch) | |
tree | 2cd038280f9fa21ae5c64b82730624d801208292 /demos | |
parent | 72abeb9c86d768a5c6a9a2d28dab037b145b7390 (diff) | |
download | cru-fa3794469430b4ddfe0b0ca62850e9911c99b558.tar.gz cru-fa3794469430b4ddfe0b0ca62850e9911c99b558.tar.bz2 cru-fa3794469430b4ddfe0b0ca62850e9911c99b558.zip |
...
Diffstat (limited to 'demos')
-rw-r--r-- | demos/CMakeLists.txt | 2 | ||||
-rw-r--r-- | demos/parse/CMakeLists.txt | 2 | ||||
-rw-r--r-- | demos/parse/EliminateLeftRecursion.cpp | 21 |
3 files changed, 25 insertions, 0 deletions
diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt index 3afb5f91..f2df325d 100644 --- a/demos/CMakeLists.txt +++ b/demos/CMakeLists.txt @@ -16,6 +16,8 @@ elseif(UNIX) add_subdirectory(xcb) endif() +add_subdirectory(parse) + # My computer graphics practice source codes. Needs `dlib` as dependency. if (CRU_BUILD_GRAPHICS_EXPERIMENTS) add_subdirectory(graphics_experiments) diff --git a/demos/parse/CMakeLists.txt b/demos/parse/CMakeLists.txt new file mode 100644 index 00000000..ceaa5c4e --- /dev/null +++ b/demos/parse/CMakeLists.txt @@ -0,0 +1,2 @@ +add_executable(cru_demo_parse_eliminate_left_recursion EliminateLeftRecursion.cpp) +target_link_libraries(cru_demo_parse_eliminate_left_recursion PRIVATE cru_parse) 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; +} |