1 / 32

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

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

soleil
Télécharger la présentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Kompilatori 2cr M.mat. Mārtiņš Opmanis askola@latnet.lv 7224689 LU MII 210.ist. http://melnais.mii.lu.lv/kompilatori

  2. Pieci(?) mājas darbi (9-12 p.)(jāiesūta elektroniski uz askola@latnet.lv nedēļas laikā) Divi praktiskie darbi (32 p.)(jāiesūta elektroniski uz askola@latnet.lv noteiktā laikā un jāatrāda klātienē) Kavēšanās: -1 punkts par katru nedēļu

  3. 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.

  4. 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.

  5. 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

  6. Kompilators

  7. Kompilators Izejas programma Mērķa programma Kompilators Kļūdu ziņojumi, brīdinājumi, padomi

  8. Fortran I Nesauc par programmēšanas valodu. Rokasgrāmata (1956.gada oktobris) “The FORTRAN Automatic Coding System for the IBM 704 EDPM.”

  9. Fortran programmas teksts

  10. Kompilācijas fāzes • Analīze sākotnējās programmas teksta sadalīšana sastāvdaļās un starpkoda izveidošana • Sintēze mērķprogrammas veidošana no starpkoda

  11. Analīze Izpildāmās operācijas tiek noteiktas un ierakstītas hierarhiskā kokveida struktūrā - sintakseskokā (precīzāk – sintaktiskās analīzes kokā). Katra virsotne atbilst izpildāmai operācijai, bet bērnu virsotnes – operācijas argumentiem.

  12. Sintakses koka piemērs sek := ((st * 60) + min) * 60;

  13. Raksturīga programmēšanas valodas apstrādes sistēma Izejas programmas skelets Preprocesors Izejas programmas teksts Kompilators Mērķprogramma assemblerā Assemblers Pārvietojams mašīnkods Bibliotēkas, objektfaili Ielādētājs/saišu redaktors Absolūtais mašīnkods

  14. Analīzes fāzes • Lineārā analīze • Hierarhiskā analīze • Semantiskā analīze

  15. Lineārā analīze Kompilatoru kontekstā lineāro analīzi sauc par leksiskoanalīzi jeb skenēšanu. Skenēšanas procesā notiek programmas teksta ielasīšana un simbolu grupēšana vienumos (token).

  16. Lineārā analīze - piemērs sek := min * 60; Tiks izdalīti sekojoši vienumi: • Identifikators “sek” • Piešķiršanas operators “:=“ • Identifikators “min” • Reizināšanas zīme • Konstante “60” • Semikolons Kā ar tukšumsimboliem?

  17. Hierarhiskā analīze Kompilatoru kontekstā hierarhisko analīzi sauc par sintaksesanalī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ā.

  18. Hierarhiskā analīze - piemērs pozicija := sakums + atrums * 17 Piešķiršana := Izteiksme Identifikators + Izteiksme Izteiksme pozicija Identifikators * Izteiksme Izteiksme sakums Identifikators vesels skaitlis atrums 17

  19. Hierarhiskās struktūras likumi • Katrs identifikators ir izteiksme • Katrs skaitlis ir izteiksme • Ja izt1 ir izteiksme, tad (izt1) arī ir izteiksme • Ja izt1 un izt2 ir izteiksmes, tad izt1+izt2 un izt1*izt2 ir izteiksmes • ...

  20. 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. • ...

  21. Semantiskā analīze • Tiek uzkrāta informācija par datu tipiem • Tiek izmantots sintakses analīzes rezultāts • Var “pielabot” programmas tekstu ... + atrums * 17 Izteiksme * Var paredzēt tipu pārveidošanu Izteiksme Izteiksme int_to_real Identifikators vesels skaitlis vesels skaitlis atrums 17

  22. Kompilācijas fāzes izejas programma Leksikas analizētājs Sintakses analizētājs Simbolu tabulas dispečers Semantikas analizētājs Kļūdu apstrādātājs Starpkoda ģenerētājs Koda optimizētājs Koda ģenerētājs mērķa programma

  23. 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.

  24. Kļūdu apstrāde Kļūdas var būt katrā no kompilēšanas fāzēm var a : integer; b : boolean; Unknown identifier 2*a := 66; Error in expression a := *33; OK a := 3+-+-+-+33; Type mismatch a := 3/33; b := (b = false) = true; OK

  25. Instrukciju iekšējā reprezentācija pozicija := sakums + atrums * 17; Leksikas analizētājs id1 := id2 + id3 * 17 Sintakses analizētājs := id1 + id2 * id3 17 Semantikas analizētājs := id1 + id2 * id3 inttoreal 17

  26. Instrukciju iekšējā reprezentācija(turp.) Starpkoda ģenerētājs temp1 := inttoreal(17) temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3 Koda optimizētājs temp1 := id3 * 17.0 id1 := id2 + temp1 Koda ģenerētājs MOVF id3, R2 MULF #17.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1

  27. Sintakses koka iekšējā reprezentācija

  28. 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

  29. 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.

  30. 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.

  31. Piemērs : “goto” ar iezīmi tālāk tekstā ..... goto iezime1; ..... ..... iezime1: a:=b; .....

  32. 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;

More Related