/** * A transformation from integer literals to the (unsigned) integer * arithmetic language. * * @author Jacob Andersen */ (| ("intLiterals.l" + {Exp.intconst : IntConst ; }) -> "unsignedArith.l" [Exp -> Exp, IntConst -> Exp, Digit -> Exp] Digit.zero = '#0' ; Digit.one = '++ #0' ; Digit.two = '++ ++ #0' ; Digit.three = '++ ++ ++ #0' ; Digit.four = '++ ++ ++ ++ #0' ; Digit.five = '++ ++ ++ ++ ++ #0' ; Digit.six = '++ ++ ++ ++ ++ ++ #0' ; Digit.seven = '++ ++ ++ ++ ++ ++ ++ #0' ; Digit.eight = '++ ++ ++ ++ ++ ++ ++ ++ #0' ; Digit.nine = '++ ++ ++ ++ ++ ++ ++ ++ ++ #0' ; IntConst.digit = $1 ; IntConst.more = '($1 * (++ ++ ++ ++ ++ ++ ++ ++ ++ ++ #0)) + $2' ; Exp.intconst = $1 ; |)