The class translation is done I think
[fridhskrift.git] / lexer / operator.cpp
blob8e0c92a5753e951b57ce9063a0ca455f4f8353ab
1 #include <frith/lexer.hpp>
2 #include <algorithm>
3 #include <ail/string.hpp>
4 #include <ail/array.hpp>
6 namespace frith
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, "."),
58 operator_lexeme(lexeme_type_scope_operator, ":"),
61 std::vector<operator_lexeme> operator_lexeme_data;
63 void initialise_tables()
65 boost::mutex::scoped_lock scoped_lock(table_mutex);
67 if(tables_initialised)
68 return;
70 tables_initialised = true;
72 std::sort(operators, operators + ail::countof(operators));
74 for(std::size_t i = 0; i < ail::countof(operators); i++)
75 operator_lexeme_data.push_back(operators[i]);