示例#1
0
def whileLoop(condition, code):
    labels, jumps = addJumpPoints(1)
    return "" + labels[0] + \
           condition[0] + \
           code + \
           "JUMP " + jumps[0] + "\n" + \
           condition[1] + ""
示例#2
0
def greater(value1, value2, lineno):
    to, jump = addJumpPoints(1)
    return loadVar(value2, "b", lineno) + \
           loadVar(value1, "c", lineno) + \
           "RESET d\n" + \
           "ADD d c\n" + \
           "SUB d b\n" + \
           "JZERO d " + jump[0] + "\n" + \
           "", to[0]
示例#3
0
def greaterOrEqual(value1, value2, lineno):
    to, jump = addJumpPoints(2)
    return loadVar(value1, "b", lineno) + \
           loadVar(value2, "c", lineno) + \
           "RESET d\n" + \
           "ADD d c\n" + \
           "SUB d b\n" + \
           "JZERO d " + jump[0] + "\n" + \
           "JUMP " + jump[1] + "\n" + \
           to[0], to[1]
示例#4
0
def p_command_if_else(p):
    '''command : IF condition THEN commands ELSE commands ENDIF'''
    condition, ifCommand, elseCommand, lineno = p[2], p[4], p[6], p.lineno(1)
    labels, jumps = addJumpPoints(1)
    p[0] = condition[0] + \
           ifCommand + \
           "JUMP " + jumps[0] + "\n" + \
           condition[1] + \
           elseCommand + \
           "" + labels[0]
示例#5
0
def forDecLoop(iterator, begin, end, code, lineno):
    to, jump = addJumpPoints(3)
    temp = compiler.addVariableTempo()
    valTemp = ("id", temp)
    it = ("id", iterator)
    return loadVar(end, "e", lineno) + \
           varAddress(valTemp, lineno) + \
           "STORE e a\n" + \
           loadVar(begin, "f", lineno) + \
           varAddress(it, lineno) + \
           "STORE f a\n" + to[2] +\
           loadVar(valTemp, "e", lineno) + \
           loadVar(it, "f", lineno) + \
           "SUB e f\n" + \
           "JZERO e " + jump[0] + "\n" + \
           "JUMP " + jump[1] + "\n" + \
           to[0] + code + \
           loadVar(it, "f", lineno) + \
           varAddress(it, lineno) + \
           "JZERO f " + jump[1] + "\n" + \
           "DEC f\n" + \
           "STORE f a\n" + \
           "JUMP " + jump[2] + "\n" + to[1]
示例#6
0
def p_condition_repeat_greatereq(p):
    '''command : REPEAT commands UNTIL value GREATEREQ value SEMICOLON'''
    code, value1, value2, lineno = p[2], p[4], p[6], str(p.lineno(1))
    condition = less(value1, value2, lineno)
    labels, jumps = addJumpPoints(1)
    p[0] = "" + labels[0] + code + condition[0] + "JUMP " + jumps[0] + "\n" + condition[1]
示例#7
0
def p_condition_repeat_nequal(p):
    '''command : REPEAT commands UNTIL value NEQUALS value SEMICOLON'''
    code, value1, value2, lineno = p[2], p[4], p[6], str(p.lineno(1))
    condition = equal(value1, value2, lineno)
    labels, jumps = addJumpPoints(1)
    p[0] = "" + labels[0] + code + condition[0] + "JUMP " + jumps[0] + "\n" + condition[1]