Upp till kursens hemsida.
Aktuell information om 2D1372, Artificiella språk och syntaxanalys
Senaste nytt
Ordinarie tenta 1997-03-01
Omtenta 1997-04-10
Omtenta 1997-08-22
Kursutvärdering
Resultaten från kursenkäten finns här.
Errata
Flera fel i kursboken har rapporterats in och jag har utökat
erratalistan.
LR(1)-tabeller är som ni säkert har märkt svåra att få rätt. Ett nytt
fel i uppgift 5.3 i övningshäftet har upptäckts:
I formeln (5.24) ska I2 bytas mot
I7. Detta får som följd att 2 ska bytas mot 7 för
inmatningen ( i tillstånd 2 i dom två LR(1)-tabellerna på sida 50.
I tillstånd 3 i LR(1)- och LALR(1)-tabellerna hittades ett fel redan
på övning 5, nämligen att r2 skulle bytas mot r1,
vilket leder till att det i LALR(1)-tabellen bara blir en
skiftnings/reduceringskonflikt och ingen reducerings/reduceringskonflikt
för inmatningen ( i tillstånd 3.
Restlabbar
Den som vill redovisa restlabbar ska vända sig till Viggo.
Vid redovisningen måste du ta med aktuella programlistor, samt för labb 5
också en användarhandledning och en kravspecifikation (se uppgiftslydelsen).
Labbresultat
Labbresultat 23 april 1997 finns
här.
Modifierad föreläsningsplanering
Innehållet i dom fyra sista föreläsningarna i kursen är något omkastat.
Följande planering kommer att gälla:
- vecka 7
- F9 hur Yacc fungerar, LR(k), LALR(1) (4.2-4.4)
F10 avancerad Yacc (appendix B.2)
- vecka 8
- F11 språkkonstruktion, intern representation, kodgenerering, optimering,
fortsättningskurser (5.1-5.3)
F12 attributgrammatik, Ox, felhantering (5.4-5.8)
Tillrättaläggande av uppgiftslydelsen för labb 3
Grammatiken i labblydelsen stämmer inte överens med den givna
analysatorn casio.c. Byt därför ut reglerna
expr ::= term
expr ::= term [ '+' term ]
expr ::= term [ '-' term ]
term ::= factor
term ::= factor [ '*' factor ]
term ::= factor [ '/' factor ]
mot
expr ::= term { ('+'|'-') term }
term ::= factor { ('*'|'/') factor }
Rättade labblydelser finns för Postscript
och Acrobat.
Labba i Modula-3 om du vill
Labbarna i kursen kan när det är möjligt göras i valfritt programspråk.
I labblydelserna föreslås språket C eftersom Flex och Bison är avpassade
för just C, men i allmänhet går C++ precis lika bra.
Den som hellre vill använda Modula-3 kan göra det i alla labbar utom
Flexlabben (labb 2).
Kommandot module add modula-3 gör Modula-3-kompilatorn och m3bison
tillgängliga.
Lärare
Kursledare och föreläsare är
Viggo Kann,
viggo@nada.kth.se.
Mottagningstid tisdagar klockan 14.00-15.00.
Övningsassistenter är
Lars Engebretsen,
enge@nada.kth.se (grupp 1)
och Viggo Kann (grupp 2).
Kurslitteratur
Kurslitteraturen ska läsas på egen hand parallellt med kursen. Föreläsningar,
övningar och laborationer täcker endast en del av kursmaterialet.
Det finns en läsanvisning inför tentan.
Kursbok
"T W Parsons: Introduction to compiler construction",
Computer Science Press, New York, 1992, ISBN 0-7167-8261-8.
Pris: 350 kronor i kårbokhandeln.
Det finns en erratalista till boken; den ändrades senast
19 juni 1997.
Kursbunt
- Kursprogram (i stort sett denna text).
- Laborationer.
- En exempelsamling med uppgifter till övningarna.
- Föreläsningsanteckningar (delas ut under kursens gång).
- Tre exempeltentor (1996-03-04, 1996-04-09, 1996-08-30).
Kursbunten kan köpas på första föreläsningen och därefter på Nadas
elevexpedition
för 20 kr.
Papper som delas ut under kursens gång kommer att finnas i en pärm
i hyllan utanför expeditionen.
Fördjupnings- och referenslitteratur
Följande litteratur är det inte nödvändigt att ha eftersom den finns
tillgänglig i Info i Emacs eller på kursens hemsida, men den som är
extra intresserad kan köpa den på Nadas
elevexpedition.
- Manual för Flex, version 2.5 (58 sidor). Pris: 15 kronor.
- Manual för Bison, version 1.24 (106 sidor). Pris: 25 kronor.
- Manual för Ox (58 sidor). Pris: 15 kronor.
Schema
Notera att onsdagsföreläsningarna är i sal K2 och inte i D3 som det står
i KTHs schema.
Schema för vecka 3, 1997
| Tid | Måndag | Tisdag | Onsdag | Torsdag | Fredag |
| 8 | | | Föreläsning K2 | | |
| 9 | | | | | |
| 10 | | | Övning D34,D35 | | |
| 11 | | | | | |
| 12 | | | | | |
| 13 | Föreläsning E3 | | | | |
| 14 | | | | | |
| 15 | | | | | |
| 16 | | | | | |
| 17 | | | | | |
Schema för vecka 4-8, 1997
| Tid | Måndag | Tisdag | Onsdag | Torsdag | Fredag |
| 8 | | | Föreläsning K2 | | |
| 9 | | | | | |
| 10 | | | Övning D34,D35 | | |
| 11 | | | | | |
| 12 | | | | | |
| 13 | Föreläsning E3 | |
Terminalövning Spel-,Sporthallen | | |
| 14 | | | | | |
| 15 | | | | | |
| 16 | | | | | |
| 17 | | | | | |
Schema för vecka 9, 1997
| Tid | Måndag | Tisdag | Onsdag | Torsdag | Fredag |
| 8 | | | | | |
| 9 | | | | | |
| 10 | | | | | |
| 11 | | | | | |
| 12 | | | | | |
| 13 | | |
Terminalövning Spel-,Sporthallen | | |
| 14 | | | | | |
| 15 | | | | | |
| 16 | | | | | |
| 17 | | | | | |
Detaljschema
Följande tabell visar vad som preliminärt kommer att behandlas
under föreläsningarna, övningarna och terminalövningarna.
- vecka 3
- F1 hur en kompilator fungerar i stort (1.1-1.10)
F2 ändliga automater, DFA=NFA, minimal DFA (2.1-2.5, appendix A)
Ö1 automater (uppgift 1.1-1.7)
- vecka 4
- F3 formella språk, reguljära uttryck, RE=DFA, reguljära uttryck i Unix. (2.6-2.10)
F4 Lex, hur Lex fungerar (appendix B.1)
Ö2 reguljära uttryck, Lex (uppgift 2.1, 2.2, 2.5, 2.7)
TÖ1 labb 1: simulering av NFA
- vecka 5
- F5 grammatik, syntaxträd, BNF, grammatik för naturliga språk (3.1.1-3.1.5)
F6 stackautomat (PDA), Turingmaskin (TM), Chomskyhierarkin (3.1.6-3.1.8)
Ö3 grammatiker, PDA, TM (uppgift 1.8, 1.9, 3.1, 3.3-3.5)
TÖ2 labb 2: lexikal analys med Flex
- vecka 6
- F7 uppifrån-och-ner-syntaxanalys, rekursiv medåkning (3.2-3.5)
F8 botten-och-upp-syntaxanalys, Yacc (4.1, appendix B.2)
Ö4 LL-analys, Yacc (uppgift 4.1, 4.2, 4.3, 4.5, 5.4)
TÖ3 labb 3: rekursiv medåkning
- vecka 7
- F9 hur Yacc fungerar, LR(k), LALR(1) (4.2-4.4)
F10 avancerad Yacc (appendix B.2)
Ö5 LR-analys, Yacc (uppgift 5.1-5.3, 5.7)
TÖ4 labb 4: reguljära uttryck med Flex och Bison
- vecka 8
- F11 intern representation, kodgenerering, optimering,
språkkonstruktion (5.1-5.3)
F12 attributgrammatik, Ox, felhantering, fortsättningskurser (5.4-5.8)
Ö6 attributgrammatik, Ox (uppgift 5.5, 5.8, 5.9)
TÖ5 arbete med labb 5
- vecka 9
- TÖ6 labb 5: en valfri översättare
Kursregistrering
Om du vill gå kursen ska du anmäla det i förväg till
kansliet/studievägledningen för ditt utbildningsprogram.
Ingen förhandsanmälan ska göras till Nada. Det finns ingen
platsbegränsning.
Så snart kursen börjat måste du registrera dej på den. Detta görs med
kommandot
res checkin syntax97
på någon av Nadas unixdatorer.
Registrera dej så snart som möjligt efter att kursen börjat!
För din egen skull bör du också ge kommandot
course join syntax97
Detta kommando gör tre saker:
- Du får se eventuella nya meddelanden från kursledaren varje gång du
loggar in.
- Du får kursens användarmiljö, dvs alla initieringar
som kursledaren tycker att kursdeltagarna bör ha görs vid varje inloggning.
- Du får en speciell kurshemsida som startsida i Netscape.
När du är klar med kursen ger du kommandot
course leave syntax97
för att återställa allt.
Laborationer
Labbkursen består av fem laborationer (fyra små och en lite större)
som görs i grupper om högst två
personer. Enstaka labbar får inte sparas till annan kursomgång.
Om du inte fullgör alla fem labbarna inom ett år från kursens slut har
kursledaren rätt att kräva att du gör samtliga labbar i den nya
kursomgången.
Bonuspoäng
Vi tillämpar ett bonussystem för att uppmuntra eleverna att ligga i fas med
undervisningen. För varje labb som redovisas på rätt redovisningstillfälle
erhålls en bonuspoäng. Summan av dessa poäng adderas till den på tentan
uppnådda poängsumman. Detta gäller ett kalenderår räknat från kursstart.
Bonuspoäng kan endast fås det året som labbresultatet rapporteras.
När du är inloggad kan du se vilka labbar du är godkänd på genom att ge
kommandot
res show syntax97
Hederskodex
Grundregeln är att det jobb du gör i kursen (labbar, inlämningsuppgifter,
tentor m.m.) ska du göra själv, förutom att labbarna kan göras
i tvåmannagrupper.
Vid redovisning av labbar ska båda i gruppen kunna redogöra i detalj även för
vad labbkompisen skrivit.
Ibland, speciellt när man skriver program, kan det vara nödvändigt att fråga
någon annan (en kamrat eller en handledare) om hjälp med att hitta fel.
Detta är tillåtet förutsatt att du uppfyller följande villkor.
- Om du fått hjälp med mer än bara någon enstaka rad i programmet
ska du ge ett skriftligt erkännande till den som hjälpte
till, lämpligen i form av en kommentarrad överst i programmet,
som talar om vem som hjälpt dig med vad.
- Du måste förstå hela den färdiga lösningen, även de delar
du fått hjälp med.
Varje annan form av samarbete och utnyttjande av andras
lösningar betraktas som ett brott mot hederskodexen
och kan bestraffas, t ex genom att du förlorar alla bonuspoäng
eller får göra en ny uppgift.
Detta är en översatt och omarbetad version av den hederskodex som används i kursen Introduction to computer science vid Stanford University. Den tillämpas i många av Nadas kurser.
Tentamen
Tid och plats för ordinarietentan är lördag den 1 mars 1997 klockan 8-13 i
sal F31-F33. Första omtentatillfälle är torsdag den 10 april 1997 klockan 14-19
i sal D31.
Tentan består av en teoridel utan hjälpmedel och en problemdel med
kursboken och föreläsningsanteckningarna som hjälpmedel. Hela skrivtiden
är fem timmar. Efter två
timmar måste teoridelen ha lämnats in, men du får gärna göra det tidigare.
För godkänt krävs minst 25 poäng (inklusive maximala 5 poäng
labbonus) av 50 poäng.
Tentaresultatet anslås högst tre veckor efter tentan på institutionens
anslagstavla på plan 3 (rakt under elevexpeditionen).
Klagomål på rättning av tentan lämnas in skriftligen till kursledaren
inom tre veckor från det att tentaresultatet anslagits.
Anmälan till tentan
Du behöver inte anmäla dej till tentan.
(Tentaanmälan var tidigare obligatorisk för D- och E-teknologer
men Nada använder sej inte av detta anmälningssystem längre.)
Kurskatalog
Kursen har en katalog på Unixdatorerna:
/info/syntax97.
På denna katalog finns textfiler, programskelett, program och liknande
som har med kursen att göra.
Nadas terminalsalar
Det finns arbetsmiljöregler för
terminalsalarna. Dessa talar om hur man ska bete sig i salarna.
Kommandot local-info plan5o
talar om när terminalsalarna är bokade av andra kurser.
Synpunkter på kursen
Eftersom denna kurs kommer att ges för många elever under flera års
tid är vi tacksamma för synpunkter på kursen. En datorstödd
kursutvärdering håller på att göras.
Synpunkter kan också lämnas direkt till lärarna.
Analysatorgeneratorer
I kursen använder vi Flex (som är nästan samma som Lex) och Bison
(som är nästan samma som Yacc). Dessutom beskrivs programmet Ox.
Den som vill får istället använda andra motsvarande program, till exempel
Jack eller PCCTS. Nedan beskrivs hur man på Nada får tillgång till dom här
nämnda programmen.
- Lex
- Lexikalanalysatorgenerator som finns i varje Unixsystem och genererar
C-kod.
Lex startas med kommandot
lex som blir tillgängligt med
module add lang. Dokumentation fås med man lex.
- Flex
- Gnuprojektets motsvarighet till Lex.
Flex startas med kommandot
flex som blir tillgängligt med
module add gnu (som automatiskt görs om du skrivit
course join syntax97).
Dokumentation fås med man flex, i Info i Emacs och
kan köpas på Nadas expedition.
- Yacc
- Syntaxanalysatorgenerator som finns i varje Unixsystem och genererar
C-kod.
Yacc startas med kommandot
yacc som blir tillgängligt med
module add lang. Dokumentation fås med man yacc.
- Bison
- Gnuprojektets motsvarighet till Yacc.
Bison startas med kommandot
bison som blir tillgängligt med
module add gnu (som automatiskt görs om du skrivit
course join syntax97).
Dokumentation fås med man bison, i Info i Emacs och
kan köpas på Nadas expedition.
- Ox
- En utvidgning av Lex och Yacc som klarar attributgrammatiker.
Ox startas med kommandot
ox som blir tillgängligt med
module add ox (som automatiskt görs om du skrivit
course join syntax97).
Dokumentation fås med man ox.
Det finns också en ganska lättläst
beskrivning av Ox samt en fullständig
referensmanual. Referensmanualen säljs på
Nadas expedition.
Under katalogen /usr/local/vol/ox-g1.04/grammars finns
färdiga Oxgrammatiker för språken ADA, C, C++, Fortran och Pascal.
Under katalogen /usr/local/vol/ox-g1.04/demo finns
några enklare exempel på Oxgrammatiker.
- Jack
- Syntaxanalysatorgenerator som genererar Javakod.
Jack startas med kommandot
/info/syntax97/Jack/bin/jack.
Dokumentation finns på /info/syntax97/Jack/doc och
i www.
- PCCTS
- Purdue Compiler Construction Tool Set - ett modernt alternativ till
Lex och Yacc som genererar C-kod.
PCCTS startas med kommandona
dlg (lexikalanalysatorgenerator)
och antlr (syntaxanalysatorgenerator) som blir tillgängliga med
module add pccts.
Dokumentation fås med man pccts, men i www finns också
information,
en snabbkurs och
en C++-grammatik för PCCTS.
Diverse länkar
Upp till kursens hemsida.
Sidansvarig: <viggo@nada.kth.se>
Senast ändrad 26 augusti 1997
Tekniskt stöd: <webmaster@nada.kth.se>