SELECT tb[node].name
FROM
apply => {
Exp[tb[node].son[1]]; ExpList[tb[node].son[2]];
IF tb[node].nSons > 2 THEN CatchPhrase[tb[node].son[3]]};
signalx, errorx, startx, fork, joinx,
dot, uparrow, uminus, not, addr, create, cast =>
Exp[tb[node].son[1]];
plus, minus, times, div, mod,
relE, relN, relL, relGE, relG, relLE, intOO, intOC, intCO, intCC,
or, and, assignx => {
Exp[tb[node].son[1]]; Exp[tb[node].son[2]]};
in, notin => {Exp[tb[node].son[1]]; Range[tb[node].son[2]]};
ifx => {Exp[tb[node].son[1]]; Exp[tb[node].son[2]]; Exp[tb[node].son[3]]};
casex => {
Exp[tb[node].son[1]]; SelectionList[tb[node].son[2], Exp]; Exp[tb[node].son[3]]};
bindx => {
Exp[tb[node].son[1]]; Exp[tb[node].son[2]];
SelectionList[tb[node].son[3], Exp];
Exp[tb[node].son[4]]};
extractx => {ExpList[tb[node].son[1]]; Exp[tb[node].son[2]]};
pred, succ, ord, lengthen, float, abs, min, max, base, length, all, val =>
ExpList[tb[node].son[1]];
arraydesc => {
SELECT ListLength[tb[node].son[1]]
FROM
1 => Exp[tb[node].son[1]];
3 => {
subNode: Tree.Index = GetNode[tb[node].son[1]];
Exp[tb[subNode].son[1]]; Exp[tb[subNode].son[2]];
OptTypeExp[tb[subNode].son[3]]};
ENDCASE => ERROR};
void, clit, llit, atom, mwconst, syserrorx => NULL;
loophole => {Exp[tb[node].son[1]]; OptTypeExp[tb[node].son[2]]};
narrow, istype => {
Exp[tb[node].son[1]]; OptTypeExp[tb[node].son[2]];
IF tb[node].nSons > 2 THEN CatchPhrase[tb[node].son[3]]};
new => {
Exp[tb[node].son[1]];
TypeExp[tb[node].son[2]];
tb[node].son[3] ← InitialValue[tb[node].son[3], ISENull];
IF tb[node].nSons > 3 THEN CatchPhrase[tb[node].son[4]]};
cons, listcons => {
Exp[tb[node].son[1]]; ExpList[tb[node].son[2]];
IF tb[node].nSons > 2 THEN CatchPhrase[tb[node].son[3]]};
first, last, typecode => TypeExp[tb[node].son[1]];
size => {TypeExp[tb[node].son[1]]; Exp[tb[node].son[2]]};
nil => OptTypeExp[tb[node].son[1]];
item => Exp[tb[node].son[2]];
ENDCASE => Log.Error[unimplemented]};