Next: A sintaxe das DCGs Up: Gramáticas Previous: As gramáticas de cláusulas

As DCGs como analisadores sintácticos de uma língua natural

Muitas linguagens de programação não são apropriadas para transformar gramáticas em analisadores sintácticos de língua natural. O Prolog, contudo, é uma linguagem de programação que se presta a isso. Os programas escritos na notação DCG são automaticamente convertidos em cláusulas Prolog quando a base de conhecimento é consultada. O interpretador de Prolog traduz cada regra DCG numa cláusula que ele pode compreender. O operador -> é transformado em :-. Uma solução seria transformar uma regra da DCG como

         frase --> sintagma_nominal, sintagma_verbal.

na cláusula

         frase(F) :- sintagma_nominal(SN),
                     sintagma_verbal(SV),
                     append(SN,SV,F).

É esta de facto a ideia mas, por razões de eficiência, os interpretadores não a implementam assim. Os símbolos não terminais são transformados em predicados com dois argumentos adicionais. O primeiro argumento irá corresponder à lista de palavras de entrada e o argumento final à lista com os elementos que restam depois da chamada ao predicado ser feita. Assim a regra da DCG acima será transformada internamente na cláusula

         frase(A,B) :-
           sintagma_nominal(A,C), sintagma_verbal(C,B).

A DCG acima (que aceita a frase ``o homem vira o disco'') é equivalente ao seguinte programa Prolog:

         frase(L1,L3) :-
           sintagma_nominal(L1,L2), sintagma_verbal(L2,L3).
         sintagma_nominal(L1,L3) :-
           determinante(L1,L2), nome(L2,L3).
         sintagma_verbal(L1,L3) :-
           verbo(L1,L2), sintagma_nominal(L2,L3).
         determinante([o|R],R).
         nome([homem|R],R).
         nome([disco|R],R).
         verbo([vira|R],R).




Next: A sintaxe das DCGs Up: Gramáticas Previous: As gramáticas de cláusulas


1999-05-26