home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9202 / grampars / prolog / al_parse.pro next >
Encoding:
Text File  |  1992-01-09  |  2.2 KB  |  85 lines

  1. /* --------------------------------------------------------------- */
  2. /* PROGRAMM:  AL_PARSER.pro     /     Burkhard Wittek. CIS München */
  3. /* --------------------------------------------------------------- */
  4.  
  5. ausdruck(e,n,m,[x,y]) :- formel(e,n,m,[x,y]).
  6.  
  7. formel(e,n_,m,[x,y]) :- formel_(v,0,p,n,m,[x,z]), rest-formel(p,e,n_,n,[z,y]).
  8.  
  9. formel_(v,w,p,n_,m,[x,y]) :- primary(f,n,m,[x,z]), rest-formel_(v,w,f,p,n_,n,[z,y]).
  10.  
  11. primary([o-a,p],n,m,[x,y]) :-
  12.    wort(o,[x,z]),
  13.    junktor(4,o,o-a),
  14.    primary(p,n,m,[z,y]).
  15. primary(e,n,m,[x,y]) :-
  16.    wort('(',[x,z]),
  17.    ausdruck(e,n,m,[z,t]),
  18.    wort(')',[t,y]).
  19. primary(q,n,m,[x,y]) :-
  20.    wort(p,[x,y]),
  21.    diff-oder-gleich([q,p],m,n).
  22.  
  23. rest-formel_(v_,v,p,[o-a,p,p_],n,m,[x,y]) :-
  24.    wort(o,[x,z]),
  25.    junktor(w,o,o-a),
  26.    eval(v,w),
  27.    formel_(v_,w,p_,n,m,[z,y]).
  28. rest-formel_(v,v,e,e,m,m,[x,x]).
  29.  
  30. rest-formel(p,[o-a,p,p_],n,m,[x,y]) :-
  31.    wort(o,[x,z]),
  32.    junktor(w,o,o-a),
  33.    formel(p_,n,m,[z,y]).
  34. rest-formel(e,e,m,m,[x,x]).
  35.  
  36. eval(v,w) :- val(eql(v,w),1).
  37. eval(v,w) :- val(inf(v,w),1).
  38.  
  39. junktor(4,'┬',neg).
  40. junktor(3,'&',konj).
  41. junktor(2,'#',disj).
  42. junktor(1,']',re-impl).
  43. junktor(1,'[',li-impl).
  44.  
  45. wort(a,[a;x,x]).
  46.  
  47. diff-oder-gleich([k_,n],nil,[k_,n];nil).
  48. diff-oder-gleich([k,n],[k,m];q,[k,m];q) :- eq(n,m).
  49. diff-oder-gleich([k,n],[k_,m];q,[k_,m];p) :-
  50.    dif(n,m),
  51.    diff-oder-gleich([k,n],q,p).
  52.  
  53. lesen(nil) :- next-char_('.') / in-char_('.').
  54. lesen(a;b) :- in-ident(a) / lesen(b).
  55. lesen(a;b) :- in-char_(a), lesen(b).
  56.  
  57. terminologie :-
  58.    line,
  59.    write('Junktoren:   &  Konjunktion'),
  60.    write('             #  Disjunktion'),
  61.    write('             ]  Implikation (rechts-gerichtet)'),
  62.    write('             [  Implikation (links-gerichtet)'),
  63.    write('             ┬  Negation    (ASCII 194)'),
  64.    line,
  65.    write('Atome:       alphabetische Einzel-Zeichen oder Zeichenfolgen').
  66.  
  67. al :-
  68.    terminologie,
  69.    repeat,
  70.    line,
  71.    write('Ausdruck:   '),
  72.    lesen(p),
  73.    analysiere(p,e),
  74.    write('Semantik:   '),
  75.    outl(e),
  76.    fail.
  77.  
  78. /* repeat :-. */
  79. /* repeat :- repeat. */
  80.  
  81. analysiere(p,e) :- ausdruck(e,n,nil,[p,nil]).
  82. analysiere(p,e) :- write('...  ist nicht wohlgeformt'), fail.
  83.  
  84.  
  85.