tree = ^ node;

SyntaxClass = ( ident, intcon, boolcon, charcon, emptycon, nilcon, newchan,
                lambdaexp, application, unexp, binexp, ifexp, block,
                declist, decln
              );

node = record case tag :SyntaxClass of
          ident       :( id :alfa );
          intcon      :( n:integer );
          boolcon     :( b:boolean );
          charcon     :( ch:char );
          emptycon, nilcon, newchan:();
          
          lambdaexp   :( fparam, body :tree );
          application :( fun, aparam :tree );
          unexp       :( unopr :symbol; unarg :tree );
          binexp      :( binopr:symbol; left, right :tree );
          ifexp       :( e1, e2, e3 :tree );
          block       :( decs, exp :tree );
          declist     :( recursive:boolean; hd, tl :tree );
          decln       :( name: alfa; val:tree )
end;

{\fB Syntactic Types. \fP}
