Hide menu

TDDD16 Compilers and Interpreters

Laboratory Assignments

Deadline

The deadline for the labs is the end of the lecture period, December 15, 2010. You will get 3 exam points if your labs are completed by this date. We expect you to submit your lab reports by that date at the latest. While it will still be possible to submit your lab report to your lab assistant afterwards, we then cannot guarantee that your lab points will be counted as a 2010 result, as we have to prioritize the correction of the exam.

Information

NOTE: In the laboratory material there are some sections marked with Extra Credit Work. Doing these sections will not give you any extra credits, instead you will get 3 exam points if you finish on time, as stated above.

Laboratory material for TDDD16 is available in the course directory /home/TDDD16/lab on the IDA lab computers (not on the web).

There are 4 laboratory assignments. The laboratory instructions (pdf and ps) can be found in the folder /home/TDDD16/lab/doc. One file for each assignment. In the same directory there are also files (pdf and ps) containing information about the skeleton of the compiler you are going to work with as well as information about the language you will compile. The pdf files are also given below.

The four assignments (pdf):
1. Attribute Grammars and Top-Down Parsing
2. Scanner Specification
3. Parser Generators
4. Intermediate Code Generation

Lab Skeleton
Language Specification

Flex Guide
Bison Guide

More information will be given during the lessons.

Some old comments and suggestions (in Swedish)

Här finns ytterligare information och kommentarer:

Laboration 1

Några små tips inför laboration 1.
Om den första omskrivningen av grammatiken blir felaktig, så blir det förstås också fel när den sedan skrivs om för att eliminera vänsterrekursion. Är den grammtiken som ni kodar efter fel, blir det naturligtvis fel även i koden.
Sensmoral: Det är bra att få feedback, innan ni hunnit göra för mycket...
De enda filerna ni skall behöva ändra i är lab1.hh och lab1.cc.
Använd er av den existerande trace-klassen! Användandet står beskrivet i avsnitt 4 "Supporting Programs" i labbinstruktionerna.
I parser klassen behöver ni ett Scanner objekt och ett Token object. Ett par hjälpfunktioner t ex Scan och Expect är nog vettigt att införa. Till sist, förstås, metoderna som implementerar parsningen av icke-terminalerna.

Laboration 2

I labb 2 är det extremt lite "kod" som skall skrivas, typ 15 rader eller så. Däremot ligger det lite tankeverksamhet bakom. Ni behöver läsa in er ordentligt på flex (se nedan). Den enda fil ni skall behöva ändra i är scanner.l.
I dokumentationen till labben står det att modulen prog/gnu måste vara laddad. Tyvärr finns inte den modulen. Om ni istället försöker med misc/gnu kommer ni nog att lyckas bättre.
Ytterligare ett problem med moduler. Modulen prog/gnat ställde till problem för mig. Se till att den inte är laddad, förmodligen måste ni logga ut och in igen efter att ha tagit bort den. Problemet har förmodligen att göra med att gnat-installationen använder en annan, äldre version av gcc, eller att modulen inte sätter upp patharna ordentligt för kompilering med annat än Ada.
Eftersom AnswerBook inte finns installerat lokalt längre, får ni titta hos SUN för att få mer information om lex. (lex är, som beskrivs i labbdokumentationen, SUN's variant av flex.)
Nu har jag lyckats fixa fram flex-manualen i Postscript format. (Obs! Detta är samma information som finns på man-sidan). Den finns även tillgänglig som gzippad Postscript.
Tutorial on flex .

Laboration 3-4

Ni bör köra med gcc version 2.8.1, inte 2.95.2. [2003-11-26]
Testfilen för lab3-4 har orskakat lite förvirring. Den innehåller en liten bug som kompilatorn bör upptäcka. Jag har lagt till en kommentar i test-filen, så att detta tydligare framgår. [1999-03-05]
Tre filer i ~TDDA28/lab/lab3-4 har uppdaterats [1999-02-26]:
    Makefile
    parser.y
    codegen.cc
    
De första två är buggfixar, den senare bara en uppdatering av kommentarerna. De gamla filerna finns kvar med ändelsen .OLD, så ni kan jämföra dem om ni vill. Använd er t ex av /usr/bin/diff.
Eftersom AnswerBook inte finns installerat lokalt längre, får ni titta hos SUN för att få mer information om yacc. (yacc är, som beskrivs i labbdokumentationen, SUN's variant av bison.)
Nu har jag lyckats fixa fram bison-manualen i Postscript format. Den finns även tillgänglig som gzippad Postscript.
Tutorial on bison

Page responsible: Kristian Stavaker
Last updated: 2010-11-25