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

  1. %
  2. %    Sentence analysis: rules
  3. %
  4.  
  5. person(sing)->3.
  6. person(plur)->6.
  7.  
  8.  
  9. sentence --> noun_phrase(pers=>P), verb_phrase(pers=>P) ?
  10.  
  11. noun_phrase(pers=>P) -->     
  12.             determiner(nb=>N),
  13.             noun_phrase2(pers=>P, nb=>N)
  14.             # P=person(N) ?
  15. noun_phrase(pers=>P) -->     
  16.             noun_phrase2(pers=>P)  ?
  17.  
  18. noun_phrase2(pers=>X:{3;6}) -->
  19.             adjective,noun_phrase2(pers=>X) ?
  20. noun_phrase2(nb=>N, pers=>P) --> 
  21.             noun(nb=>N, pers=>P) ?
  22.  
  23. verb_phrase(pers=>W)  --> 
  24.             verb(pers=>W) ?
  25. verb_phrase(pers=>W)  --> 
  26.             verb(pers=>W),noun_phrase ?
  27. verb_phrase(pers=>W)  --> 
  28.             verb(pers=>W),compl_phrase ?
  29.  
  30. compl_phrase(pers=>P) -->     
  31.             prep,
  32.             noun_phrase(pers=>P)?
  33.             
  34. %
  35. %   Sentence analysis: Vocabulary
  36. %
  37.  
  38. determiner -->     [the] ?
  39. determiner(nb=>sing) --> [a] ?
  40.  
  41. adjective  -->     [decorated] ?
  42. adjective  -->     [quick] ?
  43. adjective  -->     [brown] ?
  44. adjective  -->     [lazy] ?
  45.  
  46. noun(pers=>3) -->     [pieplate] ?
  47. noun(pers=>6) -->     [pieplates] ?
  48. noun(pers=>3) -->     [surprise] ?
  49. noun(pers=>6) -->     [surprises] ?
  50. noun(pers=>2) -->    [you] ?
  51. noun(pers=>3) -->     [fox] ?
  52. noun(pers=>3) -->     [dog] ?
  53.   
  54. verb(pers=>3) -->     [contains] ?
  55. verb(pers=>{1;2;4;5;6}) -->     
  56.                         [contain] ?
  57.   
  58. verb(pers=>3) -->     [jumps] ?
  59. verb(pers=>{1;2;4;5;6}) -->     
  60.                         [jump] ?
  61.  
  62. prep --> [over] ?
  63.  
  64. %
  65. %   Sentence analysis: Output
  66. %
  67.  
  68. writesentence([],true) :- !,
  69.                       nl,
  70.                       write("     is a correct sentence."),nl.
  71. writesentence([],false) :- !,
  72.                       nl,
  73.                       write("     is not a correct sentence."),nl.
  74. writesentence([A|B],Bool) :- write(" ",A), writesentence(B,Bool).
  75.  
  76.  
  77.  
  78. analyse1(List) :- ( sentence(words=>List\\[]), !, nl, writesentence(List,true) ;
  79.                     nl, writesentence(List,false) ).
  80.  
  81. analyse1([the,decorated,pieplate,contains,a,surprise])?
  82. analyse1([the,decorated,pieplates,contain,a,surprise])?
  83. analyse1([the,decorated,pieplates,contains,a,surprise])?
  84. analyse1([you,contain,a,decorated,pieplate])?
  85. analyse1([you,contain,a,decorated,pieplates])?
  86.  
  87.  
  88. %
  89. %   Knuth's attribute grammar: rules
  90. %
  91. z( tree=>z(T1),  v=>V)    -->      l( tree=>T1, v=>V) ?
  92. z( tree=>z(T2,".",T3), v=> V )    
  93.             -->     l( tree=>T2, v=>V1), 
  94.                 ["."], 
  95.                 l( tree=>T3, v=>V2, l=>L) 
  96.                                 # V=(V1+V2*exp(-L*log(2))) ?
  97. l( tree=>l(T4,T5), v=>V , l=>L )    
  98.             -->     b( tree=>T4, v=>V3, s=>S),
  99.                 l( tree=>T5, v=>V4, l=>L1) 
  100.                                 # S=L1, V=V3+V4 , L=L1+1 ?
  101. l( tree=>l(T6), v=>V5, l=>1)    
  102.             -->      b( tree=>T6, v=>V5, s=>S1:0) ?
  103. b( tree=>b(1),  s=> Sv, v=>2^Sv)
  104.             -->      [1] ? 
  105. b( tree=>b(0), v=>0)    -->    [0] ?
  106.  
  107. %
  108. %   Knuth's attribute grammar: Output
  109. %
  110.  
  111. writenumb([],true,Value) :- !, write(" = ",Value),nl.
  112. writenumb([],false) :- !, write(" is not a floating binary number"),nl.
  113. writenumb([A|B],Bool,Value) :- write(A), writenumb(B,Bool,Value).
  114.  
  115. analyse2(List) :- ( z(words=>List\\[],v=>V), !, nl, writenumb(List,true,V);
  116.                     nl, writenumb(List,false) ).
  117.  
  118. analyse2([1,1,1])?
  119. analyse2([1,1,0,1,1,0,1,0,1,1,".",1,1,1,0,1,0,1])?
  120. analyse2([1,2,0,".",1,1,0,1]),nl?
  121.