:- multifile ==> /2. :- multifile ==> /3. :- multifile lex_rep /3. :- multifile lex_error /3. :- multifile lex_rep /4. %--------------------------------------------------------------------- % DICION"ARIO portugues %--------------------------------------------------------------------- lex ! Cat*[] *Ling ==> []. lex ! Cat*[H|T]*Ling ==> [lex(H,Cat,H,Ling)| Tail] :- rewrite(Cat*T*Ling,Tail,lex). lex ! cn(X) ==> lex(X,cn,X::_,port). lex ! adjm(X) ==> lex(X,adj(a,m,s),a1(X),port). % adjectivos masculinos lex ! adjn(X) ==> lex(X,adj(a,_,s),a1(X),port). % adjectivos sem genero lex ! Cla::Inst ==> lex(Inst,pn,Cla::Inst,port). lex ! [X|L] = Z ==> lex_rep(X,L,Z,port). :- begin(lex). %--------------------------------------------------------------------- v(intr,inf)*[ladrar,comer,cantar]*port. %--------------------------------------------------------------------- cn(cão). cn(casa). cn(galo). cn(pessoa). cn(cidade). %--------------------------------------------------------------------- adjm(velho). adjm(novo). adjm(pequeno). adjn(grande). adjn(alegre). adjn(triste). %--------------------------------------------------------------------- pessoa::joão. cidade::barcelos. %--------------------------------------------------------------------- adv(n)*[não]*port. adv(c)*[mais,menos]*port. adv(q)*[muito,pouco]*port. adv(t)*[hoje,ontem,agora,amanhã]*port. %--------------------------------------------------------------------- prep*[de,em,com]*port. %--------------------------------------------------------------------- art*[o,um,todo]*port. %--------------------------------------------------------------------- lex(que,relp,que,port). lex(cujo,relp,cujo,port). lex(que,ip,que,port). lex(qual,ip,qual,port). %--------------------------------------------------------------------- lex(e,conj,e,port). lex(ou,conj,ou,port). lex(como,conj,como,port). %???? lex((?),(?),(?),port). lex(X,num,X,_) :- integer(X). %--------------------------------------------------------------------- [maior|S] = [mais, grande|S]. [menor|S] = [mais, pequeno|S]. [quem|S] = [pessoa,que|S]. [do|S] = [lex(de,prep,de),lex(o,art,o)|S]. [no|S] = [lex(em,prep,em),lex(o,art,o)|S]. lex_error(X,cn,ind(X)::_). lex_error(X,pn,_::ind(X)). lex_error(X,adj(_,_,_),ind(X)). :- end(lex). lex(lex(_,Cat,Sem),Cat,Sem,_) :- !. lex(P,Cat,Sem,Ling) :- stem(P,Cat,Sem,_,_,_,Ling).