/* Gramatica na notacao DCG, considerando-se: G = genero, N = numero, sn = sintagma nominal e sv = sintagma verbal */ /* Vocabulario */ adjetivo(masc, sing) --> [bonito]. adjetivo(fem, sing) --> [bonita]. adjetivo(masc, pl) --> [bonitos]. adjetivo(fem, pl) --> [bonitas]. adjetivo(_) --> [fragil]. verbo(sing) --> [eh]. verbo(sing) --> [ama]. verbo(pl) --> [sao]. verbo(pl) --> [amam]. artigo_definido(masc, sing) --> [o]. artigo_definido(fem, sing) --> [a]. artigo_definido(masc, pl) --> [os]. artigo_definido(fem, pl) --> [as]. artigo_indefinido(masc, sing) --> [um]. artigo_indefinido(fem, sing) --> [uma]. artigo_indefinido(masc, pl) --> [uns]. artigo_indefinido(fem, pl) --> [umas]. substantivo(fem, sing) --> [Nome], {pertence(Nome, [mulher, pessoa, mae, brasileira])}. substantivo(masc, sing) --> [Nome], {pertence(Nome, [homem, pai, brasileiro])}. substantivo(fem, pl) --> [Nome], {pertence(Nome, [mulheres, pessoas, maes, brasileiras])}. substantivo(masc, pl) --> [Nome], {pertence(Nome, [homens, pais, brasileiros])}. substantivo_proprio(fem, sing) --> [Nome], {pertence(Nome, [maria, ana])}. substantivo_proprio(masc, sing) --> [Nome], {pertence(Nome, [joao, zeca])}. pertence(X, [X|_]). % se for o primeiro elemento pertence(X, [_|Cauda]):- pertence(X, Cauda). /* Regras gramaticais */ sn(G, N) --> substantivo(G, N). sn(G, N) --> substantivo_proprio(G, N). sn(G, N) --> artigo_definido(G, N), substantivo(G, N). sn(G, N) --> artigo_definido(G, N), substantivo(G, N), adjetivo(G, N). sn(G, N) --> artigo_indefinido(G, N), substantivo(G, N). sn(G, N) --> artigo_indefinido(G, N), substantivo(G, N), adjetivo(G, N). sv(G, N) --> verbo(N). sv(G, N) --> verbo(N), sn(G, N). /* Sentencas */ frase --> sn(G, N), sv(G, N). frase --> sn(G, N), sv(G, N), adjetivo(G, N). % para interrogar: frase(X, []). ou seja, quais sao as possiveis frases X