a
er en variabel af type String
i Java og b
er af typen int
, så er kommanden b = a + 100
forkert i Java fordi +
operatoren ikke kan tage et argument af typen String
og lægge sammen et tal af typen int
.
if (a) {System.out.println("True");} else { System.out.println("False");}
her må
variablen a
være af typen boolean
.
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.
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