def main() -> None: """Main interpreter routine.""" expression = cli.init() tokens = get(expression) lexer = Lexer() lexer.lex = next(tokens) # Store the first token without passing generator into __init__ valid = lexer.B(tokens) if valid: print("Result:", lexer.stack.pop()) else: print("Invalid expression.")
def test_results(self) -> None: """For every key in cases, assert that the result of the expression `key` is equal to cases[key][0] and the Lexer instance returns cases[key][1]. Notes ----- If the entire expression is valid, but it does not end with a period an ExpressionError is raised. Else, the interpreter will fail fast. """ for case, result in zip(self.cases.keys(), self.cases.values()): token = get(case) lexer = Lexer() lexer.lex = next(token) try: valid = lexer.B(token) except ExpressionError as e: pass if valid: self.assertEqual(lexer.stack.pop(), result[0]) self.assertEqual(valid, result[1])