diff options
author | Frederick Yin <fkfd@fkfd.me> | 2022-08-29 20:40:35 +0800 |
---|---|---|
committer | Frederick Yin <fkfd@fkfd.me> | 2022-08-29 20:40:35 +0800 |
commit | 7f54baf2668a58f2908f8242b2fbafc65a7f684a (patch) | |
tree | 1b5123dba6112c5bcb3cb9967339ca3c5edf9a5a | |
parent | 51e1667e716ea8c6b20f37cdec1f99eef55eccd6 (diff) |
hackc: exit on invalid token
-rw-r--r-- | projects/hackc/parser.py | 7 | ||||
-rw-r--r-- | projects/hackc/utils.py | 9 |
2 files changed, 16 insertions, 0 deletions
diff --git a/projects/hackc/parser.py b/projects/hackc/parser.py index c3056d7..400b096 100644 --- a/projects/hackc/parser.py +++ b/projects/hackc/parser.py @@ -1,4 +1,5 @@ from .tokens import Token +from .utils import * KEYWORDS = [ "class", @@ -83,3 +84,9 @@ class Parser: if token is not None: self.tokens.append(token) pos += token.length() + else: + # invalid token + print_err(f"{self._fp}:{line_no + 1}") + print_err(line) + print_err(" " * pos + f"^ Invalid token") + exit(EXIT_CODE_INVALID_TOKEN) diff --git a/projects/hackc/utils.py b/projects/hackc/utils.py new file mode 100644 index 0000000..d1ea3ca --- /dev/null +++ b/projects/hackc/utils.py @@ -0,0 +1,9 @@ +from sys import stderr + +EXIT_CODE_FILE_ERROR = 1 +EXIT_CODE_INVALID_TOKEN = 2 +EXIT_CODE_SYNTAX_ERROR = 4 + + +def print_err(msg): + print(msg, file=stderr) |