home *** CD-ROM | disk | FTP | other *** search
Prolog Source | 1988-11-01 | 9.2 KB | 282 lines |
- /*********************************************************
- * Turbo-Prolog-Tracer *
- * Ermittlung der verbrauchten Zeit bezogen auf die *
- * definierten Prädikate. Nach Start wird der Name *
- * des zu analysierenden Turbo-Prolog Programmes erfragt.*
- * Es wird ein neues Programm erstellt, mit dem die *
- * Analyse durchgeführt wird. *
- * Voraussetzungen: *
- * ---------------- *
- * Start mit "GOAL los." in der Originaldatei, *
- * kein EXIT in der Originaldatei, *
- * Nichtstandard-Prädikate jeweils in eigenen Zeilen, *
- * letzte Zeile mit RETURN abschließen, *
- * kein not(Prädikat) in der Originaldatei, *
- * Vorgeschriebene Reihenfolge (auch leere angeben!) *
- * => DOMAINS->DATABASE->PREDICATES->GOAL->CLAUSES *
- *********************************************************/
-
- DOMAINS
- file = quelle;ziel
- zeit = real
- wort = string
- backtracking = integer
- zustand = integer
-
- DATABASE
- zeiten(backtracking,wort,zeit,zeit)
- syntax(zustand)
-
- PREDICATES
- los
- analysestart
- einschub
- trim(wort,wort)
- analyse(wort,wort)
- aufbau
- weiterbau
- abspann
- abspann1
- abspann2
- basis
-
- GOAL
- los.
-
- CLAUSES
-
- los:-
- makewindow(2,11,12," Turbo Prolog - Tracer ",
- 0,0,25,80),
- analysestart.
-
- analysestart:-
- asserta(syntax(0)),
- write("Geben Sie den Namen der Prolog-Quelle "),
- write("ein (ohne .PRO)! "),
- readln(Prolog),
- concat(Prolog,".PRO",Prolog1),
- concat("T",".PRO",Prolog2),
- openread(quelle,Prolog1),
- openwrite(ziel,Prolog2),
- readdevice(quelle),
- writedevice(ziel),
- einschub,
- abspann,
- closefile(quelle),
- closefile(ziel),
- writedevice(screen),
- retract(syntax(_)),
- save("DATBANK.ZEI"),
- nl,
- write("Aufbau des Analyseprogrammes erfolgreich "),
- write("abgeschlossen !"),
- nl,
- write("Übersetzen Sie das Programm T.PRO und "),
- write("bringen Sie es zur Ausführung !"),
- nl,write("Verwendete Prädikate ==>"), nl,
- basis,nl.
- analysestart:-
- write("Fehlerhafte Eingabe ! "),nl.
-
- einschub :-
- readln(Neu_Wort),
- trim(Wort,Neu_Wort),
- upper_lower(Wort1,Wort),
- analyse(Wort1,Wort),
- !, einschub.
- einschub.
-
- analyse(Wort1,_):-
- fronttoken(Wort1,Wort2,_),
- Wort2 = "DOMAINS",nl,
- write("DOMAINS"),nl,
- write(" backtracking = integer"),nl,
- write(" praedikat = string"),nl,
- write(" uhrzeit = integer"),nl,
- write(" verbrauchte_zeit = integer"),nl.
- analyse(Wort1,_) :-
- fronttoken(Wort1,Wort2,_),
- Wort2="DATABASE",nl,
- write("DATABASE"),nl,
- write(" zeiten(backtracking,praedikat,uhrzeit,"),
- write("verbrauchte_zeit)"),nl.
- analyse(Wort1,_) :-
- fronttoken(Wort1,Wort2,_),
- Wort2="PREDICATES",nl,
- write("PREDICATES"),nl,
- write(" start"),nl,
- write(" vorher(praedikat)"),nl,
- write(" nachher(praedikat)"),nl,
- write(" ergebnisse"),nl,
- aufbau.
- analyse(Wort1,_) :-
- fronttoken(Wort1,Wort2,Wort3),
- Wort2="LOS",
- fronttoken(Wort3,Wort4,_),
- Wort4 = ".".
- analyse(Wort1,_):-
- fronttoken(Wort1,Wort2,_),
- Wort2="CLAUSES".
- analyse(_,Wort):-
- fronttoken(Wort,Wort2,_),
- zeiten(_,Wort2,_,_),
- str_len(Wort,Laenge),Laenge1 = Laenge - 1,
- frontstr(Laenge1,Wort,Wort3,Rest),
- Rest <> "-", Rest <> ".",
- write(" vorher(",Wort2,"),"),write(Wort3),
- write(" ,nachher(",Wort2,")"),
- write(Rest),nl.
- analyse(Wort1,Wort):-
- fronttoken(Wort1,Wort2,_), upper_lower(Wort2,Wort3),
- zeiten(_,Wort3,_,_),
- str_len(Wort1,Laenge), Laenge1 = Laenge - 1,
- frontstr(Laenge1,Wort1,_,Rest),
- Rest = "-",
- retract(syntax(_)), asserta(syntax(1)),
- write(Wort), nl.
- analyse(Wort1,Wort) :-
- fronttoken(Wort1,Wort2,_), upper_lower(Wort2,Wort3),
- zeiten(_,Wort3,_,_),
- str_len(Wort1,Laenge), Laenge1 = Laenge - 1,
- frontstr(Laenge1,Wort1,_,Rest),
- Rest = ".", syntax(0), write(Wort), nl.
- analyse(Wort1,Wort) :-
- fronttoken(Wort1,Wort2,_), upper_lower(Wort2,Wort3),
- zeiten(_,Wort3,_,_),
- str_len(Wort1,Laenge), Laenge1 = Laenge - 1,
- frontstr(Laenge1,Wort1,_,Rest),
- frontstr(Laenge1,Wort,Wort4,_),
- Rest = ".", syntax(1),
- retract(syntax(_)), asserta(syntax(0)),
- write(" vorher(",Wort3,"),"),write(Wort4),
- write(" ,nachher(",Wort3,")"),
- write(Rest),nl.
- analyse(Wort1,_) :-
- Wort1 = "EXIT".
- analyse(Wort1,Wort):-
- str_len(Wort1,Laenge), Laenge1 = Laenge - 1,
- frontstr(Laenge1,Wort1,_,Rest),
- Rest = ".", syntax(1),
- retract(syntax(_)), asserta(syntax(0)),
- write(Wort),nl.
- analyse(_,Wort) :-
- write(Wort), nl.
-
- aufbau :-
- readln(Wort), upper_lower(Wort1,Wort),
- Wort1 <> "GOAL", write(Wort),nl,
- fronttoken(Wort,Wort2,_),
- assertz(zeiten(0,Wort2,0,0)),
- aufbau.
-
- aufbau :-
- weiterbau.
-
- weiterbau :-
- readln(_), nl,
- write("GOAL"),nl,
- write(" consult(",'"',"DATBANK.ZEI",'"',"),"),nl,
- write(" time(0,0,0,0),"),nl,
- write(" start,"),nl,
- write(" makewindow(2,11,12,",'"'," Turbo Prolog - "),
- write("Tracer ",'"',",0,0,25,80),"),nl,
- write(" ergebnisse."),nl,
- write("CLAUSES"),nl,
- write(" start:-"),nl,
- write(" vorher(los),los,nachher(los)."),nl,
- write(" start."),nl,nl.
-
-
- abspann :- /* Gesplittet wegen Compiler-Limit */
- abspann1, abspann2.
-
- abspann1 :-
- write(" vorher(Praedikat):-"),nl,
- write(" zeiten(Backtracking,Praedikat,Uhrzeit,"),
- write("Verbrauchte_Zeit),"),nl,
- write(" Backtracking>0,"),nl,
- write(" Backtracking1 = Backtracking+1,"),nl,
- write(" retract(zeiten(Backtracking,Praedikat,"),
- write("Uhrzeit,Verbrauchte_Zeit)),"),nl,
- write(" assertz(zeiten(Backtracking1,Praedikat,"),
- write("Uhrzeit,Verbrauchte_Zeit)),!."),nl,
- write(" vorher(Praedikat):-"),nl,
- write(" zeiten(Backtracking,Praedikat,_,"),
- write("Verbrauchte_Zeit),"),nl,
- write(" Backtracking=0,"),nl,
- write(" time(Hours,Minutes,Seconds,Hundreds),"),nl,
- write(" Uhrzeit_Neu=Hundreds+100*Seconds+6000*"),
- write("Minutes+360000*Hours,"),nl,
- write(" retract(zeiten(0,Praedikat,_,"),
- write("Verbrauchte_Zeit)),"),nl,
- write(" asserta(zeiten(1,Praedikat,Uhrzeit_Neu,"),
- write("Verbrauchte_Zeit)),!."),nl,
- write(" vorher(_) :-"),nl,
- write(" nachher(_)."),nl,
- write(" vorher(_)."),nl,
- write(" nachher(Praedikat):-"),nl,
- write(" zeiten(Backtracking,Praedikat,Uhrzeit,"),
- write("Verbrauchte_Zeit),"),nl,
- write(" Backtracking>1,"),nl,
- write(" Backtracking1 = Backtracking-1,"),nl,
- write(" retract(zeiten(Backtracking,Praedikat,"),
- write("Uhrzeit,Verbrauchte_Zeit)),"),nl,
- write(" assertz(zeiten(Backtracking1,Praedikat,"),
- write("Uhrzeit,Verbrauchte_Zeit)),!."),nl,
- write(" nachher(Praedikat):-"),nl,
- write(" zeiten(1,Praedikat,Uhrzeit,"),
- write("Verbrauchte_Zeit),"),nl,
- write(" time(Hours,Minutes,Seconds,Hundreds),"),nl,
- write(" Uhrzeit_Neu=Hundreds+100*Seconds+6000*"),
- write("Minutes+360000*Hours,"),nl.
- abspann2 :-
- write(" Verbrauchte_Zeit_Neu=Verbrauchte_Zeit+"),
- write("Uhrzeit_Neu-Uhrzeit,"),nl,
- write(" retract(zeiten(1,Praedikat,Uhrzeit,"),
- write("Verbrauchte_Zeit)),"),nl,
- write(" assertz(zeiten(0,Praedikat,Uhrzeit_Neu,"),
- write("Verbrauchte_Zeit_Neu)),!."),nl,
- write(" ergebnisse:-"),nl,
- write(" zeiten(Backtracking,Praedikat,Uhrzeit,"),
- write("Verbrauchte_Zeit),"),nl,
- write(" Backtracking>0,"),nl,
- write(" nachher(Praedikat),"),nl,
- write(" retract(zeiten(Backtracking,Praedikat,"),
- write("Uhrzeit,Verbrauchte_Zeit)),"),nl,
- write(" write(Backtracking,"),
- write('"'," --> ",'"'),
- write(",Praedikat,"), write('"'," --> ",'"',","),
- write("Verbrauchte_Zeit),nl,"),nl,
- write(" fail."), nl,
- write(" ergebnisse :-"),nl,
- write(" zeiten(Backtracking,Praedikat,Uhrzeit,"),
- write("Verbrauchte_Zeit),"),nl,
- write(" Backtracking=0,"),nl,
- write(" retract(zeiten(Backtracking,Praedikat,"),
- write("Uhrzeit,Verbrauchte_Zeit)),"),nl,
- write(" write(Backtracking,"),
- write('"'," --> ",'"'),
- write(",Praedikat,"), write('"'," --> ",'"',","),
- write("Verbrauchte_Zeit),nl,"),nl,
- write(" fail."),nl,
- write(" ergebnisse."),nl,nl.
-
- trim(Wort1,""):-
- Wort1="".
- trim(Wort1,Wort2):-
- str_len(Wort2,Laenge), Laenge1 = Laenge - 1,
- frontstr(Laenge1,Wort2,_,Wort3), Wort3 <> " ",
- Wort1 = Wort2.
- trim(Wort1,Wort2):-
- str_len(Wort2,Laenge), Laenge1 = Laenge - 1,
- frontstr(Laenge1,Wort2,Wort4,_),
- trim(Wort3,Wort4),
- Wort1 = Wort3,!.
-
- basis :-
- zeiten(_,Wert,_,_),
- write(Wert), nl,
- fail.
- basis.
-