Aalborg den 11.03.2003

Kompilerkonstruktion: Semantisk analyse

Semantisk analyse fokuserer meget på type check. Her checks at operatorer bliver brugt på de rigtige argumenter. For at give et par eksempler

Når type checket udføres, laves der utrolig mange opslag i symboltabellen for f.eks. at finde ud af, en variabels type eller værdi. Det er derfor vigtigt at sådanne opslag er implementeret effektivt. Af denne grund indeholder kapitel 5 mange detaljer om, hvordan en symboltabel realiseres.

Litteratur

Appel Kap 5

Læsevejledning

I sektion 5.1 diskuteres symboltabeller og hvordan disse implementeres. I skal  med høj sandsynlighed anvende en symboltabel i jeres projekt. De første par sider forklarer, hvorledes symboltabellen er med til at håndhæve scope reglerne i et programmeringssprog, altså hvilke variable, metoder, og klaser der er tilgængelig på et hvert vilkårligt sted i et MiniJava program. Det er væsentlig at bemærke, at variable med samme navn men fra forskellige scopes kan "skygge" for hinanden, som de to a variable i programmet på side 104 i bogen.

I sektion 5.2 diskuteres, hvorledes typecheck kan implementeres i MiniJava. Dette giver et eksempel på, hvordan denne væsentlige del af den semantisk analyse kan implementeres. Bemærk at typechecket implementeres i to faser. I første fase bygges symboltabellen op for det program der kompileres. I den anden fase laves så det faktiske typecheck. Det er sandsynligvis hurtigere at gøre det i en fase, men da der kan lave forward references i MiniJava (og i Java) er det væsentligt simplere at lave typechecket i to faser. Man har altså reduceret kompleksiteten på bekostning af effektiviteten (hvilket jeg også vil tror er en "god handel" for jeres projekter). Bemærk at visitor design mønsteret fra sidste uge dukker op igen når det gælder implementation af typecheck.

Opgaver

A) Implementer en symboltabel som i Program 5.2 side 106 i bogen, hvor i kan gemme de forskellige konstruktioner der er i det sprog i implementerer og som skal gemmes i en symboltabel for at kunne lave semantisk analyse. Som et eksempel for MiniJava skal følgende sproglige konstruktion gemmes i symboltabellen.

Det skal være muligt at addere og slette de forskellige konstruktioner fra symboltabellen. Ligeledes skal det kunne checkes om en konstruktion allerede er gemt i symboltabellen.

B) Til næste seminar den 21. og 22. marts skal i lave en statusrapport for jeres projekt således i kan mundtlig fremlægge:

Venlig hilsen

Kristian Torp
torp (at) cs (dot) auc (dot) dk