32
2cr M.mat. Mārtiņš Opmanis [email protected] 7224689 LU MII 210.ist. http://melnais.mii.lu.lv/ kompilatori Kompilatori

2cr M.mat. Mārtiņš Opmanis [email protected] 7224689 LU MII 210.ist

  • Upload
    soleil

  • View
    51

  • Download
    3

Embed Size (px)

DESCRIPTION

Kompilatori. 2cr M.mat. Mārtiņš Opmanis [email protected] 7224689 LU MII 210.ist. http://melnais.mii.lu.lv/kompilatori. Pieci(?) mājas darbi (9-12 p.) (jāiesūta elektroniski uz [email protected] nedēļas laikā) - PowerPoint PPT Presentation

Citation preview

Page 1: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

2cr

M.mat. Mārtiņš Opmanis

[email protected]

7224689

LU MII 210.ist.

http://melnais.mii.lu.lv/kompilatori

Kompilatori

Page 2: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Pieci(?) mājas darbi (9-12 p.)(jāiesūta elektroniski uz [email protected] nedēļas laikā)

Divi praktiskie darbi (32 p.)

(jāiesūta elektroniski uz [email protected]

noteiktā laikā un jāatrāda klātienē)

Kavēšanās: -1 punkts par katru nedēļu

Page 3: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Punktu summas teorētiskais maksimums pārsniedz 100.

Tiek piedāvāta atzīme [punkti/10].

Eksāmens (parasti) nav nepieciešams.

Pirmā praktiskā darba vietā var nolasīt referātu.

Page 4: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Pirmie kompilatori

1950-gadu sākums.

Uzskats, ka kompilatori ir no izstrādes viedokļa ārkārtīgi sarežģītas programmas.

Pirmajam valodas “FORTRAN” kompilatoram tika iztērēti 18 cilvēkgadi.

Page 5: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Pūķa grāmata

Izmantotie resursi internetā:Costas Busch “Models of computation”

http://www.cs.rpi.edu/~buschc/courses/modcomp/fall2002/index.html

P.D.Terry “Compilers and compiler generators”

http://www.scifac.ru.ac.za/compilers/

un citi

Page 6: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Kompilators

Page 7: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Kompilators

Kompilators

Izejas programma

Kļūdu ziņojumi,brīdinājumi,padomi

Mērķaprogramma

Page 8: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Fortran INesauc par programmēšanas valodu.

Rokasgrāmata (1956.gada oktobris)

“The FORTRAN Automatic Coding System for the IBM 704 EDPM.”

Page 9: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Fortran programmas teksts

Page 10: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Kompilācijas fāzes

Analīze sākotnējās programmas teksta sadalīšana sastāvdaļās un starpkoda izveidošana

Sintēzemērķprogrammas veidošana no starpkoda

Page 11: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Analīze

Izpildāmās operācijas tiek noteiktas un ierakstītas hierarhiskā kokveida struktūrā - sintakses kokā (precīzāk – sintaktiskās analīzes kokā).

Katra virsotne atbilst izpildāmai operācijai, bet bērnu virsotnes – operācijas argumentiem.

Page 12: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Sintakses koka piemērssek := ((st * 60) + min) * 60;

Page 13: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Raksturīga programmēšanas valodas apstrādes sistēma

Izejas programmas skelets

Izejas programmas teksts

Mērķprogramma assemblerā

Pārvietojams mašīnkods

Absolūtais mašīnkods

Preprocesors

Kompilators

Assemblers

Ielādētājs/saišu redaktorsBibliotēkas,objektfaili

Page 14: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Analīzes fāzes

1. Lineārā analīze

2. Hierarhiskā analīze

3. Semantiskā analīze

Page 15: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Lineārā analīze

Kompilatoru kontekstā lineāro analīzi sauc par leksisko analīzi jeb skenēšanu.

Skenēšanas procesā notiek programmas teksta ielasīšana un simbolu grupēšana vienumos (token).

Page 16: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Lineārā analīze - piemērs

1. Identifikators “sek”2. Piešķiršanas operators “:=“3. Identifikators “min”4. Reizināšanas zīme5. Konstante “60”6. Semikolons

sek := min * 60;

Tiks izdalīti sekojoši vienumi:

Kā ar tukšumsimboliem?

Page 17: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Hierarhiskā analīze

Kompilatoru kontekstā hierarhisko analīzi sauc par sintakses analīzi. Angliski – parsing.

Sintakses analīzes procesā notiek vienumu grupēšana gramatiskās frāzēs, ko kompilators tālāk izmantos sintēzes procesā.

Parasti izejas programmas gramatiskās frāzes tiek attēlotas koka formā.

Page 18: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Hierarhiskā analīze - piemērspozicija := sakums + atrums * 17

Piešķiršana

Identifikators

pozicija

vesels skaitlis

Identifikators

Identifikators

Izteiksme

IzteiksmeIzteiksme

