From 27540745feb1423c92529cc10c93fe4331801c00 Mon Sep 17 00:00:00 2001
From: Robin Jadoul <robin.jadoul@gmail.com>
Date: Sat, 28 May 2016 14:40:52 +0200
Subject: [PATCH] Add another example

---
 examples/keywords/keywordsLexer.lxs |  6 +++++
 examples/keywords/main.cpp          | 37 +++++++++++++++++++++++++++++
 2 files changed, 43 insertions(+)
 create mode 100644 examples/keywords/keywordsLexer.lxs
 create mode 100644 examples/keywords/main.cpp

diff --git a/examples/keywords/keywordsLexer.lxs b/examples/keywords/keywordsLexer.lxs
new file mode 100644
index 0000000..5af824f
--- /dev/null
+++ b/examples/keywords/keywordsLexer.lxs
@@ -0,0 +1,6 @@
+MODULE = (M|m)odule
+END = [Ee]nd
+IF = if|If
+IDENT = [a-zA-Z_][a-zA-Z_0-9]*
+ignore = \n| |\t
+UNKNOWN = .
diff --git a/examples/keywords/main.cpp b/examples/keywords/main.cpp
new file mode 100644
index 0000000..0f4ecb1
--- /dev/null
+++ b/examples/keywords/main.cpp
@@ -0,0 +1,37 @@
+#include "KeywordsLexer.h"
+#include <iostream>
+
+int main() {
+    KeywordsLexer lex(std::cin);
+    try {
+        while (true) {
+            KeywordsLexer::Token tok = lex.nextToken();
+            switch (tok.type) {
+                case KeywordsLexer::MODULE:
+                    std::cout << "MODULE: ";
+                    break;
+                case KeywordsLexer::END:
+                    std::cout << "END: ";
+                    break;
+                case KeywordsLexer::IF:
+                    std::cout << "IF: ";
+                    break;
+                case KeywordsLexer::IDENT:
+                    std::cout << "IDENT: ";
+                    break;
+                case KeywordsLexer::UNKNOWN:
+                    std::cout << "UNKNOWN: ";
+                    break;
+                case KeywordsLexer::nonmatching: case KeywordsLexer::ignore:
+                    break; //These can never occur, just to satisfy the compiler...
+            }
+            std::cout << "\"" << tok.content << "\"" << std::endl;
+        }
+    }
+    catch (KeywordsLexer::NoMatch& err) {
+        std::cout << "'" << lex.peek() << "'" << " did not match" << std::endl;
+    }
+    catch (KeywordsLexer::NoMoreTokens& err) {
+        std::cout << "DONE" << std::endl;
+    }
+}