User guide

13.5. LAMBDA EVALUATOR 217
// *************** Syntax analyser ***********************
// Construct Corresponding Tree
// a ,.., z --> [Id, ’a’] ,.., [Id, ’z’]
// dddd --> [Num, dddd]
// x y --> [Ap, x, y]
// Y x --> [Y, x]
// x * y --> [Times, x, y]
// x / y --> [Div, x, y]
// x + y --> [Plus, x, y]
// x - y --> [Minus, x, y]
// x = y --> [Eq, x, y]
// b -> x, y --> [Cond, b, x, y]
// Li y --> [Lam, i, y]
LET mk1(x) = VALOF { space := space-1; !space := x; RESULTIS space }
AND mk2(x,y) = VALOF { mk1(y); RESULTIS mk1(x) }
AND mk3(x,y,z) = VALOF { mk2(y,z); RESULTIS mk1(x) }
AND mk4(x,y,z,t) = VALOF { mk3(y,z,t); RESULTIS mk1(x) }
AND rch() BE
{ ch := Eof
IF strp>=strt RETURN
strp := strp+1
ch := str%strp
}
AND parse(s) = VALOF
{ str, strp, strt := s, 0, s%0
rch()
RESULTIS nexp(0)
}