aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaghuram Subramani <raghus2247@gmail.com>2025-06-12 17:31:01 +0530
committerRaghuram Subramani <raghus2247@gmail.com>2025-06-12 17:31:01 +0530
commitb5ce444caac703dcfab761b62edf77a3e8fbd418 (patch)
tree91405855822743f9a2838d78799691224ec7409a
parent91841cc629e1815543229c1de5f52105b96f92a0 (diff)
lexer: add error
-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;
}