Opgave 1: Parsing & Semantische Analyse

Deze opgave bestaat uit twee onderdelen. De eerste bestaat uit het schrijven van een parser voor (een subset van) Java. Daarna moeten een aantal semantische analyses worden geprogrammeerd. Deze onderdelen zijn in drieen gehakt, en moeten in drie perioden gemaakt worden.

Parsing

Het schrijven van een parser is uitgebreid aan bod gekomen in het vak Grammatica's en Ontleden. Als kleine herhalingsoefening moet er in dit onderdeel een parser geschreven worden voor Java. We gaan hierbij te werk op dezelfde manier als bij G&O. Dit houdt in dat we eerst een abstracte grammatica definieren in de vorm van een algebraische data definitie. Vervolgens beelden we met behulp van Parsing Combinators Java source-code (een string) af op deze abstracte grammatica.

Bij het maken van dit onderdeel kun je gebruik maken van een artikel over parsing combinators van Jeroen Fokker, en de bijbehorende Gofer source code (parse.gs, zie hieronder). Voor deze opgave is ook de Java specificatie erg handig.

Op het werkcollege is een eerste aanzet gemaakt. Om je wat werk te besparen, hebben we een en ander alvast voor je in een file gezet:

Natuurlijk is de bovenstaande subset nog erg klein, en we claimen ook niet dat hij correct is! Het is alleen bedoeld als voorbeeld.

Je kunt dit voorbeeld testen door gofer op te starten met de bovenstaande gofer scripts:

[joostd@pubhp]-: gofer parse.gs abstract.gs concrete.gs
De testinvoer kan vervolgens geparsed worden met:
? parser "test.java"
De bedoeling is dat de Java subset wordt uitgebreid met Expressies en Statements, die nu nog niet zijn geimplementeerd. Een voorbeeld programma dat de uitgebreidde parser zou moeten kunnen herkennen staat in test2.java

Inleveren

De uitbreidingen moeten worden ingeleverd op vrijdag 13 september.

Inleveren met:

submit ipt 1 files
waarbij files de concrete syntax, de abstracte syntax, en de parser voor de uitbreidingen bevatten.

Semantische Analyse

In dit onderdeel moeten een aantal semantische analyses over de abstrakte struktuur worden geimplementeerd. We zullen dit in een aantal stappen doen.

Je kunt gebruik maken van de uitgebreide abstrakte syntax en de bijbehorende parser (in feite uitgebreide uitwerkingen van de eerste deelopgave). De konkrete syntax beschrijving in EBNF formaat korrespondeert met deze parser.

Semantische Analyse 1

De eerste semantische analyse die geimplementeerd moet worden is de controle of binnen methods de class fields, de parameters van de betreffende method, en de lokale variabelen van die method goed worden gebruikt. Enige nuttige opmerkingen hierbij:

Inleveren

De bovenstaande semantische analyses moeten worden ingeleverd op vrijdag 20 september.

Inleveren wederom met:

submit ipt 2 files

Semantische Analyse 2

De laatste semantische analyses die geimplementeerd moet worden betreffen de object-georienteerde aspecten van Java.

De volgende checks moetenen worden geimplementeerd:

Zaken die je bij dit opderdeel mag vergeten zijn: Merk tenslotte op dat sommige van deze uitbreidingen vereisen dat ook de parser wordt aangepast!

Testen

Oplossingen kunnen getest worden met twee test-files. De eerste, good.java, bevat correcte java code, en zou dus zonder problemen door de samantische analyse moeten komen. De tweede bad.java bevat java code waarin een aantal fouten staan waarvoor de semantische analyse foutmeldingen moet genereren.

Inleveren

De bovenstaande semantische analyses moeten worden ingeleverd op vrijdag 11 oktober (was 4 oktober).

Inleveren met:

submit ipt 3 files

Belangrijk: De inzendingen zullen dit keer automatisch worden getest. Dit heeft enige consequenties voor de vorm waarin moet worden ingeleverd. Daarom worden de volgende eisen gesteld aan de files die worden gesubmit:

Excuses voor deze ietwat gecompliceerde manier van submitten, maar zodoende kan er (hopelijk) niets fout gaan. Het idee is dat we nu eenvoudig automatisch kunnen testen met:
% gofer + java.gp
en vervolgens een java source file kunnen testen met:
? main "test.java"
waarna als het goed is de juiste foutmeldingen worden afgedrukt.



Last updated on Wednesday, 2 October 1996 by Joost van Dijk