4-2-4
Fact { 0 = 1; sN = <Int N':='('"'sN)';' N'*'Fact(N'-'1) >; } Int { eX = <Eval () eX>; } Eval { (eT) sV ':='tX';'eY = <Eval (eT (sV <Eval (eT) tX>)) eY>; tE sN = <Subst tE sN>; tE ('"'eX) = eX; tE (eX) = <Eval tE eX>; tE eX '+' eY = <ADD (<Eval tE eX>) <Eval tE eY>>; tE eX '-' eY '-' eZ = <Eval tE (eX '-' eY) '-' eZ>; tE eX '-' eY = <SUB (<Eval tE eX>) <Eval tE eY>>; tE eX '*' eY = <MUL (<Eval tE eX>) <Eval tE eY>>; tE sF (eX) = <Apply sF <Eval tE eX>>; } Subst { () sN = sN; (eT (sV eX)) sV = eX; (eT (sV eX)) sN = <Subst (eT) sN>; } Apply { Fact eN = <Fact eN>; } |