diff options
author | c+1 | 2023-10-12 21:02:04 -0400 |
---|---|---|
committer | c+1 | 2023-10-12 21:02:04 -0400 |
commit | 85bb2db8dee7898c890f5d1fc0b3874bee3d88ba (patch) | |
tree | 384109ce9295a9c6ce0791993a8c9314c516d781 /src/lexer.c | |
parent | 58c7a71a50318940e747c365cc3f207dba432977 (diff) |
update examples
Diffstat (limited to 'src/lexer.c')
-rw-r--r-- | src/lexer.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/lexer.c b/src/lexer.c index efdc718..ba0e8e1 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -4,6 +4,8 @@ #include <stdio.h> #include "include/lexer.h" +#include "include/syntax.h" +#include "include/token.h" lexer_t* lexer_init(char* src) { lexer_t* lexer; @@ -57,11 +59,60 @@ void lexer_do_reg(lexer_t* lexer) { case SYNTAX_APPLY: lexer_add_current_char(lexer, TOKEN_APPLY); break; + case SYNTAX_TAG_DELIM: + lexer_add_current_char(lexer, TOKEN_TAG_DELIM); + break; + case SYNTAX_NAMESPACE_DELIM: + lexer_add_current_char(lexer, TOKEN_NAMESPACE_DELIM); + break; + case SYNTAX_SET: + lexer_add_current_char(lexer, TOKEN_SET); + break; + case SYNTAX_LLIST: + lexer_add_current_char(lexer, TOKEN_LLIST); + break; + case SYNTAX_RLIST: + lexer_add_current_char(lexer, TOKEN_RLIST); + break; + case SYNTAX_LGROUP: + lexer_add_current_char(lexer, TOKEN_LGROUP); + break; + case SYNTAX_RGROUP: + lexer_add_current_char(lexer, TOKEN_RGROUP); + break; + case SYNTAX_EXPR_END: + lexer_add_current_char(lexer, TOKEN_EXPR_END); + break; + case SYNTAX_STR_DELIM: + lexer_add_current_char(lexer, TOKEN_STR_DELIM); + break; + case SYNTAX_CHAR_DELIM: + lexer_add_current_char(lexer, TOKEN_CHAR_DELIM); + break; + case SYNTAX_LIST_DELIM: + lexer_add_current_char(lexer, TOKEN_LIST_DELIM); + break; default: lexer_add_current_char(lexer, TOKEN_UNKNOWN); } } +void lexer_do_chr(lexer_t* lexer) { + if (*lexer->src == '\'') { + lexer->state = LEXER_STATE_REG; + } else { + token_t* t; + + t = token_init(TOKEN_CHAR, *lexer->src); + + lexer_add_token(lexer, t); + } +} + +void lexer_do_str(lexer_t* lexer) { + +} + void lexer_run(lexer_t* lexer) { while (*lexer->src) { if (lexer->state == LEXER_STATE_REG) { lexer_do_reg(lexer); } |