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])