aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/lexer.h1
-rw-r--r--src/lexer.cc6
-rw-r--r--src/main.cc8
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;
}