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