diff options
Diffstat (limited to 'projects/hackc')
-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) |