Nada

Laboration 2:
Syntax och parsning

Laboration onsdag 12 november 1997

Björn Gambäck

Denna laboration utförs i SICStus. Börja med att starta Emacs och kör M-x run-prolog. Ni får upp SICStus. En fil med namnet filnamn.pl laddas in med

?- [filnamn].

Sådärja. Nu kan ni nog nog med Prolog.

Del 1: Grammatiker i ren Prolog

Gå igenom grammatikerna g2.pl till g4.pl. Dessa (och alla andra filer till labben) hittar du under katalogen /info/spraktek97/labb2.

Testa analys och generering i dessa under SICStus Prolog.

Stega genom en parsning med trace. (och stäng av stegningen med notrace.).

Lägg till det ditransitiva verbet "gave" till g4.pl tillsammans med en regel för att analysera ditransitiva uttryck som "Dr Chan gave MediCenter nurses." (dvs VP -> V NP NP).

Del 2: DCG-grammatiker

Gå igenom DCG:erna dcg1.pl till dcg4.pl och se hur de kompileras till Prologkod (med listing).

Utöka dcg4.pl med prepositionen "i" och en regel VP -> V P NP som kan analysera meningen "kalle snarkar i ett garage".

Del 3: Top-down- och bottom-up-parsning

  1. Provkör de båda parsrarna top_down.pl och bup.pl på grammatiken eng_grammar.pl.
    
    ?- parse([john,sees,mary],K).
    
    
  2. Konstruera en mening som ger bättre resultat - färre härledningssteg, alltså - för bup, och en som visar hur top_down är bättre.

Del 4: Huvudparsning

  1. Provkör parsern head.plhead_grammar.pl.
  2. Jämför grammatiken head_grammar.pl med eng_grammar.pl och tänk igenom hur man skulle behöva skriva om parsern så att den kan hantera eng_grammar.pl istället. Du behöver inte implementera detta.

Redovisning

Visa en körning eller lämna in lösningen skriftligen till Björn.

 

Extrauppgift: Komplexa grammatiker

Del 1: Frågor

Grammatiken eng_gap_grammar.pl är ämnad att hantera förflyttningar med hjälp av "gap threading".
Varför fungerar inte detta för närvarande?

Ladda in grammatiken tillsammans med link-parsern (link.pl).
För att få mer lättlästa utskrifter kan ni även använda utskriftsrutinen i filen pp.pl.

  SICStus 3  #5: Tue Sep 30 11:08:04 EET DST 1997
  | ?- [eng_gap_grammar,link,pp].

Fö att t.ex. analysera meningen "John gives Mary a book in Paris" skriver du
  parse([john,gives,mary,a,book,in,paris],T),pp(T).

Testpredikat:

  parse([whom,did,john,see],T),pp(T).
  parse([what,did,john,see],T),pp(T).
  parse([what,did,john,give,mary],T),pp(T).
  parse([whom,did,john,give,a,book,to],T),pp(T).
* parse([what,did,john,sleep],T),pp(T).

Tips 1: Detta är lika mycket en parsnings- som grammatiklabb. Håll alltså koll på vad länkparsern har för sig och glöm inte bort att länkreglerna är lika viktiga som grammatikreglerna.

Del 2

Välj någon av följande tre uppgifter (givetvis krävs ingen fullständig lösning till någon av dem):
  1. Annat språk
    Skriv en ekvivalent grammatik för något annat språk som du behärskar. Grammatiken ska åtminstone (om relevant för språket) kunna behandla kategorierna N, V, P, DET, VP, NP, PP och S.

  2. Adjektiv och adverb
    Utöka det givna systemet med hantering av adjektiv och några typer av adverb.

  3. Relativsatser och konjunktioner
    Utöka det givna systemet med hantering av enkla relativsatser och konjunktioner.

^ Upp till kursplanen.


Sidansvarig: Björn Gambäck <gamback@nada.kth.se>
Senast ändrad 18 november 1997
Tekniskt stöd: <webmaster@nada.kth.se>