Cum compilator c stiva preaplinul în limba rusă

Am nevoie de un limbaj compilator descriere de locuri de muncă pe estestvennom compus pentru cineva care nu știe această limbă. Faptul că există un tutorial în spiritul „Imaginați-vă că sunteți un compilator de la această mișcare pe.“

De ieri, eu predau limba. Sintaxa pare haos, eu nu văd o listă de acțiuni pe care compilatorul desfășoară în timpul parsing, nu înțeleg limba în care se referă la expresia subsistemului și, ca rezultat a trecut elemente și funcții lingvistice. Toate aceste personaje nu sunt clare modul în care acestea funcționează. Acest lucru este foarte diferit de ceea ce am folosit pentru a TCL care are podstanovschik, comenzi și parametrii lor.

set 3 decembrie '15 12:29

Trebuie să se gândească după cum urmează.

Imaginea de ansamblu. fișiere compilate-C separat, compilatorul nu știe nimic despre alte fișiere, în cazul în care nu este menționat în mod explicit în fișierul. Alte fișiere „retras“ preprocesor. (Pentru puristii, da, eu pot hrăni și .h compilator prin Makefile, nu va complica inutil imaginea.)

Preprocesorul. El a trecut pe codul și face macro-uri de text stupide. #define X (Y, Z) pentru (int i = 0; i

Linii Preprocessor. In cadrul șir de caractere și literalii sunt unele secvențe de caractere sunt înlocuite cu altele. De exemplu, \ n este înlocuit cu simbolul cu codul 10. De asemenea, pentru un sir de caractere late (wchar_t *) pot fi aplicate set'a conversia de caractere din fișierul sursă la UCS-2 sau UCS-4, în funcție de compilator.

De fapt, compilator. Nici o magie în compilatorul nu. Există cuvinte cheie (pentru. În cazul în care. Etc.) și funcții. De exemplu, printf - o caracteristică (biblioteca standard), printf ( "\ n.", 15) înregistrare; produce compilat codul "\ n". printf apel și trece parametrii să-l și 15. În mod similar, printf de apel ( "\ n.", ""); lucrează într-un apel la funcția printf cu parametrii „\ n“ și «» (acest apel va eșua de execuție). Compilatorul cunoaște semantica exactă a șirului de format printf și are dreptul de a da un indiciu, în cazul în care el vede că tipurile de parametri nu sunt potrivite pentru șirul de format.

Instrumentul de optimizare. Ea are dreptul de a înlocui orice structură în cadrul unui sistem mai eficient, folosind regula ca și în cazul în care: în cazul în care, în ceea ce privește valorile de ieșire finale ale utilizatorului vizibil și nu se schimba rezultatul, conversia este acceptabilă. Exemplu: dacă aveți un calcul lung, fara efecte secundare, rezultatul care nu este în uz (de exemplu, nu imprima), instrumentul de optimizare are dreptul să-l arunce afară. Și, de asemenea, are dreptul de a nu arunca. De exemplu, ordinea termenilor de calcul în expresia A () + B () nu este definit, și chiar dacă funcțiile A și B au efecte secundare, optimizator are dreptul de a le calcula în orice ordine, și pot fi chiar amestecate. Dacă doriți să vă asigurați că A () Calculați strict la B (). Utilizați variabile mai explicit.

Comportamentul nedefinită. Aici să fie dragoni. Există un set mare de rulare-situații (de exemplu, razymenovnie pointer nul, mergând dincolo de hotarul de matrice () sau deversorul semnat!), Compilatorul nu mai este responsabil pentru rezultatul. Compilatorul are dreptul să se presupună că acest lucru nu se va întâmpla să facă acest lucru concluzii non-triviale și să le aplice pentru a simplifica codul. De exemplu: pentru codul

compilatorul are dreptul să presupună că tratamentul m [1] se întâmplă niciodată, astfel încât ciclul nu este executat, astfel încât codul să fie eliberat într-o întoarcere mai devreme. Cond, prin urmare, este necesar să adevărate. Prin urmare, nu poate fi calculată, și pentru a simplifica întregii caracteristici înainte

articole similare