infix 6 +++ --- infix 7 *** /// infix 4 === <<= >>= <<< >>> !!= infix 5 -- ; infix 3 >> ; infix 0 || ; infix 9 :- -: ; functor ParseCodeFUN ( structure Code : CodeSig and Parse : PARSE ) = struct open Code Parse fun getInt s = (## || $"~" -- ## >> (~ o #2)) s val value = id >> Id || getInt >> Lit val expn = value -: $"+" -- value >> op +++ || value -: $"*" -- value >> op *** || value -: $"-" -- value >> op --- || value -: $"/" -- value >> op /// || value >> V val cond = value -: $"<" -- value >> op <<< || value -: $"<=" -- value >> op <<= || value -: $">" -- value >> op >>> || value -: $">=" -- value >> op >>= || value -: $"==" -- value >> op === || value -: $"!=" -- value >> op !!= || $"t" >> (fn _ => TRUE) || $"f" >> (fn _ => FALSE) val statement = id -: $":=" -- expn >> op := || $"if" :- $"(" :- cond -: $")" -: $"goto" -- ## >> GOTO fun code toks = (repeat statement >> Code) toks end;