Pouziti

Vystup kompilatoru je uz v soucasnosti vyuzivan pro:

  • Syntax highlighting - tady neni potreba zadna slozita analyza, staci rozlisit urcite kontexty (komentare, stringy, atributy) a pouzit ruzne bravy pro klicova slova, identifikatory, znama jmena, literaly, znaky.
  • Name browser - potreba je semanticka analyza deklaraci jmen a zavislosti
  • Object browser - potreba je navic semantycka analyza polozek uvnitr objektu + dedeni
  • Intellisense - planovan az do budoucich verzi - Potrebuju semantickou analyzu objektu (mam ji z predchozich kroku) a urcity druh castecne kompilace od zacatku tela metody do mista, kde intelli sence chci vyuzit.
  • A samozrejme vlastni IS a KS kompilaci

Vlastnosti jazyka

  • jednotlive soubory (moduly) se propojuji pomoci include. Propojeni tvori acyklicky graf. Moduly mohou byt nahrazovany modifikacemi (novejsimi verzemi). Pr: B pouziva A1. C pouziva B i A2 -> to zbusobi ze se pro kompilaci C pouzije pouze A2, pri samostatne kompilaci B zustava pouzito A1. Viz [KrkalC/NecisteOperace]
  • moduly jsou syntakticky uzavreny (modifikace jinych modulu nemuze ovlivnit syntakticky vyznam v modulu)
  • Nezalezi na poradi deklaraci a pouziti. Nektere jmena maji povinnou deklaraci, v tom pripade musi byt deklarovana v souboru, kde jsou poptrve pouzita
  • Tabulka verzi fixuje verzi jmen, ktere jsou uvadeny bez verze. Tedy modifikace v jinych souborech nemeni identitu jmena.

Castecna kompilace

Protoze potrebuju v realnem case aktualizovat semanticke informace, potrebuju aby kompilace byla rychla:

Vycepruchodova kompilace

  • kompiluju jenom deklarace jmen, zavislosti a polozky objektu (promenne, hlavicky metod, parametry metod, skupiny, ovladaci prvky).
  • preskakuju atributy, inicializace prom. a parametru konstantami a tela metod. Jen si zapamatovavam pozice techto veci ve zdrojaku, abych se k tomu pozdeji mohl vratit, dale oznaceni oblasti vyuziva highlighting
  • navic kontroluju spravne uzavorkovani kodu (i uvnitr tel metod) (kontroluji se vsechny druhy zavorek, komentare, stringy)

Pruchody

  1. Zjisteni inkludoveho stromu:
    • includy musi tvorit acyklicky graf
    • provadi se vyber spravne modifikace
  2. semanticka analyza objektu, jmen a zavislosti
    • potrebna pro object browser a intelli sence (kompilace se spousti pri kazde zmene kodu). Navic pro kompilaci metod je potreba znat uplnou semantickou informaci. Rozdeleni na pruchody je tedy vhodne nejenom kvuli rychlosti.
    • provadi se jen tehdy pokud mam bez chyb prekompilovany vsechny includy na kterych dany soubor zavisi. Pokud toto splneno neni, muzu provest alespon castecnou syntaktickou analyzu k odhaleni chyb.
  3. uplna kompilace (tela, inicalizace, atributy, generovani vystupu) - Tento krok uz neni automaticky