blob: 8f1f917d87ddb482a5fc7d14a585dd6de67a3b10 [file] [log] [blame]
/*=============================================================================
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
]
;
}
}}