Informasjon om obliger i INF5110

Denne siden inneholder informasjon om obligene i INF5110 v�ren 2006.

Innhold

Oblig 2

Del to av den obligatoriske oppgaven bygger p� den f�rste delen, og g�r ut p� � implementere kravene til statisk semantikk, beskrevet i spr�knotatet. Kravene til innleverte filer og format er de samme som sist, bortsett fra at det holder med en parser. I tillegg skal resultatene fra kj�ring av en testsuite leveres.

Fristen er torsdag 18. mai.

Testsuiten

Testsuiten er ett python-skript som rapporterer fra kj�ring av analyseprogrammer mot testfiler for Diss. Testene kj�res ved � bruke en kommando som f�lger, med arbeidskatalog der du har pakket ut testene (e.g. "tests"), i ett Unix-skall:

      $ ./runtests.py "java -classpath /sjk/programs/antlr-2.7.6/antlr.jar:../solution/build/classes Dissent"
    

Merk:

Sjekkliste for del to

Under f�lger en sjekkliste for semantikken (merk at det kan v�re flere krav, les ogs� spr�knotatet) i Diss:

Installasjon av Antlr

Jeg har pr�vd � gj�re min installasjon av Antlr lesbar og eksekverbar for alle. Den ligger p�: ~svenjok/programs/antlr-2.7.6/. For � bruke denne, bytt ut alle forekomster av antlr.jar med ~svenjok/programs/antlr-2.7.6/antlr.jar i kommandoer og byggeskript.

Fullversjonen

De som vil installere sj�l, kan bruke f�lgende oppskrift (dette virker ogs� greit p� Windows XP med Cygwin):

  1. Last ned siste versjon (2.7.6) av Antlr
  2. Pakkes ut med:

    $ tar xzvf antlr-2.7.6.tar.gz

  3. Bygges med:
    $ cd antlr-2.7.6/
    $ ./configure --disable-examples
    # "make install" kan ogs� kj�res, hvis du har skriverettigheter til
    # /usr/local/lib .
    $ make 	
    	

Dette produserer antlr-2.7.6/antlr.jar, som trengs for � kj�re verkt�yet og genererte programmer.

Antlr-eksempler

Alle eksemplene kan lastes ned her.

Bruke byggeskriptet p� din egen kode

For � bruke build.xml (krever Ant 1.6.5) p� din egen kode, trenger du bare � bytte ut filnavn i m�let run-antlr, og sette innstillingen antlr.home. � sette antlr.home kan gj�res p� (minst) to m�ter:

  1. Rediger build.xml, bytt ut linja:
    <property name="antlr.home" value="/usr/local/lib"/>
    med
    <property name="antlr.home" value="/ifi/fenris/h05/svenjok/programs/antlr-2.7.6"/>
  2. Overstyres fra kommandolinja:
    $ ant -Dantlr.home=/ifi/fenris/h05/svenjok/programs/antlr-2.7.6

Oversikt over eksemplene

build.xml
Ant-byggeskript for eksemplene.
SimpleExp.g
Arne Maus' enkle uttrykksgrammatikk, fra forelesningen 14.02, formulert i Antlr. Demonstrerer omskriving til h�yrerekursjon, EBNF, enkel main-metode som leser fra std. input, linjetelling i skanneren.
SimpleExpWithAST.g
Samme som SimpleExp.g, men lager ett syntakstre og skriver det ut til std. output. Demonstrerer header-seksjon, gjenbruk av skanneren til SimpleExp.g via importVocab-opsjonen, buildAST-opsjonen og Antlrs operatorer for trebygging.
AmbigiousExp.g
En litt vanskeligere infiks uttrykksgrammatikk, med aksjonskode som bygger ett heterogent AST. Demonstrerer returverdier fra produksjoner, tempor�re variabeldeklarasjoner i initialiseringsaksjoner ("init actions"), labels for � holde terminaler fra skanneren, tilordninger for ta vare p� returverdier fra parsering av andre regler, aksjoner som bygger syntakstrenoder, og import og eksport av token-vokabularer (for at to parsere og en skanner skal bruke samme terminaler).
AmbigiousExpAST.g
Samme som AmbigiousExp.g, men bruker Antlrs AST-operatorer til � bygge treet. Merk at defn. av heterogene AST-typer for terminalene er i en token-seksjon for skanneren, i AmbigiousExp.g. Inneholder ogs� ett eksempel p� en treparser som beregner verdien av uttrykket. I tillegg demonstrerer den deteksjon av parseringsfeil i Antlrs defaulte feilh�ndtering, ved � overstyre LLkParser.reportError.
Exp.java
Grensesnittet til toppniv�-noden i AmbigiousExps AST.
BinaryExp.java
Impl. av en AST-node for bin�re uttrykk (skulle egentlig v�rt, mer presist, artimetiske uttrykk) i AmbigiousExps grammatikk.
NumberExp.java
AST-node for talluttrykk fra AmbigiousExps grammatikk.
LL2.g
Enkelt eksempel p� en grammatikk som trenger to terminaler lookahead. Viser bruk av opsjonen k = 2 p� parserklassen.
NonLLk.g
En variant av ifelse-problemet, l�st med bruk av ett syntaktisk predikat. Viser ogs� gjenbruk av en skanner fra en annen fil, v.h.a. av opsjonen exportVocab, som har omtrent samme effekt som om skanneren var plassert til slutt i samme fil som parseren.
SimpleScanner.g
Standalone skanner i egen fil. Viser hvordan man kan teste skanneren separat i main-metoden.
SimpleXML.g
Forenklet eksempel p� en XML-parser, parser ett lite subsett av gyldig XML. Viser ogs� bruk av protected regler i skanneren (produksjoner som er private for skanneren, og ikke kan kalles fra parseren), og en mer fleksibel main, som h�ndterer stdin eller en liste inputfiler, og setter filnavnet i parseren (for at std. feilh�ndtering prefikser meldinger med filnavnet).
2006-04-20 15:00
Sven-J�rgen Karlsen