Transformation of Applicative Specifications into Imperative ...

Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...

26.09.2013 Views

APPENDIX D. SPECIFICATION OF TRANSFORMER IN RSL1 ∗/ mk_BOOL_ENV_TYPES(false, env, types) else /∗The value expression is not of the type of interest. ∗/ mk_BOOL_ENV_TYPES(true, env, types) end end end, WildcardPattern → mk_BOOL_ENV_TYPES(true, env, types), ProductPattern(pl) → CheckPatternList(pl, func, trans, env, types), RecordPattern(vn, pl) → if isinId(id(vn), domainFUNC(func)) then mk_BOOL_ENV_TYPES(false, env, types) else CheckPatternList(pl, func, trans, env, types) end, MakeListPattern(lp) → CheckListPattern(lp, func, trans, env, types) end, CheckPatternList : Pattern ∗ × FUNC × TRANS × ENV × TYPES → BOOL_ENV_TYPES CheckPatternList(pl, func, trans, env, types) ≡ if pl = 〈〉 then mk_BOOL_ENV_TYPES(true, env, types) else if bool( CheckPattern(hd pl, func, trans, env, types)) then CheckPatternList( tl pl, func, trans, envMap( CheckPattern( hd pl, func, trans, env, types)), typesMap( CheckPattern( hd pl, func, trans, env, types))) else mk_BOOL_ENV_TYPES( 354

D.2. FORMAL SPECIFICATION OF THE TRANSFORMER IN RSL1 end end, false, envMap( CheckPattern( hd pl, func, trans, env, types)), types) CheckListPattern : ListPattern × FUNC × TRANS × ENV × TYPES → BOOL_ENV_TYPES CheckListPattern(lp, func, trans, env, types) ≡ case lp of Make_EnumeratedListPattern(elp) → CheckOptInnerPattern( inner_pattern(elp), func, trans, env, types), ConcatenatedListPattern(elp, p) → mk_BOOL_ENV_TYPES( and( bool( CheckOptInnerPattern( inner_pattern(elp), func, trans, env, types)), bool( CheckPattern( p, func, trans, envMap( CheckOptInnerPattern( inner_pattern(elp), func, trans, env, types)), typesMap( CheckOptInnerPattern( inner_pattern(elp), func, trans, env, types))))), envMap( CheckPattern( p, func, trans, envMap( CheckOptInnerPattern( inner_pattern(elp), func, trans, env, types)), typesMap( CheckOptInnerPattern( inner_pattern(elp), func, trans, env, types)))), 355

D.2. FORMAL SPECIFICATION OF THE TRANSFORMER IN RSL1<br />

end<br />

end,<br />

false,<br />

envMap(<br />

CheckPattern(<br />

hd pl, func, trans, env, types)), types)<br />

CheckListPattern :<br />

ListPattern × FUNC × TRANS × ENV × TYPES →<br />

BOOL_ENV_TYPES<br />

CheckListPattern(lp, func, trans, env, types) ≡<br />

case lp <strong>of</strong><br />

Make_EnumeratedListPattern(elp) →<br />

CheckOptInnerPattern(<br />

inner_pattern(elp), func, trans, env, types),<br />

ConcatenatedListPattern(elp, p) →<br />

mk_BOOL_ENV_TYPES(<br />

and(<br />

bool(<br />

CheckOptInnerPattern(<br />

inner_pattern(elp), func, trans,<br />

env, types)),<br />

bool(<br />

CheckPattern(<br />

p, func, trans,<br />

envMap(<br />

CheckOptInnerPattern(<br />

inner_pattern(elp), func,<br />

trans, env, types)),<br />

typesMap(<br />

CheckOptInnerPattern(<br />

inner_pattern(elp), func,<br />

trans, env, types))))),<br />

envMap(<br />

CheckPattern(<br />

p, func, trans,<br />

envMap(<br />

CheckOptInnerPattern(<br />

inner_pattern(elp), func, trans,<br />

env, types)),<br />

typesMap(<br />

CheckOptInnerPattern(<br />

inner_pattern(elp), func, trans,<br />

env, types)))),<br />

355

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!