% X= Dateiname
% N= Zähler (Wird benötigt um festzustellen, ob zu übersetzendes
Token
% das erste Token eines Satzes ist)
uebersetze(X):-
repeat,
see(X),
read(Y),
N is 1,
%tell('wfw.txt'), % auskommentieren, falls Ausgabe auf den Bildschirm
gewünscht
translate(Y,N),
nl,
Y==[],
seen,
told,
!.
% Übersetzungsprädikate
% Abbruchbedingung
translate([],_).
% Übersetzt Token, falls: erstes Token des Satzes und nicht im Lexikon
translate([D|DRest],N):-
findall(E,change(D,E),Resultat),
laenge(Resultat,Laenge),
Laenge=0,
N=1,
!,
gross1(D),
put(32),
NN is N+1,
translate(DRest,NN).
% Übersetzt Token, falls: nicht erstes Token des Satzes und
% nicht im Lexikon
translate([D|DRest],N):-
findall(E,change(D,E),Resultat),
laenge(Resultat,Laenge),
Laenge=0,
N=\=1,
!,
write(D),
put(32),
NN is N+1,
translate(DRest,NN).
% Übersetzt Token, falls: erstes Token des Satzes und mehrdeutig
translate([D|DRest],N):-
findall(E,change(D,E),Resultat),
laenge(Resultat,Laenge),
Laenge>=2,
N=1,
!,
write('{'),
gross2(Resultat),
write('}'), put(32),
NN is N+1,
translate(DRest,NN).
% Übersetzt Token, falls: nicht erstes Token des Satzes und mehrdeutig
translate([D|DRest],N):-
findall(E,change(D,E),Resultat),
laenge(Resultat,Laenge),
Laenge>=2,
N=\=1,
!,
write('{'),
ausgabe(Resultat),
write('}'), put(32),
NN is N+1,
translate(DRest,NN).
% Übersetzt Token, falls: erstes Token des Satzes und eindeutig
translate([D|DRest],N):-
change(D,E),
N=1,
!,
gross1(E),
put(32),
NN is N+1,
translate(DRest,NN).
% Übersetzt Token, falls: nicht erstes Token des Satzes und eindeutig
translate([D|DRest],N):-
change(D,E),
N=\=1,
!,
write(E), put(32),
NN is N+1,
translate(DRest,NN).
% sorgt für hübsche Ausgabe von mehrdeutigen Tokens
ausgabe([]).
ausgabe([X|Rest]):-
laenge(Rest,RLaenge),
RLaenge>=1,
write(X),
write(','), put(32),
ausgabe(Rest).
ausgabe([X|Rest]):-
laenge(Rest,RLaenge),
RLaenge=0,
write(X),
ausgabe(Rest).
% Sorgt für Grossschreibung des ersten Zeichens des ersten Tokens
% im Satz, falls: erstes Token nicht mehrdeutig und erstes
% Zeichen = alphabetisch
gross1(D):-
name(D,[EAscii|RAscii]),
EAscii >=97,
EAscii =<122,
!,
NEAscii is EAscii-32,
name(GrossD,[NEAscii|RAscii]),
write(GrossD).
% Falls erstes Zeichen des ersten Tokens nicht alphabetisch
gross1(D):-
write(D).
% Sorgt für Grossschreibung des ersten Zeichens des ersten Tokens
% im Satz, falls: erstes Token mehrdeutig und erstes
% Zeichen = alphabetisch. Sorgt ausserdem für hübsche Darstellung
% (wie Ausgabe).
gross2([]).
gross2([D|Rest]):-
name(D,[EAscii|RAscii]),
NEAscii is EAscii-32,
name(GrossD,[NEAscii|RAscii]),
laenge(Rest,RLaenge),
RLaenge>=1,
write(GrossD),
write(','), put(32),
gross2(Rest).
gross2([D|Rest]):-
name(D,[EAscii|RAscii]),
NEAscii is EAscii-32,
name(GrossD,[NEAscii|RAscii]),
laenge(Rest,RLaenge),
RLaenge=0,
write(GrossD),
gross2(Rest).
% Hilfsprädikat (bestimmt Länge einer Liste)
laenge([],0).
laenge([_|R],Y):-
laenge(R,RL),
Y is RL + 1.
Zurück zum Wort-für-Wort
Übersetzungssystem
Zurück zur Startseite