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; + } +}