| /*============================================================================= |
| Copyright (c) 2001-2011 Hartmut Kaiser |
| |
| Distributed under the Boost Software License, Version 1.0. (See accompanying |
| file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
| =============================================================================*/ |
| |
| #include "lexer.hpp" |
| |
| namespace client { namespace lexer |
| { |
| template <typename BaseIterator> |
| conjure_tokens<BaseIterator>::conjure_tokens() |
| : identifier("[a-zA-Z_][a-zA-Z_0-9]*", ID_IDENTIFIER) |
| , uint_("[0-9]+", ID_UINT) |
| , bool_("true|false", ID_BOOL) |
| { |
| lex::_pass_type _pass; |
| |
| this->self = uint_ | bool_; |
| |
| this->self.add |
| ("void", ID_VOID_KWD) |
| ("int", ID_INT_KWD) |
| ("if", ID_IF_KWD) |
| ("else", ID_ELSE_KWD) |
| ("while", ID_WHILE_KWD) |
| ("return", ID_RETURN_KWD) |
| ; |
| |
| this->self.add |
| ("\\|\\|", ID_OP_LOGICAL_OR) |
| ("&&", ID_OP_LOGICAL_AND) |
| ("==", ID_OP_EQUAL) |
| ("!=", ID_OP_NOT_EQUAL) |
| ("<", ID_OP_LESS) |
| ("<=", ID_OP_LESS_EQUAL) |
| (">", ID_OP_GREATER) |
| (">=", ID_OP_GREATER_EQUAL) |
| ("\\+", ID_OP_PLUS) |
| ("\\-", ID_OP_MINUS) |
| ("\\*", ID_OP_TIMES) |
| ("\\/", ID_OP_DIVIDE) |
| ("!", ID_OP_NOT) |
| ; |
| |
| this->self += lex::char_('(') | ')' | '{' | '}' | ',' | '=' | ';'; |
| |
| this->self += |
| identifier |
| | lex::string("\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\/", ID_COMMENT) |
| [ |
| lex::_pass = lex::pass_flags::pass_ignore |
| ] |
| | lex::string("[ \t\n\r]+", ID_WHITESPACE) |
| [ |
| lex::_pass = lex::pass_flags::pass_ignore |
| ] |
| ; |
| } |
| }} |
| |