Extensible Compiler Construction

University dissertation from Department of Computer Science, Lund University

Abstract: Popular Abstract in Swedish Automatisk analys av programkod är ett kärnområde inom datavetenskap. Det mest typiska verktyget inom detta område är en kompilator som översätter källkod till maskinkod, men det finns många likartade verktyg, exempelvis översättning mellan språkdialekter, kontroll av kodkonventioner samt automatisk omstrukturering av kod. Eftersom dessa verktyg gör liknande analyser finns det stora möjligheter att återanvända kod. Denna avhandling behandlar problemställningen hur man kan utveckla verktyg så att god modularitet och utvidgningsbarhet uppnås, med målsättningen att låta flera verktyg utnyttja gemensam programkod. I avhandlingen presenteras en ny teknik, Rewritable Reference Attributed Grammars (ReRAGs), som bygger på ett flertal framgångsrika programvarutekniker: objektorientering, aspektorientering, deklarativ programmering, attributgrammatiker och transformationssystem. ReRAGs kombinerar mekanismer från dessa områden i ett sammanhängande ramverk vilket möjliggör god modularitet och utvidgningsbarhet. Detta gör att man kan dela upp mjukvaran i moduler baserat på olika kriterier, vilket i sin tur möjliggör återanvändning av moduler. Exempel på uppdelningskriterier är: separata analyser som utförs på programkoden, språkutvidgningar som förändrar ett basspråk eller samma indelning som i en språkspecifikation för att underlätta spårbarhet. Med hjälp av ReRAGs kan man beskriva dessa moduler var för sig och automatiskt lösa komplicerade kontextkänsliga beroenden. Vi beskriver en beräkningsalgoritm för ReRAGs som vi har implementerat i kompilatorverktyget JastAdd, där ReRAGs kombineras med Java. Dessutom har vi implementerat en fullständig Java 1.4 kompilator för att utvärdera de möjligheter för modularisering och utvidgningsbarhet som finns i ReRAGs. Vi visar hur man trots svårigheter som blockstruktur, arv, kvalificerade namn och syntaktiska tvetydigheter kan modularisera namnanalys i Java på samma sätt som i den informella språkspecifikationen. Vi har även utvidgat Javakompilatorn med så kallade non-null types som upptäcker felaktig användning av icke-initialiserade pekare redan vid kompileringen. Utvidgningen är helt modulär vilket gör att tekniken kan användas för valfria typsystem där användare själva kan välja önskade kontroller. Teknikerna skalar upp till både fullständiga programspråk och stora program. Vår genererade Javakompilator uppfyller lika många testfall, ur en kompilatortestsvit, som de mest använda kompilatorerna och kan kompilera program som är större än 100.000 rader kod. Dessutom är vår exekverbara specifikation bara två tredjedelar så stor som traditionella handskrivna kompilatorer.

  This dissertation MIGHT be available in PDF-format. Check this page to see if it is available for download.