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
- Zjisteni inkludoveho stromu:
- includy musi tvorit acyklicky graf
- provadi se vyber spravne modifikace
- 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.
- uplna kompilace (tela, inicalizace, atributy, generovani vystupu) - Tento krok uz neni automaticky