IzteiksmeIzteiksme

sakums

atrums 17

:=

+

*

Page 19: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Hierarhiskās struktūras likumi

1. Katrs identifikators ir izteiksme

2. Katrs skaitlis ir izteiksme

3. Ja izt1 ir izteiksme, tad (izt1) arī ir izteiksme

4. Ja izt1 un izt2 ir izteiksmes, tad izt1+izt2 un izt1*izt2 ir izteiksmes

5. ...

Page 20: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Instrukcijas programmēšanas valodās

• Ja id1 ir identifikators un izt2 ir izteiksme, tad

id1 := izt2; ir instrukcija.

• Ja izt1 ir izteiksme, bet instr2 ir instrukcija, tad

while izt1 do instr2 ir instrukcija.

• ...

Page 21: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

vesels skaitlis

Semantiskā analīze• Tiek uzkrāta informācija par datu tipiem

• Tiek izmantots sintakses analīzes rezultāts

• Var “pielabot” programmas tekstu

... + atrums * 17

Identifikators

Izteiksme

IzteiksmeIzteiksme

atrums 17

*Var paredzēt tipu pārveidošanu

vesels skaitlis

int_to_real

Page 22: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Kompilācijas fāzes

Leksikas analizētājs

Simbolu tabulas

dispečers

Kļūdu apstrādātājs

Sintakses analizētājs

Semantikas analizētājs

Starpkoda ģenerētājs

Koda optimizētājs

Koda ģenerētājs

izejas programma

mērķa programma

Page 23: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Simbolu tabula

Glabājas informācija par identifikatoriem un to atribūtiem (atvēlētais atmiņas apgabals, tips, redzamība; funkciju gadījumā informācija par argumentu skaitu un tipu, to nodošanas veidu).

Saistīta ar visām fāzēm – leksiskās un sintaktiskās analīzes laikā aizpilda, semantiskās analīzes laikā izmanto, lai pārbaudītu tipu atbilstību.

Page 24: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Kļūdu apstrāde

Kļūdas var būt katrā no kompilēšanas fāzēm

2*a := 66; Unknown identifier

a := *33; Error in expression

a := 3+-+-+-+33; OK

a := 3/33; Type mismatch

b := (b = false) = true; OK

var a : integer; b : boolean;

Page 25: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Instrukciju iekšējā reprezentācija

pozicija := sakums + atrums * 17;Leksikas analizētājs

Sintakses analizētājs

id1 := id2 + id3 * 17

id1

17

:=

+

*id2

id3

Semantikas analizētājs

id1

17

:=

+

*

inttoreal

id2

id3

Page 26: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Instrukciju iekšējā reprezentācija(turp.)

Starpkoda ģenerētājs

temp1 := inttoreal(17)temp2 := id3 * temp1temp3 := id2 + temp2id1 := temp3

Koda optimizētājs

Koda ģenerētājs

temp1 := id3 * 17.0id1 := id2 + temp1

MOVF id3, R2MULF #17.0, R2MOVF id2, R1ADDF R2, R1MOVF R1, id1

Page 27: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Sintakses koka iekšējā reprezentācija

:=

+

*

id 3 num 17

id 1

id 2

Page 28: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Kompilatoru “radinieki” (“apkārtne”)

Preprocesori

• makrosu (define, ...) apstrāde

• failu iekļaušana (include,...)

• “intelektuālie” preprocesori (jaunu konstrukciju definēšanai)

• valodas paplašinājumi

Asembleri

Ielādētāji un saišu redaktori

Page 29: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Kompilēšanas fāzu grupēšana

• sākuma stadija (front end)

atkarīga tikai no izejas valodas

ietver leksikas un sintakses analīzi, simbolu tabulas izveidošanu, semantikas analīzi, starpkoda ģenerēšanu. Iespējama arī zināma koda optimizēšana.

• beigu stadija (back end)

daļas, kas atkarīgas no mērķa vides, kur izpildīsies programma. Ir atkarīga tikai no starpkoda, nevis izejas valodas.

Page 30: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Caurlūkošanas (pass)

Jo mazāk caurlūkošanu, jo labāk – ideāli viena (sākumā ielasa tekstu, beigās ieraksta rezultātu).

Var prasīt lielu atmiņas apjomu, jo nākošai fāzei var būt vajadzība pēc citādāk izkārtotas informācijas nekā iepriekšējā fāze atdod.

Grūti ģenerēt mērķa programmu līdz starpkoda izveides beigām.

Page 31: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Piemērs : “goto” ar iezīmi tālāk tekstā

.....

goto iezime1;

.....

.....

iezime1: a:=b;

.....

Page 32: 2cr   M.mat.  Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist

Piemērs : procedūru “krustveida” izsaukumi

procedure A(i : integer); forward;procedure B(i : integer); begin

… A(i); … end;

procedure A(i : integer); begin … B(i); … end;