1 #include <frith/lexer.hpp>
3 #include <ail/string.hpp>
4 #include <ail/array.hpp>
8 bool tables_initialised
= false;
10 operator_lexeme operators
[] =
12 operator_lexeme(lexeme_type_addition
, "+"),
13 operator_lexeme(lexeme_type_subtraction
, "-"),
14 operator_lexeme(lexeme_type_multiplication
, "*"),
15 operator_lexeme(lexeme_type_division
, "/"),
16 operator_lexeme(lexeme_type_modulo
, "%"),
17 operator_lexeme(lexeme_type_exponentiation
, "**"),
19 operator_lexeme(lexeme_type_increment
, "++"),
20 operator_lexeme(lexeme_type_decrement
, "--"),
22 operator_lexeme(lexeme_type_less_than
, "<"),
23 operator_lexeme(lexeme_type_less_than_or_equal
, "<="),
24 operator_lexeme(lexeme_type_greater_than
, ">"),
25 operator_lexeme(lexeme_type_greater_than_or_equal
, ">="),
26 operator_lexeme(lexeme_type_unequal
, "!="),
27 operator_lexeme(lexeme_type_equal
, "="),
29 operator_lexeme(lexeme_type_logical_not
, "!"),
31 operator_lexeme(lexeme_type_logical_and
, "&"),
32 operator_lexeme(lexeme_type_logical_or
, "|"),
34 operator_lexeme(lexeme_type_shift_left
, "<<"),
35 operator_lexeme(lexeme_type_shift_right
, ">>"),
37 operator_lexeme(lexeme_type_binary_and
, "&&"),
38 operator_lexeme(lexeme_type_binary_or
, "||"),
39 operator_lexeme(lexeme_type_binary_xor
, "^"),
41 operator_lexeme(lexeme_type_binary_not
, "~"),
43 operator_lexeme(lexeme_type_bracket_start
, "["),
44 operator_lexeme(lexeme_type_bracket_end
, "]"),
46 operator_lexeme(lexeme_type_array_start
, "{"),
47 operator_lexeme(lexeme_type_array_end
, "}"),
49 operator_lexeme(lexeme_type_scope_start
, "("),
50 operator_lexeme(lexeme_type_scope_end
, ")"),
52 operator_lexeme(lexeme_type_iteration
, "\\"),
53 operator_lexeme(lexeme_type_iterator
, "#"),
54 operator_lexeme(lexeme_type_function_declaration
, "@"),
55 operator_lexeme(lexeme_type_anonymous_function_declaration
, "@@"),
56 operator_lexeme(lexeme_type_class_operator
, "$"),
57 operator_lexeme(lexeme_type_dot
, "."),
60 std::vector
<operator_lexeme
> operator_lexeme_data
;
62 void initialise_tables()
64 boost::mutex::scoped_lock
scoped_lock(table_mutex
);
66 if(tables_initialised
)
69 tables_initialised
= true;
71 std::sort(operators
, operators
+ ail::countof(operators
));
73 for(std::size_t i
= 0; i
< ail::countof(operators
); i
++)
74 operator_lexeme_data
.push_back(operators
[i
]);