Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  Code_Test.thy   Sprache: Isabelle

 

(*  Title:      HOL/Library/Code_Test.thy
    Author:     Andreas Lochbihler, ETH Zürich

Test infrastructure for the code generator.
*)


section ‹Test infrastructure for the code generator›

theory Code_Test
imports Main
keywords "test_code" :: diag
begin

subsection ‹YXML encoding for typ‹Code_Evaluation.term››

datatype (plugins del: code size "quickcheck") yxml_of_term = YXML

lemma yot_anything: "x = (y :: yxml_of_term)"
by(cases x y rule: yxml_of_term.exhaust[case_product yxml_of_term.exhaust])(simp)

definition yot_empty :: yxml_of_term where [code del]: "yot_empty = YXML"
definition yot_literal :: "String.literal → yxml_of_term"
  where [code del]: "yot_literal _ = YXML"
definition yot_append :: "yxml_of_term → yxml_of_term → yxml_of_term"
  where [code del]: "yot_append _ _ = YXML"
definition yot_concat :: "yxml_of_term list → yxml_of_term"
  where [code del]: "yot_concat _ = YXML"

text ‹Serialise typ‹yxml_of_term› to native string of target language›

code_printing type_constructor yxml_of_term
  ⇀  (SML) "string"
  and (OCaml) "string"
  and (Haskell) "String"
  and (Scala) "String"
| constant yot_empty
  ⇀  (SML) "\"\""
  and (OCaml) "\"\""
  and (Haskell) "\"\""
  and (Scala) "\"\""
| constant yot_literal
  ⇀  (SML) "_"
  and (OCaml) "_"
  and (Haskell) "_"
  and (Scala) "_"
| constant yot_append
  ⇀ (SML) "String.concat [(_), (_)]"
  and (OCaml) "String.concat \"\" [(_); (_)]"
  and (Haskell) infixr 5 "++"
  and (Scala) infixl 5 "+"
| constant yot_concat
  ⇀ (SML) "String.concat"
  and (OCaml) "String.concat \"\""
  and (Haskell) "Prelude.concat"
  and (Scala) "_.mkString(\"\")"

text ‹
 Stripped-down implementations of Isabelle's XML tree with YXML encoding as
 defined in 🚫‹~~/src/Pure/PIDE/xml.ML›, 🚫‹~~/src/Pure/PIDE/yxml.ML›
 sufficient to encode typ‹Code_Evaluation.term› as in
 🚫‹~~/src/Pure/term_xml.ML›.
 
›

datatype (plugins del: code size "quickcheck") xml_tree = XML_Tree

lemma xml_tree_anything: "x = (y :: xml_tree)"
by(cases x y rule: xml_tree.exhaust[case_product xml_tree.exhaust])(simp)

context begin
local_setup ‹Local_Theory.map_background_naming (Name_Space.mandatory_path "xml")›

type_synonym attributes = "(String.literal × String.literal) list"
type_synonym body = "xml_tree list"

definition Elem :: "String.literal → attributes → xml_tree list → xml_tree"
where [code del]: "Elem _ _ _ = XML_Tree"

definition Text :: "String.literal → xml_tree"
where [code del]: "Text _ = XML_Tree"

definition node :: "xml_tree list → xml_tree"
where "node ts = Elem (STR '':'') [] ts"

definition tagged :: "String.literal → String.literal option → xml_tree list → xml_tree"
where "tagged tag x ts = Elem tag (case x of None → [] | Some x' → [(STR ''0'', x')]) ts"

definition list where "list f xs = map (node ∘ f) xs"

definition X :: yxml_of_term where "X = yot_literal (STR 0x05)"
definition Y :: yxml_of_term where "Y = yot_literal (STR 0x06)"
definition XY :: yxml_of_term where "XY = yot_append X Y"
definition XYX :: yxml_of_term where "XYX = yot_append XY X"

end

code_datatype xml.Elem xml.Text

definition yxml_string_of_xml_tree :: "xml_tree → yxml_of_term → yxml_of_term"
where [code del]: "yxml_string_of_xml_tree _ _ = YXML"

lemma yxml_string_of_xml_tree_code [code]:
  "yxml_string_of_xml_tree (xml.Elem name atts ts) rest =
   yot_append xml.XY (
   yot_append (yot_literal name) (
   foldr (λ(a, x) rest.
     yot_append xml.Y (
     yot_append (yot_literal a) (
     yot_append (yot_literal (STR ''='')) (
     yot_append (yot_literal x) rest)))) atts (
   foldr yxml_string_of_xml_tree ts (
   yot_append xml.XYX rest))))"
  "yxml_string_of_xml_tree (xml.Text s) rest = yot_append (yot_literal s) rest"
by(rule yot_anything)+

definition yxml_string_of_body :: "xml.body → yxml_of_term"
where "yxml_string_of_body ts = foldr yxml_string_of_xml_tree ts yot_empty"

text ‹
 Encoding typ‹Code_Evaluation.term› into XML trees as defined in
 🚫‹~~/src/Pure/term_xml.ML›.
 
›

definition xml_of_typ :: "Typerep.typerep → xml.body"
where [code del]: "xml_of_typ _ = [XML_Tree]"

definition xml_of_term :: "Code_Evaluation.term → xml.body"
where [code del]: "xml_of_term _ = [XML_Tree]"

lemma xml_of_typ_code [code]:
  "xml_of_typ (typerep.Typerep t args) = [xml.tagged (STR ''0'') (Some t) (xml.list xml_of_typ args)]"
by(simp add: xml_of_typ_def xml_tree_anything)

lemma xml_of_term_code [code]:
  "xml_of_term (Code_Evaluation.Const x ty) = [xml.tagged (STR ''0'') (Some x) (xml_of_typ ty)]"
  "xml_of_term (Code_Evaluation.App t1 t2) = [xml.tagged (STR ''5'') None [xml.node (xml_of_term t1), xml.node (xml_of_term t2)]]"
  "xml_of_term (Code_Evaluation.Abs x ty t) = [xml.tagged (STR ''4'') (Some x) [xml.node (xml_of_typ ty), xml.node (xml_of_term t)]]"
  ― ‹FIXME: const‹Code_Evaluation.Free› is used only in 🚫‹HOL.Quickcheck_Narrowing› to represent
 uninstantiated parameters in constructors. Here, we always translate them to 🚫‹Free› variables.
›
  "xml_of_term (Code_Evaluation.Free x ty) = [xml.tagged (STR ''1'') (Some x) (xml_of_typ ty)]"
by(simp_all add: xml_of_term_def xml_tree_anything)

definition yxml_string_of_term :: "Code_Evaluation.term → yxml_of_term"
where "yxml_string_of_term = yxml_string_of_body ∘ xml_of_term"

subsection ‹Test engine and drivers›

ML_file ‹code_test.ML›

end

Messung V0.5 in Prozent
C=80 H=72 G=75

¤ Dauer der Verarbeitung: 0.11 Sekunden  (vorverarbeitet am  2026-09-29) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1126864
#Domains=1897691