home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / lifeos2.zip / LIFE-1.02 / TESTS / LF / CHART_PA.L00 < prev    next >
Text File  |  1996-06-04  |  3KB  |  94 lines

  1. % a top-down chart parser in life
  2. % ge 21 dec 93, 13 jan 94
  3.  
  4. % See ~vanroy/People/Gregor.Erbach
  5.  
  6. % ---------------------------------------------------------------------------
  7. % * Gregor Erbach - Universitaet des Saarlandes - Computational Linguistics
  8. % *
  9. % *         Im Stadtwald - POB 1150 - D-66041 Saarbruecken - Germany
  10. % *
  11. % *   erbach@coli.uni-sb.de * Tel +49/681 302-4117 * Fax +49/681 302-4351
  12. % *
  13. % ---------------------------------------------------------------------------
  14.  
  15. % rules:   rule(lhs => Cat,rhs => List-of-Cat)
  16. % lexicon: lex(Word) -> Cat
  17. % item:    item(begin => B, end => E, cat => C, rest => List-of-Cat)
  18. dynamic(item)?
  19.  
  20. % clear the item database
  21. rec :-
  22.      retract(item),
  23.      fail.
  24. % predict the startsymbol at node 0
  25. rec :-
  26.      predict(node => 0, cat => startsymbol),
  27.      fail.
  28. % scanning
  29. rec(String) :-
  30.      app(X,[Word|_],String),
  31.      add_item(item(begin => N:length(X), 
  32.                    end => N+1, 
  33.                    cat => lex(Word), rest => [])
  34.              ), 
  35.      fail.
  36. % look up results
  37. rec(String,Cat) :-
  38.      item(begin => 0, end => length(String), cat => Cat, rest => []).
  39.  
  40. predict(node => N, cat => C) :-
  41.      \+((item(begin => N, end => N, cat => Cat),  subsumes(Cat,C))),
  42.      rule(lhs => C, rhs => RHS),
  43.      add_item(item(begin => N, end => N, cat => C, rest => RHS)),
  44.      fail.
  45. predict.
  46.  
  47. % assert the item
  48. add_item(Item) :-
  49.      assert(Item),
  50.      fail.
  51. % apply fundamental rule for passive item
  52. add_item(item(begin => Mid, end => E, cat => C, rest => [])) :- 
  53.      item(begin => B, end => M, rest => [C1|Rest], cat => Cat),
  54.      nl, write(unify(M,Mid)),
  55.      M = Mid,  write('   done'), 
  56.      C = C1,
  57.      gc,
  58.      add_item(item(begin => B, end => E, cat => Cat, rest => Rest)),
  59.      fail.
  60. % apply fundamental rule for active item
  61. add_item(item(begin => B, end => Mid, cat => Cat, rest => [F|Rest])) :-
  62.      item(begin => Mid, end => E, cat => F, rest => []),
  63.      add_item(item(begin => B, end => E, cat => Cat, rest => Rest)),
  64.      gc,
  65.      fail.
  66. % predict first category of active item
  67. add_item(item(end => E, rest => [F|_])) :-
  68.      predict(node => E, cat => F).
  69.  
  70. subsumes(X,X).   % not quite correct
  71.  
  72. % append
  73. app([],L,L).
  74. app([X|L1],L2,[X|L3]) :- app(L1,L2,L3).
  75.  
  76. % a mini grammar for testing
  77. startsymbol -> s.
  78.  
  79. rule(lhs => s(Tns),
  80.      rhs => [np(Num), vp(Num,Tns)]).
  81.  
  82. rule(lhs => vp(Num,Tns),
  83.      rhs => [vi(Num,Tns)]).
  84.  
  85. rule(lhs => vp(Num,Tns),
  86.      rhs => [vt(Num,Tns), np(_)]).
  87.  
  88. lex(john) ->  np(sg).
  89. lex(they) -> np(pl).
  90. lex(sleep) -> vi(pl,pres).
  91. lex(sleeps) -> vi(sg,pres).
  92. lex(hit) -> vt(pl,pres).
  93. lex(hits) -> vt(sg,pres).
  94.