Jedem Teilausdruck wird vor der Auswertung sein Typ zugeordnet. Das ist auch ein synthetisches Attribut!
enum Type { Number, Bool } class Typecheck extends DepthFirstAdapter { public void outANumberExp(ANumberExp node) { setOut (node, Type.Number); } public void outAApplyExp(AApplyExp node) { String name = node.getIdentifier().getText(); Function fun = defined.get(name); // vergleiche Argumenttypen setOut(node, fun.getResult()); } }