Obligatorisk oppgave nr 1
Leveringsfrist mandag 7. oktober klokken 14.00
Oppgaven går ut på å gjøre ferdig en kompilator med kjøresystem for
programmeringsspråket Logla; programmert i Java. Mesteparten
er laget på forhånd, og din oppgave er å utvide med de delene som har
med kjøresystemet å gjøre.
Det som er litt spesielt her, er at problemet er å forstå et program
så godt at man kan finne ut hva som må gjøres for å fullføre
det. Selve programmeringsarbeidet tar ganske kort tid.
Den obligatoriske oppgaven er beregnet løst individuelt, men man kan
også gå sammen to og to og levere en felles besvarelse.
Nærmere beskrivelse
På filen
~in211/www_docs/Oblig1/logla.pdf
finnes en beskrivelse av programmeringsspråket Logla. På det samme
området finnes også følgende filer:
- Scanner.java
- er en komplett skanner for Logla.
- Parser.java
- er en halvferdig parser.
- Computer.java
- er en nesten ferdig kodesimulator.
Nærmere beskrivelse av Java-klassene finnes i kildekoden.
Oppgaven er altså å skrive de delene som mangler. Husk å markere
tydelig (for eksempel med kommentarer) hva som er endret. Oppgi også
hvor de kjørbare class-filene ligger slik at gruppelæreren kan teste
programmet.
Parseren
Parseren er som sagt ferdig med unntak av to ting
- binding av variabelnavn, og
- generering av kode.
Binding av variabelnavn
For å kunne binde forekomster av variabelnavn til deres deklarasjon,
må man under parseringen lage et tre av de deklarasjoner som for
øyeblikket er synlige, og lete i det hver gang man skal binde et navn.
Man er interessert i å finne
- hvor mange blokker må man gå ut for å finne deklarasjonen, og
- hva variabelens relative adresse er i sin blokk.
Hvis brukeren refererer en variabel som ikke er tilgjengelig, skal
parseren gi en feilmelding.
Husk også å gi feilmelding om samme navn er deklarert flere ganger i
samme blokk, eller om brukeren prøver å kalle «hovedprogrammet».
Kodesimulatoren
Simulatoren (klassene Computer og LoglaComputer) er
ferdige, med unntak av de to metodene enterAct og
leaveAct. Skriv dem.
Filen Computer.java inneholder
også et eksempel på ferdig generert kode.
Eksempler
På området ~in211/www_docs/Oblig1/Eksempler/
finnes diverse eksempler på Logla-programmer.
2. september 2002