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