1signature TREE = 2sig 3 type size 4 5datatype stm = SEQ of stm * stm 6 | LABEL of Temp.label 7 | JUMP of Temp.label 8 | CJUMP of exp * Temp.label 9 | MOVE of exp * exp 10 | EXP of exp 11 12 and exp = BINOP of binop * exp * exp 13 | RELOP of relop * exp * exp 14 | MEM of exp 15 | TEMP of Temp.temp 16 | ESEQ of stm * exp 17 | NAME of Temp.label 18 | NCONST of Arbint.int 19 | WCONST of Arbint.int 20 | CALL of exp * exp 21 | PAIR of exp * exp 22 23 and binop = PLUS | MINUS | MUL | DIV 24 | AND | OR | LSHIFT | RSHIFT | ARSHIFT | XOR | ROR 25 26 and relop = EQ | NE | LT | GT | LE | GE | CC | LS | HI | CS 27 28 val pair2list : exp -> exp list 29 (* 30 val notRel : relop -> relop 31 val commute: relop -> relop 32 *) 33 34end 35 36structure Tree : TREE = 37struct 38 type size = int 39 40datatype stm = SEQ of stm * stm 41 | LABEL of Temp.label 42 | JUMP of Temp.label 43 | CJUMP of exp * Temp.label 44 | MOVE of exp * exp 45 | EXP of exp 46 47 and exp = BINOP of binop * exp * exp 48 | RELOP of relop * exp * exp 49 | MEM of exp 50 | TEMP of Temp.temp 51 | ESEQ of stm * exp 52 | NAME of Temp.label 53 | NCONST of Arbint.int 54 | WCONST of Arbint.int 55 | CALL of exp * exp 56 | PAIR of exp * exp 57 58 and binop = PLUS | MINUS | MUL | DIV 59 | AND | OR | LSHIFT | RSHIFT | ARSHIFT | XOR | ROR 60 61 and relop = EQ | NE | LT | GT | LE | GE 62 | CC | LS | HI | CS 63 64 fun pair2list (PAIR(v1, v2)) = 65 (pair2list v1) @ (pair2list v2) 66 | pair2list v = [v] 67 68end 69