TOKL = STRING*
EXP=var(STRING);
Plus(EXP,EXP);
Mult(EXP,EXP)
PREDICATES
Run
Tokl(STRING,TOKL)
S_exp(TOKL,TOKL,EXP)
Multexp(TOKL,TOKL,EXP)
Multexp1(TOKL,TOKL,EXP,EXP)
Plusexp(TOKL,TOKL,EXP)
Plusexp1(TOKL,TOKL,EXP,EXP)
Elmexp(TOKL,TOKL,EXP)
GOAL
Run.
CLAUSES
run: makewindow(1,2,7,"",0,0,25,80),
Readln(STR),tokl(STR,TOKL),
S_exp(TOKL,_,EXP), write(EXP),nl.
tokl(STR,[TOK|TOKL]):
Fronttoken(STR,TOK,STR1),
Tokl(STR1,TOKL).
tokl(_,[]).
s_exp(IL,OL,EXP):plusexp(IL,OL,EXP).
plusexp(IL,OL,EXP2):
Multexp(IL,OL1,EXP1),
Plusexp1(OL1,OL,EXP1,EXP2).
plusexp1(["+"|IL],OL,EXP1,EXP3):
Multexp(IL,OL1,EXP2),
Plusexp1(OL1,OL, plus(EXP1,EXP2),EXP3).
Plusexp1(IL,IL,EXP,EXP).
multexp(IL,OL,EXP2):
Elmexp(IL,OL1,EXP1),
Multexp1(OL1,OL,EXP1,EXP2).
multexp1(["*"|IL],OL,EXP1,EXP3):
Elmexp(IL,OL1,EXP2),
Multexp1(OL1,OL, mult(EXP1,EXP2),EXP3).
Multexp1(IL,IL,EXP,EXP).
elmexp([NAME|IL],IL, var(NAME)).
25. , . , , :
<SENTENCE>::= <NOUN PHRASE> <VERB PHRASE>
<NOUN PHRASE>::=<DETERMINER> <noun> <RELATIONAL CLAUSE>
<DETERMINER>::= < > | <determiner>
<RELATIONAL CLAUSE>::= < > | <relative> <VERB PHRASE>
<VERB PHRASE>::= <verb> | <NOUN PHRASE>
:
DATABASE %,
det(STRING) %
noun(STRING) %
rel(STRING) %
verb(STRING) %
DOMAINS %
DETERM = none; determ(STRING)
NOUNP = nounp(DETERM, STRING, RELCL)
RELCL = none; relcl(STRING, VERBP)
SENTENCE = sent(NOUNP, VERBP)
VERBP = verb(STRING); verbp(STRING, NOUNP)
TOKL = STRING*
PREDICATES
Is_det(STRING)
Is_noun(STRING)
Is_rel(STRING)
Is_verb(STRING)
S_determ(TOKL, TOKL, DETERM)
S_nounp(TOKL, TOKL, NOUNP)
S_relcl(TOKL, TOKL, RELCL)
S_sentence(TOKL, TOKL, SENTENCE)
S_verbp(TOKL, TOKL, VERBP)
Tokl(STRING, TOKL)
Tom(TOKL)
Run1
Run2(STRING)
Sen_an
GOAL makewindow(1,6,0,"",0,0,25,80),
sen_an.
CLAUSES
sen_an: write("Try: every man that lives loves a woman"),
readln(LIN), LIN >< "",
|
|
Tokl(LIN,TOKL),
S_sentence(TOKL, _, SENT),
write("PROLOG OBJECT=",SENT," "),
readchar(_),clearwindow,!.
tokl(STR,[TOK|TOKL]):
Fronttoken(STR,TOK,STR1),
Tokl(STR1,TOKL).
tokl(_,[ ]).
s_sentence(TOKL,TOKL2,sent(NOUNP,VERBP)):
S_nounp(TOKL,TOKL1,NOUNP),
S_verbp(TOKL1,TOKL2,VERBP),
TOKL2=[ ],!.
s_sentence(_,_,_):write(">> Sentence not recognized \n"),fail.
%
s_nounp(TOKL,TOKL2,nounp(DETERM,NOUN,RELCL)):
s_determ(TOKL,[NOUN|TOKL1],DETERM),
Is_noun(NOUN),
s_relcl(TOKL1,TOKL2,RELCL).
%
s_determ([DETERM|TOKL],TOKL,determ(DETERM)):