diff options
author | Raghuram Subramani <raghus2247@gmail.com> | 2025-06-12 17:31:01 +0530 |
---|---|---|
committer | Raghuram Subramani <raghus2247@gmail.com> | 2025-06-12 17:31:01 +0530 |
commit | b5ce444caac703dcfab761b62edf77a3e8fbd418 (patch) | |
tree | 91405855822743f9a2838d78799691224ec7409a | |
parent | 91841cc629e1815543229c1de5f52105b96f92a0 (diff) |
lexer: add error
-rw-r--r-- | include/lexer.h | 1 | ||||
-rw-r--r-- | src/lexer.cc | 6 | ||||
-rw-r--r-- | src/main.cc | 8 |
3 files changed, 14 insertions, 1 deletions
diff --git a/include/lexer.h b/include/lexer.h index c8cd1a3..6d182c3 100644 --- a/include/lexer.h +++ b/include/lexer.h @@ -15,6 +15,7 @@ private: size_t m_current; size_t m_end; size_t m_line; + bool m_errored; private: bool at_end(void); diff --git a/src/lexer.cc b/src/lexer.cc index a11adb3..d0840f2 100644 --- a/src/lexer.cc +++ b/src/lexer.cc @@ -18,6 +18,8 @@ Lexer::init(char *script) m_current = 0; m_end = strlen(m_script); m_line = 1; + + m_errored = false; } List * @@ -28,6 +30,9 @@ Lexer::scan(void) scan_token(); } + if (m_errored) + return NULL; + Token token_eof; token_eof.init(EOFF, "EOF", m_line); m_tokens->add(&token_eof); @@ -137,6 +142,7 @@ Lexer::scan_token(void) default: printf("[-] Error: Unexpected character %c in line %lu\n", c, m_line); + m_errored = true; break; } } diff --git a/src/main.cc b/src/main.cc index 61d853b..c6dcb81 100644 --- a/src/main.cc +++ b/src/main.cc @@ -31,7 +31,14 @@ main(int argc, char **argv) Lexer l; l.init(buffer); + f.close(); + List *tokens = l.scan(); + if (tokens == NULL) { + l.clean(); + return 1; + } + for (size_t i = 0; i < tokens->size(); i++) { Token *t = (Token *) tokens->get(i); printf("%s\n", t->to_string()); @@ -39,6 +46,5 @@ main(int argc, char **argv) l.clean(); - f.close(); return 0; } |