Aalborg den 06.02.2003
Kompilerkonstruktion: Brev 1 Introduktion
Velkommen til kurset i kompilerekonstruktion. Dette brev rummer udover
nogle praktiske oplysninger en læsevejledning til kursets første
materiale og giver tilhørende opgaver. Jeg vil udsende tolv sådanne
brev een gang om ugen.
Litteratur
Appel kapitel 1 "Introduction" og Sethi kapitel 1 "The Role of
Programming Langauges". Bogen har jeg fået at vide findes i boghandlen. Jeg
har givet Allan Dresling en kopi af Sethis bog kapitel 1 i kopivenligt format.
Læsevejledning
Læsevejledning til Appel kapitel 1
For at løse et kompleks problem kan man dele det nede i flere mindre
problemer, der hver især er nemmere at løse. Sådan en
divide-and-conquer løsningsmodel anvendes også i konstruktionen af en
kompiler, hvor den deles op i flere faser. Denne gang kigger vi
overordnet på alle faserne. Vi vil i løbet af de næste gange se på de
flere detaljer i hver af faserne.
Figur 1.1 giver et god overblik over faserne i en kompiler. Faserne
frem til og med Canonicalize kaldes front-enden fordi disse har
mest med source programmet at gøre. Tilsvarende kaldes de resterende
faser back-enden fordi de har mest target sproget at gøre.
Bemærk oplysninger der er om diverse værktøjer (tools) til
kompilerkonstruktion. Vi gider ikke at opfinde den dybe tallerken
igen, så vi vil i kurset i vid udstrækning bruge værktøjer, der gør
det nemmere for os at implementere en kompiler. Dette drejer sig om
værktøjerne JavaCC og SableCC disse har høj relevans for jeres
projekter. Der er links til disse værktøjer fra link-siden.
Der bruges i dagens tekster flere gange begrebet en grammatik. Dette
er meget central for kurset. Der er et simple eksempel på en grammatik
i sektion 1.3. Da de grammatiker vi ser på alle kan repræsenteres
vha. en træstruktur er den en datastruktur der vil blive bruget meget.
Et større eksempel på en grammatik findes i bogens appendiks A for sproget MiniJava. Bemærk det linke der er til en online og meget god
bog om Java (Thinking in Java 3rd Edition) hvis du vil vide mere om
selve Java sproget.
Sektionen "Programming Style" fortæller, hvordan man kan implementere
en grammatik i Java. Det er godt det der står der, men kan være lidt
besværligt at forstå på nuværende tidspunkt (vi vender tilbage til det
senere i kurset).
Bemærk program afsnittet pp. 11, der omhandler hvordan man
implementere en kompiler. Igen kan dette være lidt svært at forstå på
nuværende tidspunkt, men det er relevant for jeres projekt.
Læsevejledning til Sethi kapitel 1
Moralen af sektion 1.1 er at maskine kode netop er for maskiner. For
at mennesker skal kunne bruge maskiner skal vi bruge et højniveau
sprog. Det er så en kompilers opgave at oversætte højniveau sproget
til maskine kode.
I sektion 1.3 introduceres fire forskellige
programmeringsparadigmer. I er allerede bekendt med det imperative
paradigme fra f.eks. C, pascal, Basic, Perl, etc. I kender måske også
allerede til det objekt-orienterede paradigme fra f.eks. C++,
Smalltalk, etc., ellers vil I lære en del i dette kursus, da Java
tilhører det paradigme. De to øvrige paradigmer behandler vi kun perifert i kurset.
Oversættelse versus fortolkning er emnet i sektion 1.4. Der har være
"religiøse" stridigheder hvad der er bedst. I dag er skellet visket
meget ud f.eks. oversættes først Java programmer og bagefter fortolkes
de.
Opgaver
-
Lav en liste over de programmeringssprog I kender og klassificer i forhold
til de fire programmerings paradigmer som Sethi beskriver.
-
Et source program kan enten kompileres eller fortolkes. Beskriv fordele og ulemper
ved både kompilering og fortolkning.
-
Download og installer Java Developers Kit (JDK) Standard Edition 1.4.1 på din lokale pc.
Ligeledes download og installer dokumentation til for JDK'en. Links til begge kan
findes
på link siden.
-
Sethi opgave 1.4 (Jeres favorit sprog bør være Java her :-)).
-
Sethi opgave 1.5.
Om at gennemføre kurset
Det viser sig, at det kan være svært at gennemføre et kursus som
dette. Det skyldes typisk ikke sværhedsgraden af stoffet, at mange
falder fra. Derimod skyldes det oftest, at man ikke løbende under
kurset får læst den anviste litteratur og får prøvet kræfter med de
tilhørende opgaver.
Deltagelse i seminarerne er vigtigt. Der har man ro og fred til at
arbejde med stoffet hel dagen. Og det giver motivation til at
fortsætte, når man kommer hjem. Et andet middel til at holde gejsten
oppe er løbende at kommunikere med mig og/eller andre deltagere.
For at summe op: Det er væsentligt at man løbende læser det materiale,
som anvises. Specielt er det væsentligt at have set på materialet, der
dækkes i et seminar før det afholdes. Det betyder ikke, at I skal
forstå alle detaljerne før seminaret, men kan stille spørgsmål om de
detaljer I ikke forstår!
Venlig hilsen
Kristian Torp