home *** CD-ROM | disk | FTP | other *** search
- /* --------------------------------------------------------------- */
- /* PROGRAMM: AL_PARSER.pro / Burkhard Wittek. CIS München */
- /* --------------------------------------------------------------- */
-
- ausdruck(e,n,m,[x,y]) :- formel(e,n,m,[x,y]).
-
- formel(e,n_,m,[x,y]) :- formel_(v,0,p,n,m,[x,z]), rest-formel(p,e,n_,n,[z,y]).
-
- formel_(v,w,p,n_,m,[x,y]) :- primary(f,n,m,[x,z]), rest-formel_(v,w,f,p,n_,n,[z,y]).
-
- primary([o-a,p],n,m,[x,y]) :-
- wort(o,[x,z]),
- junktor(4,o,o-a),
- primary(p,n,m,[z,y]).
- primary(e,n,m,[x,y]) :-
- wort('(',[x,z]),
- ausdruck(e,n,m,[z,t]),
- wort(')',[t,y]).
- primary(q,n,m,[x,y]) :-
- wort(p,[x,y]),
- diff-oder-gleich([q,p],m,n).
-
- rest-formel_(v_,v,p,[o-a,p,p_],n,m,[x,y]) :-
- wort(o,[x,z]),
- junktor(w,o,o-a),
- eval(v,w),
- formel_(v_,w,p_,n,m,[z,y]).
- rest-formel_(v,v,e,e,m,m,[x,x]).
-
- rest-formel(p,[o-a,p,p_],n,m,[x,y]) :-
- wort(o,[x,z]),
- junktor(w,o,o-a),
- formel(p_,n,m,[z,y]).
- rest-formel(e,e,m,m,[x,x]).
-
- eval(v,w) :- val(eql(v,w),1).
- eval(v,w) :- val(inf(v,w),1).
-
- junktor(4,'┬',neg).
- junktor(3,'&',konj).
- junktor(2,'#',disj).
- junktor(1,']',re-impl).
- junktor(1,'[',li-impl).
-
- wort(a,[a;x,x]).
-
- diff-oder-gleich([k_,n],nil,[k_,n];nil).
- diff-oder-gleich([k,n],[k,m];q,[k,m];q) :- eq(n,m).
- diff-oder-gleich([k,n],[k_,m];q,[k_,m];p) :-
- dif(n,m),
- diff-oder-gleich([k,n],q,p).
-
- lesen(nil) :- next-char_('.') / in-char_('.').
- lesen(a;b) :- in-ident(a) / lesen(b).
- lesen(a;b) :- in-char_(a), lesen(b).
-
- terminologie :-
- line,
- write('Junktoren: & Konjunktion'),
- write(' # Disjunktion'),
- write(' ] Implikation (rechts-gerichtet)'),
- write(' [ Implikation (links-gerichtet)'),
- write(' ┬ Negation (ASCII 194)'),
- line,
- write('Atome: alphabetische Einzel-Zeichen oder Zeichenfolgen').
-
- al :-
- terminologie,
- repeat,
- line,
- write('Ausdruck: '),
- lesen(p),
- analysiere(p,e),
- write('Semantik: '),
- outl(e),
- fail.
-
- /* repeat :-. */
- /* repeat :- repeat. */
-
- analysiere(p,e) :- ausdruck(e,n,nil,[p,nil]).
- analysiere(p,e) :- write('... ist nicht wohlgeformt'), fail.
-
-
-