> module Unparse(unparse_tm , unparse_th , unparse , unparse' , disp_tk , unparse_sg , unparse_sg' , unparse_nm , unparse_trm , unparse_Trm , unparse_sgn , unparse_Sgn , unparse_Dec , unparse_dec , unparse_Thm ) where
temorary unparser - Flagged_Itrms to strings
> import Kernel
> import Type_defs
> import Core_datatype
> import Attributes
unparse functions ro allow editor to type check
> unparse_trm ( SG isg ) _ = unparse' isg
> unparse_Trm _ _ ( TM itm _ isg ) = unparse' isg itm
> unparse_sgn _ _ isg = unparse_sg' isg
> unparse_Sgn _ _ ( SG isg ) = unparse_sg' isg
> unparse_dec ( SG isg ) _ idc = unparse_dc isg idc
> unparse_Dec _ _ ( DC idc isg ) = unparse_dc isg idc
> unparse_Thm _ _ ( TH itm isg ) = unparse' isg itm
> unparse_th ( TH tm sg )
> = "Theorem: " ++ unparse' sg tm ++ "\n"
> unparse_th ( TH_Err mesg )
> = "Invalid theorem: " ++ mesg ++ "\n"
> unparse_tm ( TM tm1 tm2 sg )
> = "Term: " ++ unparse' sg tm1 ++ "\nType: " ++ unparse' sg tm2 ++ "\nSig: " ++ unparse_sg' sg ++ "\n"
> unparse_tm ( TM_Err mesg ) = "\nTerm formation error\n" ++ mesg ++ "\n"
> unparse sg ( Opnd ( Itrm tm ))
> = unparse' sg tm
> unparse sg ( Opnd ( Idec dc ))
> = unparse_dc sg dc
> unparse _ ( Prs_Err mess ) = mess ++ "\n"
other (debugging) unparses
> unparse sg ( Opr ( OpItrm tm ) tpe prc )
> = unparse' sg tm ++ "{tpe" ++ show_tpe tpe ++ "prc" ++ show prc ++ "}\n"
> unparse _ ( Opr (Spl "") _ _ ) = "unparse operator"
> unparse sg ( Opnd ( TypApp tm )) = "Unparse TypApp: " ++ unparse sg tm
> unparse sg ( Opr ( Spl "typed" ) _ _ ) = "Unparse 'typed'"
> unparse sg oth = "unparse unknown"
> unparse' sg ( Sym n1 n2 _ att )
> = case attval Symbol_Style att of
> Named -> lookUp sg n1 n2 (-1)
> Indexed -> "\168" ++ show n1 ++ "," ++ show n2 ++ "\169"
> unparse' sg ( Const i j k _ _ )
> = lookUp sg i j k
> unparse' sg ( App tm1 tm2 _ _ )
> = "(" ++ unparse' sg tm1 ++ " " ++ unparse' sg tm2 ++ ")"
> unparse' sg ( Pair tm1 tm2 tm3 _ _ )
> = "((" ++ unparse' sg tm1 ++ " , " ++ unparse' sg tm2 ++ ") : " ++ unparse' sg tm3 ++ ")"
> unparse' sg ( Binder Subtype dc tm _ _ )
> = "{" ++ unparse_dc sg dc ++ " | " ++ unparse' sg2 tm ++ "}"
> where
> sg2 = Extend dc sg []
N.B. Implies needs extended sg
> unparse' sg ( Binder Imp dc tm _ _ )
> = " [" ++ unparse_dc sg dc ++ "] " ++ "\182" ++ " " ++ unparse' sg2 tm
> where
> sg2 = Extend dc sg []
> unparse' sg ( Binder con dc tm _ _ )
> = "(" ++ unparse_bdr con ++ unparse_dc sg dc ++ ". " ++ unparse' sg2 tm ++ ")"
> where
> sg2 = Extend dc sg []
> unparse' sg ( Constant con _ _ )
> = unparse_constant con
> unparse' sg ( Unary con tm _ _ )
> = " \181" ++ unparse' sg tm
> unparse' sg ( Binary' con tm1 tm2 _ _ )
> = "(" ++ unparse' sg tm1 ++ " " ++ unparse_bcon con
> ++ " " ++ unparse' sg tm2 ++ ")"
> unparse' sg ( Cond dc tm1 tm2 _ _ )
> = " if [" ++ unparse_dc sg dc ++ "] then " ++ unparse' sg2 tm1 ++
> " else " ++ unparse' sg2 tm2
> where
> sg2 = Extend dc sg []
> unparse' sg ( Recurse tml srt _ _ )
> = "\nrecurse\n\t" ++ concat ( map unparse_cls tml ) ++
> "\nend typed " ++ unparse' sg srt
> where
> unparse_cls tm = unparse' sg tm ++ "\n\t"
> unparse' sg ( Tagid ( nm , _ , _ ) argL )
> = "( " ++ nm ++ concat' " " ( map argl argL ) ++ " )"
> where
> concat' sep ( a:x ) = sep ++ a ++ concat' sep x
> concat' _ [] = ""
> argl ( Tg_Trm tm ) = unparse_tm tm
> argl ( Tg_Thm th ) = unparse_th th
> argl ( Tg_Int iL ) = "\168" ++ concat' "," ( map show iL ) ++ "\169"
> unparse' sg ( ITrm_Err mesg ) = mesg
> unparse_bdr Lambda = "\236"
> unparse_bdr Forall = "\177"
> unparse_bdr Exists = "\178"
> unparse_bdr Pi = "\208"
> unparse_bdr Sigma = "\211"
> unparse_bdr Choose = "\229"
> unparse_bdr Delta = "\196"
> unparse_dc sg ( Symbol_dec tm attL )
> = unparse_nm nm ++ " : " ++ unparse' sg tm
> where
> nm = case attval Name_Style attL of
> Symbol_Name nm' -> nm'
> Datatype_Name nmL -> Name " Unexpected Datatype "
> unparse_dc sg ( Axiom_dec tm attL )
> = unparse_nm nm ++ " :a: " ++ unparse' sg tm
> where
> nm = case attval Name_Style attL of
> Symbol_Name nm' -> nm'
> Datatype_Name nmL -> Name " Unexpected Datatype "
> unparse_dc sg ( Decpair dc1 dc2 _ )
> = " ( " ++ unparse_dc sg dc1 ++ " ; " ++ unparse_dc sg2 dc2 ++ " ) "
> where
> sg2 = Extend dc1 sg []
> unparse_dc sg ( Data dcl ctrs attL )
> = "datatype " ++ unparse_nm nm ++ " " ++ unparse_fmls sg dcl ++ " = " ++ unparse_ctrs sg2 nmL ctrs
> where
> sg2 = Extend tp_dcl ( extend_sg sg ( reverse dcl )) []
> tp_dcl = Symbol_dec u0 [ sym_nm nm ]
> u0 = Constant ( Univ 0 ) [] []
> extend_sg sg' ( dc : dcl ) = extend_sg ( Extend dc sg' []) dcl
> extend_sg sg' [] = sg'
> nm : nmL = case attval Name_Style attL of
> Symbol_Name nm' -> [ Name " Unexpected Symbol " ]
> Datatype_Name nmL' -> nmL'
> unparse_dc sg ( Def tm srt attL )
> = unparse_nm nm ++ " \189 " ++ unparse' sg tm
> where
> nm = case attval Name_Style attL of
> Symbol_Name nm' -> nm'
> Datatype_Name nmL -> Name " Unexpected Datatype "
> unparse_dc sg _
> = " dc not implemented "
> unparse_fmls sg ( dc : dcl )
> = "(" ++ unparse_dc sg dc ++ ") " ++ unparse_fmls sg dcl
> unparse_fmls _ [] = ""
> unparse_ctrs sg ( nm : nml ) ( ctr : ctrl )
> = unparse_nm nm ++ " " ++ unparse_ctr sg ctr ++ " | " ++ unparse_ctrs sg nml ctrl
> unparse_ctrs _ [] [] = ""
> unparse_ctr sg ( arg : argl )
> = unparse' sg arg ++ " " ++ unparse_ctr sg argl
> unparse_ctr _ [] = ""
> unparse_nm ( Name nm )
> = nm
> unparse_nm ( Operator' op prc tpe )
> = "{" ++ op ++ " " ++ show_tpe tpe ++ " " ++ show prc ++ "}"
> show_tpe Pre = "Pre"
> show_tpe BinL = "BinL"
> show_tpe BinR = "BinR"
> show_tpe Post = "Post"
> unparse_bcon :: Binary_conn -> String
> unparse_bcon Or = "\180"
> unparse_bcon And = "\179"
>-- unparse_bcon Imp = "\182"
> unparse_bcon Eq' = "="
> unparse_bcon Issubtype = "\172"
> unparse_constant T = "True"
> unparse_constant F = "False"
> unparse_constant Bool' = "Bool"
> unparse_constant ( Univ i ) = "U" ++ show i
> lookUp ( Extend dc sg _ ) 0 i2 i3
> = lookup_dc dc [] i2 i3
> lookUp ( Extend dc sg _ ) i1 i2 i3 | i1 > 0
> = lookUp sg (i1-1) i2 i3
> lookUp _ _ _ _ = "symbol not found "
> lookup_dc ( Symbol_dec tm attL ) _ 0 _
> = case nm of
> Name inm -> inm
> Operator' op _ _ -> op
> where
> nm = case attval Name_Style attL of
> Symbol_Name nm' -> nm'
> Datatype_Name nmL -> Name " Unexpected Datatype "
> lookup_dc ( Axiom_dec tm attL ) _ 0 _
> = case nm of
> Name inm -> inm
> Operator' op _ _ -> op
> where
> nm = case attval Name_Style attL of
> Symbol_Name nm' -> nm'
> Datatype_Name nmL -> Name " Unexpected Datatype "
> lookup_dc ( Decpair dc1 dc2 attL ) dcl i k | i > 0
> = case attval Dec_Style attL of
>-- Grouped -> --HERE
> Grouped -> lookup_dc dc1 ( dc2 : dcl ) (i-1) k
> Ungrouped -> lookup_dc dc1 ( dc2 : dcl ) (i-1) k
> lookup_dc ( Data _ _ attL ) _ 0 k
> = lookup_ctr nmL k
> where
> nmL = case attval Name_Style attL of
> Symbol_Name nm' -> [ nm' ] -- error cond (change?)
> Datatype_Name nmL' -> nmL'
> lookup_dc ( Def _ _ attL ) _ 0 _
> = case nm of
> Name inm -> inm
> Operator' op _ _ -> op
> where
> nm = case attval Name_Style attL of
> Symbol_Name nm' -> nm'
> Datatype_Name nmL -> Name " Unexpected Datatype "
> lookup_dc _ ( dc : dcl ) i k | i > 0
> = lookup_dc dc dcl (i-1) k
> lookup_dc _ _ _ _ = " symbol not found "
> lookup_ctr ( nm : nml ) k | k > 0
> = lookup_ctr nml (k-1)
> lookup_ctr ( nm : nml ) 0
> = case nm of
> Name inm -> inm
> Operator' op _ _ -> op
> lookup_ctr [] _
> = " Constructor not found "
token display function used in debugging messages
> disp_tk :: Token -> String
> disp_tk ( Rvd str ) = str
> disp_tk ( Clr str ) = str
> disp_tk ( Bdr bdr ) = unparse_bdr bdr
> disp_tk ( IfxBdr str ) = str
> disp_tk ( IfxOp str ) = str
> disp_tk ( Scan_Err str ) = "Invalid token: " ++ str -- have to change this?
unparse signature
> unparse_sg :: Flagged_ITrm -> String
> unparse_sg ( Opnd ( Isgn sg )) = unparse_sg' sg
> unparse_sg ( Prs_Err mesg ) = mesg
> unparse_sg' ( Empty _ ) = ""
> unparse_sg' ( Extend dc sg _ )
> = unparse_dc ( Empty [] ) dc ++ " ;\n" ++ unparse_sg' sg
|