40 lines
830 B
Python
40 lines
830 B
Python
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()
|