home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 01 / tracer / tracer.pro < prev   
Encoding:
Prolog Source  |  1988-11-01  |  9.2 KB  |  282 lines

  1. /*********************************************************
  2.  *                Turbo-Prolog-Tracer                    *        
  3.  * Ermittlung der verbrauchten Zeit bezogen auf die      *
  4.  * definierten Prädikate. Nach Start wird der Name       *
  5.  * des zu analysierenden Turbo-Prolog Programmes erfragt.*
  6.  * Es wird ein neues Programm erstellt, mit dem die      *
  7.  * Analyse durchgeführt wird.                            *
  8.  * Voraussetzungen:                                      *
  9.  * ----------------                                      *
  10.  *   Start mit "GOAL los." in der Originaldatei,         *
  11.  *   kein EXIT in der Originaldatei,                     *
  12.  *   Nichtstandard-Prädikate jeweils in eigenen Zeilen,  *                          
  13.  *   letzte Zeile mit RETURN abschließen,                *
  14.  *   kein not(Prädikat) in der Originaldatei,            *
  15.  *   Vorgeschriebene Reihenfolge (auch leere angeben!)   *        
  16.  *   =>   DOMAINS->DATABASE->PREDICATES->GOAL->CLAUSES   *
  17.  *********************************************************/
  18.  
  19. DOMAINS
  20.   file           = quelle;ziel
  21.   zeit           = real
  22.   wort           = string
  23.   backtracking   = integer
  24.   zustand        = integer
  25.  
  26. DATABASE
  27.   zeiten(backtracking,wort,zeit,zeit)
  28.   syntax(zustand)
  29.  
  30. PREDICATES
  31.   los
  32.   analysestart
  33.   einschub
  34.   trim(wort,wort)
  35.   analyse(wort,wort)
  36.   aufbau
  37.   weiterbau
  38.   abspann
  39.   abspann1
  40.   abspann2
  41.   basis
  42.  
  43. GOAL
  44.   los.
  45.  
  46. CLAUSES
  47.  
  48.   los:-
  49.     makewindow(2,11,12," Turbo Prolog - Tracer ",
  50.                0,0,25,80),
  51.     analysestart.
  52.  
  53.   analysestart:-
  54.     asserta(syntax(0)),
  55.     write("Geben Sie den Namen der Prolog-Quelle "),
  56.     write("ein (ohne .PRO)!  "),
  57.     readln(Prolog),
  58.     concat(Prolog,".PRO",Prolog1),
  59.     concat("T",".PRO",Prolog2),
  60.     openread(quelle,Prolog1),
  61.     openwrite(ziel,Prolog2),
  62.     readdevice(quelle),
  63.     writedevice(ziel),
  64.     einschub,
  65.     abspann,
  66.     closefile(quelle),
  67.     closefile(ziel),
  68.     writedevice(screen),
  69.     retract(syntax(_)),
  70.     save("DATBANK.ZEI"),
  71.     nl,
  72.     write("Aufbau  des  Analyseprogrammes erfolgreich "),
  73.     write("abgeschlossen !"),
  74.     nl,
  75.     write("Übersetzen Sie das Programm T.PRO und "),
  76.     write("bringen Sie es zur Ausführung !"),
  77.     nl,write("Verwendete Prädikate ==>"), nl,
  78.     basis,nl.
  79.   analysestart:-
  80.     write("Fehlerhafte Eingabe ! "),nl.
  81.  
  82.   einschub :-
  83.     readln(Neu_Wort),
  84.     trim(Wort,Neu_Wort),
  85.     upper_lower(Wort1,Wort),
  86.     analyse(Wort1,Wort),
  87.     !, einschub.
  88.   einschub.
  89.   
  90.   analyse(Wort1,_):-
  91.     fronttoken(Wort1,Wort2,_),
  92.     Wort2 = "DOMAINS",nl,
  93.     write("DOMAINS"),nl,
  94.     write("  backtracking     = integer"),nl,
  95.     write("  praedikat        = string"),nl,
  96.     write("  uhrzeit          = integer"),nl,
  97.     write("  verbrauchte_zeit = integer"),nl.
  98.   analyse(Wort1,_) :-
  99.     fronttoken(Wort1,Wort2,_),
  100.     Wort2="DATABASE",nl,
  101.     write("DATABASE"),nl,
  102.     write("   zeiten(backtracking,praedikat,uhrzeit,"),
  103.     write("verbrauchte_zeit)"),nl.
  104.   analyse(Wort1,_) :-
  105.     fronttoken(Wort1,Wort2,_),
  106.     Wort2="PREDICATES",nl,
  107.     write("PREDICATES"),nl,
  108.     write("   start"),nl,
  109.     write("   vorher(praedikat)"),nl,
  110.     write("   nachher(praedikat)"),nl,
  111.     write("   ergebnisse"),nl,
  112.     aufbau.
  113.   analyse(Wort1,_) :-
  114.     fronttoken(Wort1,Wort2,Wort3),
  115.     Wort2="LOS",
  116.     fronttoken(Wort3,Wort4,_),
  117.     Wort4 = ".".
  118.   analyse(Wort1,_):-
  119.     fronttoken(Wort1,Wort2,_),
  120.     Wort2="CLAUSES".
  121.   analyse(_,Wort):-
  122.     fronttoken(Wort,Wort2,_),
  123.     zeiten(_,Wort2,_,_),
  124.     str_len(Wort,Laenge),Laenge1 = Laenge - 1,
  125.     frontstr(Laenge1,Wort,Wort3,Rest),
  126.     Rest <> "-", Rest <> ".",
  127.     write("      vorher(",Wort2,"),"),write(Wort3),
  128.     write(" ,nachher(",Wort2,")"),    
  129.     write(Rest),nl.
  130.   analyse(Wort1,Wort):-
  131.     fronttoken(Wort1,Wort2,_), upper_lower(Wort2,Wort3),
  132.     zeiten(_,Wort3,_,_),
  133.     str_len(Wort1,Laenge), Laenge1 = Laenge - 1,
  134.     frontstr(Laenge1,Wort1,_,Rest),
  135.     Rest = "-",
  136.     retract(syntax(_)), asserta(syntax(1)),
  137.     write(Wort), nl.
  138.   analyse(Wort1,Wort) :-
  139.     fronttoken(Wort1,Wort2,_), upper_lower(Wort2,Wort3),
  140.     zeiten(_,Wort3,_,_),
  141.     str_len(Wort1,Laenge), Laenge1 = Laenge - 1,
  142.     frontstr(Laenge1,Wort1,_,Rest),
  143.     Rest = ".", syntax(0), write(Wort), nl.
  144.   analyse(Wort1,Wort) :-
  145.     fronttoken(Wort1,Wort2,_), upper_lower(Wort2,Wort3),
  146.     zeiten(_,Wort3,_,_),
  147.     str_len(Wort1,Laenge), Laenge1 = Laenge - 1,
  148.     frontstr(Laenge1,Wort1,_,Rest), 
  149.     frontstr(Laenge1,Wort,Wort4,_),
  150.     Rest = ".", syntax(1), 
  151.     retract(syntax(_)), asserta(syntax(0)),
  152.     write("      vorher(",Wort3,"),"),write(Wort4),
  153.     write(" ,nachher(",Wort3,")"),    
  154.     write(Rest),nl.    
  155.   analyse(Wort1,_) :-
  156.     Wort1 = "EXIT".
  157.   analyse(Wort1,Wort):-
  158.     str_len(Wort1,Laenge), Laenge1 = Laenge - 1,
  159.     frontstr(Laenge1,Wort1,_,Rest),
  160.     Rest = ".", syntax(1),
  161.     retract(syntax(_)), asserta(syntax(0)),
  162.     write(Wort),nl.
  163.   analyse(_,Wort) :-
  164.     write(Wort), nl.
  165.   
  166.   aufbau :-
  167.     readln(Wort), upper_lower(Wort1,Wort),
  168.     Wort1 <> "GOAL", write(Wort),nl,
  169.     fronttoken(Wort,Wort2,_),
  170.     assertz(zeiten(0,Wort2,0,0)),
  171.     aufbau.
  172.     
  173.    aufbau :-
  174.     weiterbau.
  175.  
  176.   weiterbau :-
  177.     readln(_), nl,
  178.     write("GOAL"),nl,
  179.     write("  consult(",'"',"DATBANK.ZEI",'"',"),"),nl,
  180.     write("  time(0,0,0,0),"),nl,
  181.     write("  start,"),nl,
  182.     write("  makewindow(2,11,12,",'"'," Turbo Prolog - "),
  183.     write("Tracer ",'"',",0,0,25,80),"),nl,
  184.     write("  ergebnisse."),nl,
  185.     write("CLAUSES"),nl,
  186.     write("  start:-"),nl,
  187.     write("         vorher(los),los,nachher(los)."),nl,
  188.     write("  start."),nl,nl.
  189.   
  190.   
  191.   abspann :-        /* Gesplittet wegen Compiler-Limit */
  192.     abspann1, abspann2.    
  193.     
  194.   abspann1 :-
  195.     write("  vorher(Praedikat):-"),nl,
  196.     write("    zeiten(Backtracking,Praedikat,Uhrzeit,"),
  197.     write("Verbrauchte_Zeit),"),nl,
  198.     write("    Backtracking>0,"),nl,
  199.     write("    Backtracking1 = Backtracking+1,"),nl,
  200.     write("    retract(zeiten(Backtracking,Praedikat,"),
  201.     write("Uhrzeit,Verbrauchte_Zeit)),"),nl,
  202.     write("    assertz(zeiten(Backtracking1,Praedikat,"),
  203.     write("Uhrzeit,Verbrauchte_Zeit)),!."),nl,
  204.     write("  vorher(Praedikat):-"),nl,
  205.     write("    zeiten(Backtracking,Praedikat,_,"),
  206.     write("Verbrauchte_Zeit),"),nl,
  207.     write("    Backtracking=0,"),nl,
  208.     write("    time(Hours,Minutes,Seconds,Hundreds),"),nl,
  209.     write("    Uhrzeit_Neu=Hundreds+100*Seconds+6000*"),
  210.     write("Minutes+360000*Hours,"),nl,
  211.     write("    retract(zeiten(0,Praedikat,_,"),
  212.     write("Verbrauchte_Zeit)),"),nl,
  213.     write("    asserta(zeiten(1,Praedikat,Uhrzeit_Neu,"),
  214.     write("Verbrauchte_Zeit)),!."),nl,
  215.     write("  vorher(_) :-"),nl,
  216.     write("    nachher(_)."),nl,
  217.     write("  vorher(_)."),nl,
  218.     write("  nachher(Praedikat):-"),nl,
  219.     write("    zeiten(Backtracking,Praedikat,Uhrzeit,"),
  220.     write("Verbrauchte_Zeit),"),nl,
  221.     write("    Backtracking>1,"),nl,
  222.     write("    Backtracking1 = Backtracking-1,"),nl,
  223.     write("    retract(zeiten(Backtracking,Praedikat,"),
  224.     write("Uhrzeit,Verbrauchte_Zeit)),"),nl,
  225.     write("    assertz(zeiten(Backtracking1,Praedikat,"),
  226.     write("Uhrzeit,Verbrauchte_Zeit)),!."),nl,
  227.     write("  nachher(Praedikat):-"),nl,
  228.     write("    zeiten(1,Praedikat,Uhrzeit,"),
  229.     write("Verbrauchte_Zeit),"),nl,
  230.     write("    time(Hours,Minutes,Seconds,Hundreds),"),nl,
  231.     write("    Uhrzeit_Neu=Hundreds+100*Seconds+6000*"),
  232.     write("Minutes+360000*Hours,"),nl.
  233.   abspann2 :-
  234.     write("    Verbrauchte_Zeit_Neu=Verbrauchte_Zeit+"),
  235.     write("Uhrzeit_Neu-Uhrzeit,"),nl,
  236.     write("    retract(zeiten(1,Praedikat,Uhrzeit,"),
  237.     write("Verbrauchte_Zeit)),"),nl,
  238.     write("    assertz(zeiten(0,Praedikat,Uhrzeit_Neu,"),
  239.     write("Verbrauchte_Zeit_Neu)),!."),nl,
  240.     write("  ergebnisse:-"),nl,
  241.     write("    zeiten(Backtracking,Praedikat,Uhrzeit,"),
  242.     write("Verbrauchte_Zeit),"),nl,
  243.     write("    Backtracking>0,"),nl,
  244.     write("    nachher(Praedikat),"),nl,
  245.     write("    retract(zeiten(Backtracking,Praedikat,"),
  246.     write("Uhrzeit,Verbrauchte_Zeit)),"),nl,
  247.     write("    write(Backtracking,"),
  248.     write('"'," --> ",'"'),
  249.     write(",Praedikat,"), write('"'," --> ",'"',","),
  250.     write("Verbrauchte_Zeit),nl,"),nl,
  251.     write("    fail."), nl,
  252.     write("  ergebnisse :-"),nl,
  253.     write("    zeiten(Backtracking,Praedikat,Uhrzeit,"),
  254.     write("Verbrauchte_Zeit),"),nl,
  255.     write("    Backtracking=0,"),nl,
  256.     write("    retract(zeiten(Backtracking,Praedikat,"),
  257.     write("Uhrzeit,Verbrauchte_Zeit)),"),nl,
  258.     write("    write(Backtracking,"),
  259.     write('"'," --> ",'"'),
  260.     write(",Praedikat,"), write('"'," --> ",'"',","),
  261.     write("Verbrauchte_Zeit),nl,"),nl,
  262.     write("    fail."),nl,
  263.     write("  ergebnisse."),nl,nl.
  264.     
  265.     trim(Wort1,""):-
  266.       Wort1="".
  267.     trim(Wort1,Wort2):-
  268.       str_len(Wort2,Laenge), Laenge1 = Laenge - 1,
  269.       frontstr(Laenge1,Wort2,_,Wort3), Wort3 <> " ",
  270.       Wort1 = Wort2.
  271.     trim(Wort1,Wort2):-
  272.       str_len(Wort2,Laenge), Laenge1 = Laenge - 1,
  273.       frontstr(Laenge1,Wort2,Wort4,_), 
  274.       trim(Wort3,Wort4),
  275.       Wort1 = Wort3,!.
  276.       
  277.     basis :-
  278.       zeiten(_,Wert,_,_),
  279.       write(Wert), nl,
  280.       fail.
  281.     basis.
  282.