From 56b705b741741e2a6c703320c7c6f8e1b3ec9a3c Mon Sep 17 00:00:00 2001 From: _N3m0 Date: Tue, 2 Jan 2024 22:44:42 +0100 Subject: [PATCH] refacto lexer --- lexer.c | 154 +++++++++++++++++++++++++++++--------------------------- main.c | 2 +- 2 files changed, 80 insertions(+), 76 deletions(-) diff --git a/lexer.c b/lexer.c index 783254c..e4991ca 100644 --- a/lexer.c +++ b/lexer.c @@ -17,6 +17,77 @@ Cursor prev = { .offset = -2, }; +void printtoken(Token* token){ + if (token == NULL){ + puts("NULL TOKEN"); + return; + } + + switch (token->type) { + case UNDEFINED_TYPE: + printf("UNDEFINED_TYPE: "); + break; + case DONT_CARE: + printf("DONT_CARE: "); + break; + case TEXT: + printf("TEXT: "); + break; + case BODY: + printf("BODY: "); + break; + case END_BODY: + printf("END_BODY: "); + break; + case HTML: + printf("HTML: "); + break; + case END_HTML: + printf("END_HTML: "); + break; + case A: + printf("A: "); + break; + case END_A: + printf("END_A: "); + break; + case UL: + printf("UL: "); + break; + case LI: + printf("LI: "); + break; + case H1: + printf("H1: "); + break; + case H2: + printf("H2: "); + break; + case H3: + printf("H3: "); + break; + case H4: + printf("H4: "); + break; + case H5: + printf("H5: "); + break; + case H6: + printf("H6: "); + break; + default: + printf("ERROR: UNKNOWN TOKEN: "); + break; + } + + if (token->value == NULL){ + puts("'NO VALUE FOUND'"); + return; + } + + printf("'%s'\n", token->value); +} + int increment_cursor(Cursor* cursor){ if (cursor->offset+1 < 0){ cursor->offset++; @@ -96,7 +167,7 @@ TokenType token_by_name(const char name[HTML_BALISE_LEN]){ return DONT_CARE; } -void create_text_token(Token* token, char* cursor){ +Token* create_text_token(Token* token, char* cursor){ int i = 0; do { @@ -109,9 +180,11 @@ void create_text_token(Token* token, char* cursor){ token->type = TEXT; token->value = "TODO"; token->len = i; + + return token; } -void create_balise_token(Token* token, char* cursor){ +Token* create_balise_token(Token* token, char* cursor){ char balise[HTML_BALISE_LEN] = {0}; int len = 0; @@ -132,6 +205,8 @@ void create_balise_token(Token* token, char* cursor){ do { cursor = nextchar(); } while (*cursor != '>'); + + return token; } Token* nexttoken(void){ @@ -146,81 +221,10 @@ Token* nexttoken(void){ } if (*cursor != '<'){ - create_text_token(token, cursor); + token = create_text_token(token, cursor); } else if (*cursor == '<'){ - create_balise_token(token, cursor); + token = create_balise_token(token, cursor); } return token; } - -void printtoken(Token* token){ - if (token == NULL){ - puts("NULL TOKEN"); - return; - } - - switch (token->type) { - case UNDEFINED_TYPE: - printf("UNDEFINED_TYPE: "); - break; - case DONT_CARE: - printf("DONT_CARE: "); - break; - case TEXT: - printf("TEXT: "); - break; - case BODY: - printf("BODY: "); - break; - case END_BODY: - printf("END_BODY: "); - break; - case HTML: - printf("HTML: "); - break; - case END_HTML: - printf("END_HTML: "); - break; - case A: - printf("A: "); - break; - case END_A: - printf("END_A: "); - break; - case UL: - printf("UL: "); - break; - case LI: - printf("LI: "); - break; - case H1: - printf("H1: "); - break; - case H2: - printf("H2: "); - break; - case H3: - printf("H3: "); - break; - case H4: - printf("H4: "); - break; - case H5: - printf("H5: "); - break; - case H6: - printf("H6: "); - break; - default: - printf("ERROR: UNKNOWN TOKEN: "); - break; - } - - if (token->value == NULL){ - puts("'NO VALUE FOUND'"); - return; - } - - printf("'%s'\n", token->value); -} diff --git a/main.c b/main.c index db08e5a..234e931 100644 --- a/main.c +++ b/main.c @@ -12,7 +12,7 @@ int main(int argc, char* argv[]){ token = nexttoken(); printtoken(token); //evaluate(token); - } while (token != NULL && token->type != END_HTML); + } while (token != NULL && token->type != END_BODY); return 0; }