2626
2727#define TOKEN_QUICK_BODY 14 + MAX_TOKEN_LIMIT
2828
29- #define TOKEN_DEFINE_KW 15 + MAX_TOKEN_LIMIT
29+ #define TOKEN_CONST_KW 15 + MAX_TOKEN_LIMIT
3030
3131#define END 16 + MAX_TOKEN_LIMIT
3232
@@ -47,7 +47,7 @@ inline function_call_token* print_encapsulate(token* token) {
4747 return call_tok;
4848 }
4949 }
50- std::vector <class token *> args;
50+ std::list <class token *> args;
5151 args.push_back (token);
5252 return new function_call_token (new identifier_token (new char [0 ], 275790354 ), args);
5353}
@@ -83,11 +83,11 @@ token* lexer::read_token() {
8383 read_char ();
8484 }
8585 if (isalpha (last_char) || last_char == ' _' || last_char == ' @' ) {
86- std::vector <char > id_chars;
86+ std::list <char > id_chars;
8787 do {
8888 id_chars.push_back (last_char);
8989 }
90- while (isalpha (read_char ()) || last_char == ' _' );
90+ while (isalpha (read_char ()) || last_char == ' _' || last_char == ' @ ' );
9191 char * id_buf = new char [id_chars.size () + 1 ];
9292 int index = 0 ;
9393 for (auto it = id_chars.begin (); it != id_chars.end (); ++it)
@@ -130,7 +130,7 @@ token* lexer::read_token() {
130130 case 4135260141 :
131131 return last_tok = new token (TOKEN_STATIC_KW);
132132 case 275975372 :
133- return last_tok = new token (TOKEN_DEFINE_KW );
133+ return last_tok = new token (TOKEN_CONST_KW );
134134 case 1413452809 :
135135 return last_tok = new token (TOKEN_INCLUDE);
136136 case 264645514 : // break
@@ -145,7 +145,7 @@ token* lexer::read_token() {
145145 }
146146 }
147147 else if (isdigit (last_char)) {
148- std::vector <char > num_chars;
148+ std::list <char > num_chars;
149149 do {
150150 num_chars.push_back (last_char);
151151 }
@@ -160,7 +160,7 @@ token* lexer::read_token() {
160160 return last_tok = to_ret;
161161 }
162162 else if (last_char == ' \" ' ) {
163- std::vector <token*> chars;
163+ std::list <token*> chars;
164164 read_char ();
165165 while (!eos () && last_char != ' \" ' )
166166 {
@@ -294,8 +294,8 @@ char lexer::read_data_char() {
294294 return ret_char;
295295}
296296
297- std::vector <token*> lexer::tokenize (bool interactive_mode) {
298- std::vector <token*> tokens;
297+ std::list <token*> lexer::tokenize (bool interactive_mode) {
298+ std::list <token*> tokens;
299299 while (!eos () && last_tok->type != TOKEN_CLOSE_BRACE)
300300 {
301301 token* tok = tokenize_statement (interactive_mode);
@@ -311,10 +311,12 @@ std::vector<token*> lexer::tokenize(bool interactive_mode) {
311311token* lexer::tokenize_statement (bool interactive_mode) {
312312 switch (last_tok->type )
313313 {
314- case TOKEN_DEFINE_KW : {
314+ case TOKEN_CONST_KW : {
315315 delete last_tok;
316316 match_tok (read_token (), TOKEN_IDENTIFIER);
317317 identifier_token* id = (identifier_token*)last_tok;
318+ match_tok (read_token (), TOKEN_SET);
319+ delete last_tok;
318320 match_tok (read_token (), TOKEN_VALUE);
319321 value_token* value_tok = (value_token*)last_tok;
320322 constants->insert (std::pair<unsigned long , value*>(id->id_hash , value_tok->get_value ()));
@@ -402,7 +404,7 @@ token* lexer::tokenize_statement(bool interactive_mode) {
402404 identifier_token* proto_id = (identifier_token*)last_tok;
403405 match_tok (read_token (), TOKEN_OPEN_BRACE);
404406 delete last_tok;
405- std::vector <identifier_token*> properties;
407+ std::list <identifier_token*> properties;
406408 while (!eos () && read_token ()->type != TOKEN_CLOSE_BRACE)
407409 {
408410 match_tok (last_tok, TOKEN_IDENTIFIER);
@@ -420,7 +422,7 @@ token* lexer::tokenize_statement(bool interactive_mode) {
420422 identifier_token* proto_id = (identifier_token*)last_tok;
421423 match_tok (read_token (), TOKEN_OPEN_PARAM);
422424 delete last_tok;
423- std::vector <identifier_token*> params;
425+ std::list <identifier_token*> params;
424426 while (!eos () && read_token ()->type != TOKEN_CLOSE_PARAM)
425427 {
426428 if (last_tok->type == TOKEN_COMMA) {
@@ -444,27 +446,27 @@ token* lexer::tokenize_statement(bool interactive_mode) {
444446 delete last_tok;
445447 read_token ();
446448 token* val_tok = tokenize_expression ();
447- std::vector <token*> modifiers;
449+ std::list <token*> modifiers;
448450 modifiers.push_back (id);
449451 return new set_token (new variable_access_token (modifiers), val_tok, true );
450452 }
451453 }
452454 throw ERROR_UNEXPECTED_TOKEN;
453455}
454456
455- std::vector <token*> lexer::tokenize_body () {
457+ std::list <token*> lexer::tokenize_body () {
456458 if (last_tok->type == TOKEN_OPEN_BRACE) {
457459 delete last_tok;
458460 read_token ();
459- std::vector <token*> body = tokenize (false );
461+ std::list <token*> body = tokenize (false );
460462 delete last_tok;
461463 read_token ();
462464 return body;
463465 }
464466 else if (last_tok->type == TOKEN_QUICK_BODY) {
465467 delete last_tok;
466468 read_token ();
467- std::vector <token*> body;
469+ std::list <token*> body;
468470 body.push_back (tokenize_statement (false ));
469471 return body;
470472 }
@@ -481,7 +483,7 @@ variable_access_token* lexer::tokenize_var_access(){
481483}
482484
483485variable_access_token* lexer::tokenize_var_access (identifier_token* identifier) {
484- std::vector <token*> toks;
486+ std::list <token*> toks;
485487 toks.push_back (identifier);
486488 while (true )
487489 {
@@ -512,7 +514,7 @@ token* lexer::tokenize_value() {
512514 // tokenize function call
513515 if (last_tok->type == TOKEN_OPEN_PARAM) {
514516 delete last_tok;
515- std::vector <token*> arguments;
517+ std::list <token*> arguments;
516518 while (true )
517519 {
518520 read_token ();
@@ -568,7 +570,7 @@ token* lexer::tokenize_value() {
568570 }
569571 else if (last_tok->type == TOKEN_OPEN_BRACKET) {
570572 delete last_tok;
571- std::vector <token*> values;
573+ std::list <token*> values;
572574 while (true )
573575 {
574576 read_token ();
0 commit comments