Informasjon om obliger i INF5110
Denne siden inneholder informasjon om obligene i INF5110 v�ren 2006.
Innhold
- Oblig 1
- Oblig 2
- FAQ
- Installasjon av Antlr
- Eksempler
- Notat om �rets verkt�yvalg (bakgrunn og sammenlikningsgrunnlag med andre verkt�y)
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:
- Anf�rselstegn rundt java-kommandoen for at python skal oppfatte hele kommandoen som ett argument.
- Juster klassestien til din lokale installasjon og katalogstruktur (etter "-classpath"), samt klassenavnet p� ditt analyseprogram ("dissent" over).
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:
- Multiple deklarasjoner av ett navn i samme skop m� detekteres.
- Typekonvertering: int is-a float, int kan forfremmes til float i aritmetiske uttrykk, returverdier, og som aktuelt argumentuttrykk i funksjonskall.
-
Main-funksjonen
-
Funksjonsdeklarasjonen til
Main
, m� finnes p� �verste blokkniv� av programmet. -
Signaturen m� matche
void Main()
, d.v.s. ingen argumenter og ingen returverdi.
-
Funksjonsdeklarasjonen til
-
Funksjonsdeklarasjoners returverdi er:
void
, eller- type i symboltabellen (predefinert eller brukerdefinert struct)
-
Stmts
-
AssignStmt
- Variabelen p� venstresiden m� v�re deklarert.
- Typene p� vs. og hs. m� v�re like, etter evt. typekonvertering.
-
ReturnStmt
- Forekommer bare i en funksjonsblokk (en FuncDecls liste av Stmts), ikke i de anonyme blokkene til IfStmts og WhileStmts.
-
Typen til uttrykket stemmer overens med funksjonens
deklarerte type. Merk ogs� s�rtilfelle med void returverdi,
da blir argumenter til
return
-setningen en feil.
-
WhileStmt: m� ha en betingelse av typen
bool
. -
IfStmt: m� ha en betingelse av typen
bool
.
-
AssignStmt
-
Exps
- NewExp: argumentet m� v�re deklarert som en struct-type.
- Literals: M� v�re av en de forh�ndsdefinerte typene i spr�ket: float, int, string, bool eller null.
- Bin�re uttrykk (felles for alle operatorene bortsett fra negasjon) m� ha samme typer, etter evt. typeforfremming, p� begge sider av operatoren.
- Aritmetiske uttrykk: som for bin�re uttrykk, men typene m� ogs� begrenses til aritmetiske (int eller float).
- Logiske uttrykk (med "&&", "||" eller "!"): begge operander m� v�re av typen bool.
-
CallStmt
- Navnet som kalles m� v�re deklarert som funksjon.
- Kallet m� ha samme antall aktualparametre som formalparametre.
- Aktualparametrene m� ha samme type (eller mulig � tilordne) som formalparametrene.
- Bruk av referanser ("ref") m� stemme overens med funksjondeklarasjonen.
-
Var
- Evt. strukt-type m� v�re deklarert.
- Navnet m� v�re deklarert.
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):
- Last ned siste versjon (2.7.6) av Antlr
- Pakkes ut med:
$ tar xzvf antlr-2.7.6.tar.gz
-
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:
- 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"/>
- 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 viaimportVocab
-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 � overstyreLLkParser.reportError
. - Exp.java
-
Grensesnittet til toppniv�-noden i
AmbigiousExp
s AST. - BinaryExp.java
-
Impl. av en AST-node for bin�re uttrykk (skulle egentlig v�rt,
mer presist, artimetiske uttrykk) i
AmbigiousExp
s grammatikk. - NumberExp.java
-
AST-node for talluttrykk fra
AmbigiousExp
s 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 fleksibelmain
, som h�ndterer stdin eller en liste inputfiler, og setter filnavnet i parseren (for at std. feilh�ndtering prefikser meldinger med filnavnet).
Sven-J�rgen Karlsen