from pprint import pprint from lexer import Lexer from parser import Parser from ast_to_c_source 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 def dump(source): lexer = Lexer(source) tokens = list(all_tokens(lexer)) parser = Parser(tokens) root = parser.statement() pprint(root) source = "c ← foobar(b, c, d);" dump(source);