#-d
%^TEX
\documentstyle[glammar]{article}
\topmargin      0 mm
\headheight     0 mm
\headsep        0 mm
\textheight     240 mm
\footskip       7 mm
\footheight     11 mm

\oddsidemargin  0 mm
\evensidemargin 0 mm
\textwidth      159.2 mm
\title{Kernal data structure \\
to \\
Computer Glass \\
Unparser}
\author{Eric Voss}
\makeindex
\begin{document}
\maketitle

%


glass (ID+N+glass text elements+N>):
       layout,
       scan def list (glass ds >),
       unparse def list (>";\n\n",>empty,>glass ds, glass text elements>).

%TEX
The scanning and meta rules are not of interest since they are generated from
the file {\tt nkernglass.ds} 
The unparse rules are derived from the walk routines.
% 

unparse def(>i,> DefAtom * atorig * atnm * atptyp * atctyp,#
                N+N+i+show at orig+ 
                N+i+"Atom\t"+show atnm+"\t :- "+ show atptyp+show atctyp>): 
        unparse orig (>empty, >atorig, show atorig>),
        unparse symbol (>empty ,>atnm,show atnm>),
        unparse partyp list (>empty,>atptyp,show atptyp>),
        unparse typ (>empty,>atctyp,show atctyp>), ->;
unparse def(>i,> DefBasetype * baseorig * basename,
                i+"Basetype "+ show basename+ I+ show base orig>): 
        unparse orig (>empty, > base orig, show base orig>),
        unparse symbol (>empty,>basename,show basename>), ->;
unparse def(>i,> DefVal * valorig * valnm * valtyp * valas,#
                N+N+i+ show val orig+   
                N+i+"Def\t"+show valnm+" :- "+show valtyp+";"+#
                N+i+ "   \t"+show valnm+ " "+ show p+" = "+ show v>): 
        unparse orig (>empty, >val orig, show val orig>),
        unparse symbol (>empty ,>valnm,show valnm>),
        unparse typ (>empty,>valtyp,show valtyp>),
        where (>valas , apply V sigma * p*v>),
        unparse formcon (>empty,>p,show p>),
        unparse val (>False,>i+I,>v,show v>), ->;
unparse def(>i,> DefVal * valorig * valnm * valtyp * valas,#
                N+N+i+ show val orig+   
                N+i+"Def\t"+show valnm+" :- "+show valtyp+";"+#
                N+i+ "   \t"+show valnm+ " = "+ show v>): 
        unparse orig (>empty, >val orig, show val orig>),
        unparse symbol (>empty ,>valnm,show valnm>),
        unparse typ (>empty,>valtyp,show valtyp>),
        unparse val (>False,>i+I,>valas,show v>), ->;
unparse def(>i,> DefCon * conorig * defcon * conas,
                N+i+show defcon+" = "+show conas>): 
        unparse val (>False,>empty,>defcon,show defcon>),
        unparse val (>False,>i+I,>conas,show conas>), ->;
unparse def(>i,> DefTyp * typorig * typnm * typas,
                N+i+"Type\t"+show typnm+ "\t =  "+show typas >): 
        unparse symbol (>empty,>typnm,show typnm>),
        unparse typ (>empty ,>typas,show typas>), ->;
unparse def(>i,> DefErr * STRING *msg , N+msg>):. 


unparse partyp (>i,> PTInt, " INT -> ">):  ->;
unparse partyp (>i,> PTFlo, " FLOAT -> ">):  ->;
unparse partyp (>i,> PTStr, " STRING -> ">):  ->;
unparse partyp (>i,> PTBool, " BOOL -> ">):  ->;
unparse partyp (>i,> PTErr * STRING *msg , N+msg+N+i+I>):. 


unparse typ(>i,> TypBase * basenm, show basenm>): 
        unparse symbol (>empty,>basenm,show basenm>), ->;
unparse typ(>i,> TypIn * ityp, i+"?"+show ityp>): 
        unparse typ (>empty,>ityp,show ityp>), ->;
unparse typ(>i,> TypOut * otyp, i+"!"+show otyp>): 
        unparse typ (>empty,>otyp,show otyp>), ->;
unparse typ(>i,> TypUni * uityp * uotyp, i+show uityp+ " => "+show uotyp>): 
        unparse typ (>empty,>uityp,show uityp>),
        unparse typ (>empty,>uotyp,show uotyp>), ->;
unparse typ(>i,> TypNon * nontyp,
                i+"["+show nontyp+"]">): 
        unparse typ (>empty,>nontyp,show nontyp>), ->;
unparse typ(>i,> TypProd * LIST *empty, " <> ">): ->; 
unparse typ(>i,> TypProd * LIST *one tupple*empty, 
               "\n*** Malformed type\n"+i>):  ->;
unparse typ(>i,> TypProd * ptypes,
                i+"("+show ptypes+")">): 
        unparse typ list (>empty,>ptypes,show ptypes>), ->;
unparse typ(>i,> TypSym * sym,
                i+show sym>): 
        unparse symbol (>empty,>sym,show sym>), ->;
unparse typ (>i,> TypErr * STRING *msg , N+msg+N+i+I>):. 


unparse formcon(>i,> FCList * l, "["+show l+"]">): 
        unparse formcon list (>empty,>l,show l>), ->;
unparse formcon(>i,> FCSym * sym, show sym>): 
        unparse symbol (>empty,>sym,show sym>), ->;
unparse formcon(>i,> FCComp * l*r, show l+":"+show r>): 
        unparse formcon  (>empty,>l,show l>),
        unparse formcon  (>empty,>r,show r>), ->;
unparse formcon (>i,> FCErr * STRING *msg , N+msg+N+i+I>): .
