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

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 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