diff options
-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; } |