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

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