from lexer import Lexer from parser import Parser from generator import generate sources = [ "op1 ← FloatValue64(DR2n);", "UTLB[MMUCR.URC].ASID ← PTEH.ASID;", "IF (n_field = m_field)" "{" "m_address ← m_address + 4;" "n_address ← n_address + 4;" "}", """ IF (op1 ≥ 0) op2 ← op2 << shift_amount; ELSE IF (shift_amount ≠ 0) op2 ← op2 >> (32 - shift_amount); """ ] def all_tokens(lexer): while True: try: token = lexer.next_token() except IndexError: break yield token for source in sources: lexer = Lexer(source) tokens = list(all_tokens(lexer)) parser = Parser(tokens) from pprint import pprint root = parser.statement() s = "".join(generate(root)) print(s, end='') print()