Les Gramàtiques de Claus Definides (DCGs) són una característica poderosa de Prolog que permet descriure gramàtiques de manera clara i concisa. Són especialment útils per al processament de llenguatges naturals i la generació de parsers.

Què són les DCGs?

Les DCGs són una extensió de Prolog que permet definir regles gramaticals utilitzant una sintaxi més llegible i natural. Aquestes regles es poden utilitzar per analitzar o generar seqüències de símbols, com ara cadenes de text.

Avantatges de les DCGs:

  • Claredat: Les regles gramaticals es poden escriure de manera més llegible.
  • Integració: Les DCGs s'integren perfectament amb la resta del llenguatge Prolog.
  • Potència: Permeten definir gramàtiques complexes de manera senzilla.

Sintaxi de les DCGs

La sintaxi bàsica d'una DCG en Prolog utilitza l'operador --> per definir regles. A continuació es mostra un exemple simple d'una gramàtica que reconeix una seqüència de lletres 'a' seguides de lletres 'b':

s --> [].
s --> [a], s, [b].

Explicació del codi:

  • s --> [].: Aquesta regla indica que una seqüència buida és una seqüència vàlida.
  • s --> [a], s, [b].: Aquesta regla indica que una seqüència que comença amb 'a', seguida d'una altra seqüència s i acabada amb 'b' és vàlida.

Exemple Pràctic

Vegem un exemple més complet d'una gramàtica que reconeix expressions aritmètiques simples:

expr --> term.
expr --> term, [+], expr.

term --> factor.
term --> factor, [*], term.

factor --> [X], { number(X) }.
factor --> ['('], expr, [')'].

Explicació del codi:

  • expr --> term.: Una expressió (expr) pot ser un terme (term).
  • expr --> term, [+], expr.: Una expressió pot ser un terme seguit d'un signe de suma i una altra expressió.
  • term --> factor.: Un terme pot ser un factor (factor).
  • term --> factor, [*], term.: Un terme pot ser un factor seguit d'un signe de multiplicació i un altre terme.
  • factor --> [X], { number(X) }.: Un factor pot ser un nombre.
  • factor --> ['('], expr, [')']: Un factor pot ser una expressió entre parèntesis.

Exercicis Pràctics

Exercici 1: Reconèixer Nombres Binàris

Defineix una DCG que reconegui nombres binaris (seqüències de 0s i 1s).

binary --> [].
binary --> [0], binary.
binary --> [1], binary.

Exercici 2: Reconèixer Nombres Naturals

Defineix una DCG que reconegui nombres naturals (seqüències de dígits).

digit(D) --> [D], { member(D, [0,1,2,3,4,5,6,7,8,9]) }.
natural --> digit(_).
natural --> digit(_), natural.

Exercici 3: Reconèixer Expressions Aritmètiques amb Restes

Amplia l'exemple d'expressions aritmètiques per incloure la resta (-).

expr --> term.
expr --> term, [+], expr.
expr --> term, [-], expr.

term --> factor.
term --> factor, [*], term.

factor --> [X], { number(X) }.
factor --> ['('], expr, [')'].

Resum

Les DCGs són una eina poderosa en Prolog per definir i treballar amb gramàtiques. Permeten descriure regles gramaticals de manera clara i concisa, i s'integren perfectament amb la resta del llenguatge. Amb les DCGs, podem crear parsers i processadors de llenguatges de manera eficient i llegible.

En el següent tema, explorarem la Programació Lògica amb Restriccions, una altra característica avançada de Prolog que ens permet treballar amb problemes de restriccions de manera eficient.

© Copyright 2024. Tots els drets reservats