DCG staat voor Definite Clause Grammar.
Een DCG bestaat uit een verzameling regels die min of meer
te vergelijken zijn met herschrijfregels of opbouwregels, met dien verstande
dat hierbij nog variabelen geünificeerd kunnen worden.
Een DCG-regel kan de volgende vormen aannemen:
- moeder > alternatief1; ... ; alternatiefn.
- moeder(VAR*) > dochter1(VAR*), ... , dochtern(VAR*).
- moeder > [terminaal].
De bouwsteen is een predikaatnaam, een 'functor' in Prolog-termen, eventueel
gevolgd door een of meer variabelen.
Aan de linkerkant van de herschrijfpijl is steeds de predikaatnaam van de
moederknoop. Aan de rechterkant ervan staan de predikaatnamen van
nul of meer dochters, waarbij aangrenzende dochters gescheiden worden door
een komma. Alternatieven worden gescheiden door punt-komma's.
Non-terminale knopen worden steeds weer herschreven totdat een moederknoop
wordt herschreven in een terminale dochter, weergegeven tussen rechte
haakjes [...]. In de haakjes- of boomstructuren zijn de terminale symbolen
de eindknopen, in dit geval de lexicale eenheden (woorden) van de zin.
Voor het doorgeven en sturen van waarden van variabelen speelt unificatie
een belangrijke rol.
Unificatie is altijd binnen een locaal domein:
alleen binnen een regel, waarin de relatie van moeder en
directe dochters is weergegeven, unificeren gelijke variabelnamen.
Dus in de regel:
| | np(GETAL) | > noun(GETAL).
|
unificeren de twee variabelen bij respectievelijk 'np' en 'noun',
omdat hier de variabelnaam van beide variabele gelijk is.
Bij unificatie moet de waarde van de variabele GETAL bij 'np' dan ook
gelijk zijn aan de waarde van variabele GETAL bij 'noun'.
Als alles unificeerbaar is tijdens het parseren en de input-lijst verwerkt
is, dan wordt minimaal één analyse opgeleverd (het kunnen
er ook meer zijn).
De boomstructuur wordt opgeleverd door in iedere DCG-regel een
variabele op te nemen die telkens recursief de locale boomstructuur
(moeder dochters) in de vorm van een haakjesstructuur meeneemt.
Bijvoorbeeld:
| | np(np(DET,NOUN)) | > det(DET), noun(NOUN).
|
| | det(det(het)) | > [het].
|
| | noun(noun(boek)) | > [boek].
|
Deze TREE-variabele moeten we dus eerder als een administratieve variabele
beschouwen: het houdt de geparseerde structuur bij en slaat die in de vorm
van een haakjesstructuur op.
Om deze haakjesstructuur verenigbaar te kunnen maken met het formaat
van de haakjesstructuur zoals in GRAMTSY \footnote{GRAMTSY is een
Grammaticaal Transformationeel Systeem, ontwikkeld door P.A. Coppen.},
scheid ik de features duidelijk van de categorie-namen door deze features
op te nemen onder de naam feat.
Via conversie-regels (DCG-to-GRAMTSY) worden de features onder feat
in een featurebundel fb<...> geplaatst zoals dat het geval is in GRAMTSY.
Met ARBOR, een boomtekenprogramma dat is ontwikkeld door P.A. Coppen,
kunnen de boomstructuren worden getoond van de haakjesstructuren
in GRAMTSY-formaat.
Hieronder zal ik de algemene opzet van mijn implementatie uiteenzetten.
De kern is hier hoe subcategorisatie daarin is verwerkt is en wat daarbij
de uitgangspunten zijn.