From 482eed0ae339e977a618c4ab60525596426cf967 Mon Sep 17 00:00:00 2001 From: Frederick Yin Date: Wed, 31 Aug 2022 16:59:55 +0800 Subject: hackc: idk, statements and expressions? --- projects/hackc/classes.py | 4 ++++ projects/hackc/expressions.py | 12 +++++++++++- projects/hackc/statements.py | 3 +++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/projects/hackc/classes.py b/projects/hackc/classes.py index 8dc1dd5..a8d446a 100644 --- a/projects/hackc/classes.py +++ b/projects/hackc/classes.py @@ -311,3 +311,7 @@ class Subroutine: def print_verbose(self): print(f"Define {self.category} {self.type} {self.name}") self.params.print_verbose() + for variable in self.variables: + variable.print_verbose() + for statement in self.statements: + statement.print_verbose() diff --git a/projects/hackc/expressions.py b/projects/hackc/expressions.py index de58528..3bc83d2 100644 --- a/projects/hackc/expressions.py +++ b/projects/hackc/expressions.py @@ -1,4 +1,5 @@ from .tokens import Token +from .utils import * OPS = "+-*/&|<>=" UNARY_OPS = "-~" @@ -15,7 +16,7 @@ class Term: return (None, 0) if tokens[0].type in ["integer", "string"] or tokens[0] in CONSTANTS: return (ConstantTerm(tokens[0]), 1) - if tokens[0] in UNARY_OPS: + if tokens[0].token in UNARY_OPS: term, dt = Term.from_tokens(tokens[1:]) return (UnaryTerm(tokens[0], term), dt + 1) @@ -24,6 +25,9 @@ class ConstantTerm: def __init__(self, term: Token): self.term = term + def __str__(self): + return self.term.token + class VarTerm: def __init__(self, var: Token, subscript=None): @@ -74,3 +78,9 @@ class Expression: t += dt return (Expression(lhs, op, rhs), t) + + def __str__(self): + if self.op is not None: + return f"({self.lhs}) {self.op} ({self.rhs})" + else: + return str(self.lhs) diff --git a/projects/hackc/statements.py b/projects/hackc/statements.py index e8bc0b3..16c123e 100644 --- a/projects/hackc/statements.py +++ b/projects/hackc/statements.py @@ -1,4 +1,5 @@ from .expressions import Expression +from .utils import * class Statement: def __init__(self): @@ -47,3 +48,5 @@ class LetStatement: t += 1 return (LetStatement(name, expr), t) + def print_verbose(self): + print(f"Let {self.name} be {self.expr}") -- cgit v1.2.3