PROCEDURE Visit(at: Expressions.Attribute);
BEGIN
Write.Char(" ");
CASE at.sy OF
| Expressions.plusSY: Write.Char("+");
| Expressions.minusSY: IF at.leftop = NIL THEN
Write.String("UM");
ELSE
Write.Char("-");
END;
| Expressions.multiplySY: Write.Char("*");
| Expressions.divideSY: Write.Char("/");
| Expressions.constantSY: Write.Int(at.const, 1);
END;
END Visit;
PROCEDURE TraversePreorder(at: Expressions.Attribute);
BEGIN
IF at # NIL THEN
Visit(at);
TraversePreorder(at.leftop);
TraversePreorder(at.rightop);
END;
END TraversePreorder;
|