/* Gramàtica */ analisi(F,X,Y) :- frase(F,X,Y). frase(reserva(As,D,M,De,F,N)) --> imperativa(As,D,M,De,F,N). frase(reserva(As,D,M,De,F,N)) --> interrogativa(As,D,M,De,F,N). /* Classificació dels dos tipus de frases */ imperativa(As,D,M,De,F,N) --> ordre, cos(As,D,M,De,F,N). interrogativa(As,D,M,De,F,N) --> intobrir, pregunta, cos(As,D,M,De,F,N), inttanc. /* Processament de la llista dels diversos elements en qualsevol ordre */ cos(As,D,M,De,F,N) --> element(As,D,M,De,F,N), cos(As,D,M,De,F,N). cos(As,D,M,De,F,N) --> element(As,D,M,De,F,N). /* Assignatura */ element(As,_2,_3,_4,_5,_6) --> prep(para), assig(As). /* Número d'aules */ element(_1,_2,_3,_4,_5,N) --> numero(N), aula. /* Hora d'inici i finalització*/ element(_1,_2,_3,De,F,_6) --> prep(de), numero(De1), prep(a), numero(F1), temps(De1,F1,De,F). element(_1,_2,_3,De,_5,_6) --> prep(a), det(fem), numero(De1), temps(De1,24,De,_). element(_1,_2,_3,8,12,_6) --> adv(por, manyana). element(_1,_2,_3,12,20,_6) --> adv(por, tarde). /* Dia i mes */ element(_1,D,M,_4,_5,_6) --> det(masc), dia(D), prep(de), mes(M). element(_1,D,M,_4,_5,_6) --> det(masc), dia(D), {mesactual(M)}. element(_1,D,M,_4,_5,_6) --> det(masc), diasem(Dsem), {calendari(Dsem,D,M)}. /* Predicats diversos */ dia(D) --> diaopc, numero(D), {menor(D,32), menor(0,D)}. temps(D,F,D,F) --> [], {menor(D,F)}. temps(D,F,D,F) --> adv(_, mañana), {menor(D,F), menor(F,13)}. temps(D,F,D,F) --> adv(_,tarde), {menor(D,F), menor(12,D)}. temps(D1,F1,D,F) --> adv(_,tarde), {menor(D1,F1), menor(F1,12), suma(D1,12,D), suma(F1,12,F)}. /* Predicats Prolog */ menor(A,B) :- A= formula1opc, [reservame]. ordre --> [reservame], formula2. pregunta --> formula1opc, [puedes,reservar]. pregunta --> [puedes,reservar], fomula2. formula1opc --> [por,favor], comaopc. formula1opc --> []. formula2 --> comaopc, [por,favor], comaopc. intobrir --> ['¿']. inttanc --> ['?']. comaopc --> [',']. comaopc --> []. diaopc --> [dia]. diaopc --> []. aula --> [aula]. aula --> [aulas]. mes(M) --> [M],{mes(M)}. numero(N) --> [N],{integer(N), N>=0}. det(G) --> [W], {det1(W,G)}. prep(P) --> [P],{prep1(P)}. adv(P,N) --> prep(P), det(fem), [N], {adv1(N,fem)}. assig(A) --> [A],{assignat(A)}. assignat(tmia). mes(junio). diasem(miercoles). mesactual(junio). calendari(miercoles,26,junio). prep1(de). prep1(a). prep1(para). prep1(por). det1(el,masc). det1(la,fem). det1(las,fem). adv1(mañana,fem). adv1(tarde,fem).