load misc; form Val === IDT +++ HEX +++ OCT +++ DEN +++ FLT +++ CHX +++ STX ; form Cpp === INK +++ DEF +++ UND +++ IFD +++ IFN +++ IFX +++ ELS +++ ENF +++ LNE ; form Blk === BAL +++ BRK +++ BRC ; form Clex === CPP (Cpp # list(Clex)) +++ KYW(str) +++ WHT(str) +++ BLK (Blk # list(Clex)) +++ PUN(str) +++ CMT(str) +++ VAL (Val # list(char)) +++ STM ( list(Clex)) ; tuple clx === list ( Clex ) ; dcl Tcpp : Cpp --> str ; say Tcpp ( INK ) <== "include" ; say Tcpp ( DEF ) <== "define" ; say Tcpp ( UND ) <== "undef" ; say Tcpp ( IFD ) <== "ifdef" ; say Tcpp ( IFN ) <== "ifndef" ; say Tcpp ( IFX ) <== "if" ; say Tcpp ( ELS ) <== "else" ; say Tcpp ( ENF ) <== "endif" ; say Tcpp ( LNE ) <== "line" ; dcl Blok : Blk --> ( str --> str ) ; say Blok ( BAL ) <== paras ; say Blok ( BRK ) <== brcks ; say Blok ( BRC ) <== brces ; dcl Csrc : clx --> str ; say Csrc ( CPP(a,b) :: c ) <== "#" <> Tcpp(a) <> Csrc(b) <> Csrc(c) ; say Csrc ( BLK(d,c) :: b ) <== Blok(d) (Csrc(c)) <> Csrc(b) ; say Csrc ( VAL(a,c) :: b ) <== c <> Csrc(b) ; say Csrc ( WHT(c) :: b ) <== c <> Csrc(b) ; say Csrc ( CMT(c) :: b ) <== c <> Csrc(b) ; say Csrc ( KYW(c) :: b ) <== c <> Csrc(b) ; say Csrc ( PUN(c) :: b ) <== c <> Csrc(b) ; say Csrc ( nil ) <== [] ;