Line data Source code
1 : #include "../../inc/lexicalAnalysis/nicoleSintax.h"
2 :
3 : namespace nicole {
4 :
5 18 : const Lexer NicoleSintax::createLexer() const noexcept {
6 18 : return Lexer{
7 18 : std::vector<Category>{
8 18 : Category{TokenType::SPACE, "\\s+", true},
9 18 : Category{TokenType::COMMENT, "\\/\\*(.|\\n)*?\\*\\/", true},
10 :
11 18 : Category{TokenType::NUMBER_FLOAT, "f\\d+\\.\\d+([eE][-]?\\d+)?",
12 18 : false},
13 18 : Category{TokenType::NUMBER_DOUBLE, "\\d+\\.\\d+([eE][-]?\\d+)?",
14 18 : false},
15 18 : Category{TokenType::NUMBER_INT, "\\d+([eE][-]?\\d+)?", false},
16 18 : Category{TokenType::CHAR, "\'(?:\\\\.|[^\'\\\\])\'", false},
17 18 : Category{TokenType::STRING, "\"(?:\\\\.|[^\"\\\\])*\"", false},
18 18 : Category{TokenType::TRUE, "true", false},
19 18 : Category{TokenType::FALSE, "false", false},
20 18 : Category{TokenType::NULLPTR, "null", false},
21 :
22 18 : Category{TokenType::TYPE_VOID, "void", false},
23 18 : Category{TokenType::TYPE_BOOL, "bool", false},
24 18 : Category{TokenType::TYPE_CHAR, "char", false},
25 18 : Category{TokenType::TYPE_DOUBLE, "double", false},
26 18 : Category{TokenType::TYPE_FLOAT, "float", false},
27 18 : Category{TokenType::TYPE_INT, "int", false},
28 :
29 : // constructor here to avoid conflict eith const
30 18 : Category{TokenType::CONSTRUCTOR, "constructor", false},
31 18 : Category{TokenType::DESTRUCTOR, "destructor", false},
32 :
33 18 : Category{TokenType::CONST, "const", false},
34 18 : Category{TokenType::LET, "let", false},
35 18 : Category{TokenType::AUTO, "auto", false},
36 18 : Category{TokenType::PTR, "ptr", false},
37 18 : Category{TokenType::VECTOR, "vector", false},
38 :
39 18 : Category{TokenType::NEW, "new", false},
40 18 : Category{TokenType::DELETE, "delete", false},
41 :
42 18 : Category{TokenType::IMPORT, "import", false},
43 18 : Category{TokenType::PRINT, "print", false},
44 18 : Category{TokenType::SYSTEM, "system", false},
45 18 : Category{TokenType::TYPE, "type", false},
46 :
47 18 : Category{TokenType::SWITCH, "switch", false},
48 18 : Category{TokenType::CASE, "case", false},
49 18 : Category{TokenType::DEFAULT, "default", false},
50 :
51 18 : Category{TokenType::IF, "if", false},
52 18 : Category{TokenType::ELSE, "else", false},
53 :
54 18 : Category{TokenType::WHILE, "while", false},
55 18 : Category{TokenType::FOR, "for", false},
56 18 : Category{TokenType::STOP, "stop", false},
57 18 : Category{TokenType::PASS, "pass", false},
58 :
59 18 : Category{TokenType::RETURN, "return", false},
60 18 : Category{TokenType::FUNCTION, "def", false},
61 :
62 18 : Category{TokenType::ENUM, "enum", false},
63 18 : Category{TokenType::STRUCT, "struct", false},
64 18 : Category{TokenType::CLASS, "class", false},
65 18 : Category{TokenType::PRIVATE, "private", false},
66 18 : Category{TokenType::PUBLIC, "public", false},
67 18 : Category{TokenType::PROTECTED, "protected", false},
68 18 : Category{TokenType::EXTENDS, "extends", false},
69 18 : Category{TokenType::METHOD, "method", false},
70 18 : Category{TokenType::ATTR, "attr", false},
71 18 : Category{TokenType::THIS, "this", false},
72 18 : Category{TokenType::OVERRIDE, "override", false},
73 18 : Category{TokenType::VIRTUAL, "virtual", false},
74 :
75 : // str here so it does not conflict with struct
76 18 : Category{TokenType::TYPE_STR, "str", false},
77 :
78 18 : Category{TokenType::SUPER, "super", false},
79 :
80 18 : Category{TokenType::OR, "or", false},
81 18 : Category{TokenType::AND, "and", false},
82 :
83 : // avoids the conflic between do and double
84 18 : Category{TokenType::ID, "(?!\\b(do)\\b)[a-zA-Z]+[a-zA-Z0-9_]*",
85 18 : false},
86 :
87 18 : Category{TokenType::DO, "do", false},
88 :
89 18 : Category{TokenType::RP, "\\)", false},
90 18 : Category{TokenType::LP, "\\(", false},
91 18 : Category{TokenType::RB, "\\}", false},
92 18 : Category{TokenType::LB, "\\{", false},
93 18 : Category{TokenType::RC, "\\]", false},
94 18 : Category{TokenType::LC, "\\[", false},
95 18 : Category{TokenType::SEMICOLON, ";", false},
96 18 : Category{TokenType::COMMA, ",", false},
97 18 : Category{TokenType::TERNARY, "\\?", false},
98 :
99 18 : Category{TokenType::DOTDOT_ASSIGNMENT, ":=", false},
100 :
101 18 : Category{TokenType::DOTDOT, ":", false},
102 18 : Category{TokenType::DOT, "\\.", false},
103 :
104 18 : Category{TokenType::SELF_ADD, "\\+=", false},
105 18 : Category{TokenType::SELF_SUB, "\\-=", false},
106 18 : Category{TokenType::SELF_MULT, "\\*=", false},
107 18 : Category{TokenType::SELF_DIV, "\\/=", false},
108 :
109 18 : Category{TokenType::SMALLEREQUAL, "<=", false},
110 18 : Category{TokenType::BIGGEREQUAL, ">=", false},
111 18 : Category{TokenType::NOTEQUAL, "!=", false},
112 18 : Category{TokenType::EQUAL, "==", false},
113 :
114 18 : Category{TokenType::ASSIGNMENT, "=", false},
115 :
116 18 : Category{TokenType::INCREMENT, "\\+\\+", false},
117 18 : Category{TokenType::DECREMENT, "\\-\\-", false},
118 18 : Category{TokenType::OPERATOR_ADD, "[+]", false},
119 18 : Category{TokenType::OPERATOR_SUB, "[-]", false},
120 18 : Category{TokenType::OPERATOR_MULT, "[\\*]", false},
121 18 : Category{TokenType::OPERATOR_DIV, "[/]", false},
122 18 : Category{TokenType::OPERATOR_SMALLER, "[<]", false},
123 18 : Category{TokenType::OPERATOR_GREATER, "[>]", false},
124 18 : Category{TokenType::OPERATOR_NOT, "[!]", false},
125 18 : Category{TokenType::OPERATOR_MODULE, "[%]", false}},
126 18 : extension()};
127 18 : };
128 :
129 : } // namespace nicole
|