Domácí úkoly

SWI109 - Konstrukce překladačů

LS 2009/2010


Generátor kódu pro Mlaskal

Všechny varianty domácího úkolu se týkají generátoru kódu - back-endu k překladači (front-endu) jazyka Mlaskal, kterým se zabývaly domácí úkoly k předmětu SWI098. Front-end generuje mezikód ve formě sekvenčního kódu pro fiktivní zásobníkový stroj. Úkolem back-endu jako celku je převést tento mezikód do kódu hypotetického registrového stroje a zoptimalizovat. Každá z variant domácího úkolu odpovídá části generátoru kódu, okolní části, pokud jsou pro provoz nutné, jsou dodány jako součást zadání.

Varianty domácího úkolu jsou tyto:

A)    Výběr instrukcí: Konverze ze zásobníkového kódu do registrového.

B)    Přidělování registrů: Transformace registrového kódu s neomezenou množinou registrů na registrový kód s omezenou množinou registrů. K této úloze je možné získat bonus dvěma způsoby:

a.       Generování spill-kódu

b.      Umisťování skalárních pojmenovaných proměnných do registrů

C)    Scheduling: Oprimalizace registrového kódu formou schedulingu nad základními bloky. Tato úloha je vzhledem ke složitosti sama o sobě bonusová.

Úspěšné vyřešení úlohy s bonusem bude odměněno známkou 1 nebo 2 (podle kvality) ze zkoušky.

Mezikód i cílový kód jsou chápány jako podmnožiny společného nadkódu, který je popsán v tomto dokumentu:

Back-end čte a generuje kód pomocí stejných datových struktur, jako front-end, používá je však poněkud odlišně – dokumentace zde:

Součástí této dokumentace je i popis kostry generátoru, která je součástí zadání. Použití této kostry není povinné, je však doporučeno.

Soubory zadání - aktuální verze

Soubory zadání – historie

Popis souborů

·        public-ro - zdrojové soubory společné části - nejsou určeny k modifikaci

o       common - soubory společné pro front-end, back-end i simulátor (definice instrukcí, datové struktury, čtení a zápis souborů)

§         h - hlavičkové soubory

§         src - zdrojové soubory C++

§         xml - zdrojové soubory XML a XSLT

o       icm - simulátor zásobníkového i registrového kódu (včetně projektů pro MS VS 8)

o       rmgen - nemodifikovatelné části back-endu (main, datové struktury...)

§         du1 - příslušenství k du1

·        tests - cvičná data

·        *.mls - zdrojové texty

·        *.moa - front-endem generovaný assembler

·        *.mo - front-endem generovaný binární kód - vstup do generátoru kódu

·        *.regmoa – základním back-endem generovaný assembler

·        *.regmo - základním back-endem generovaný binární kód - vstup do generátoru kódu

·        *.icmin - vstup programu - vstup do ICM

·        *.icmout - výstup programu - pro porovnání s výstupem ICM

§         h - hlavičkové soubory

§         src - zdrojové soubory C++

·        public-rw - kostra domácího úkolu - určena k modifikaci

o       SWI109 - domácí úkoly

§         du1 - první domácí úkol

·        rmgstructures.hpp - kostra domácího úkolu - datové struktury

·        rmgutil.hpp - kostra domácího úkolu - pomocné funkce

·        rmgen.sln, *.vcproj - projekty MS VS 8