Nada

Laboration 2:
Syntax och parsning

Laboration torsdag 20 september 2001, 15-17 i Matsalen

Anders Green och Ola Knutsson


Syfte

Syftet med labben är att ge exempel på hur grammatiska särdrag kan analyseras och implementeras för ett svenskt fragment.

Uppgift 1: En enkel grammatik i DCG

I denna uppgift skall du undersöka en enkel svensk grammatik skriven i DCG-notation i Prolog. (här finns en lathund för Prolog). Starta Prolog genom att skriva sicstus vid Unix-prompten. Ett viktigt mål är att du skall förstå särdragens viktiga roll i en grammatik och vad som händer när man lägger till eller tar bort ett särdrag.

Använd gärna trace-funktionen i prolog (starta med 'trace') för att undersöka programmets beteende.

Skriv följande för att test satsen 'kalle ger lisa en bok':
?- s(Tree, [kalle,ger,lisa, en,bok],[]). DCG-grammatiken i swedcg.pl genererar följande meningar:

kalle ger lisa boken

kalle ger lisa böckerna

kalle ger lisa en bok

kalle ser lisa

kalle ser en bok

?en bok ser kalle (syntaktisk korrekt men semantiskt tveksam)

men inte dessa:

*kalle ger lisa bok

*kalle ser bok

Studera DCG-grammatiken, vad gör den? Vilka strategier används av den parser som genereras? (bredden-först, djupet-först, botten-upp, toppen-ner?)

Del 2: Utöka en enkel grammatik i Prolog

Din uppgift är att utöka en grammatik och ett lexikon i swegram.pl så att grammatiken genererar samma satser som DCG-grammatiken i uppgift 1. Grammatiken skall parsas med botten-upp-parsern i bup.pl eller med toppen-ner-parsern i top_down.pl. För att parsa en sats skriver du:

?- parse([kalle,ger,lisa, en,bok],Tree).

När du har utvidgat grammatiken och lexikonet skall grammatiken generera samma satser som DCG-grammatiken i del 1 ovan. Använd gärna predikatet test för att testa vilka satser som genereras.

Frivillig uppgift med Talk

Talk är ett enkelt fråga-svar-program. Du lägger själv in svaren i systemet med satser som "Bertrand wrote principia" och "Bertrand is a philosopher" och får svar genom att skriva "Who wrote principia" och så vidare. Din uppgift blir att undersöka Talks styrka och svagheter. Du laddar Talk med consult('talk.pl'). Med predikatet main_loop startas själva dialogen.

Redovisning

Uppgifterna ska redovisas muntligt eller skriftligt vid laborationstillfället (vilket krävs för att du ska få en bonuspoäng till tentan för den här labben) eller senare (då genom att skicka lösningen med epost till knutsson@nada.kth.se) i text-, html-, pdf- eller ps-format.

^ Upp till kursplanen.


Sidansvarig: Ola Knutsson <knutsson@nada.kth.se>
Senast ändrad 20 september 2001
Tekniskt stöd: <webmaster@nada.kth.se>