sâmbătă, 28 martie 2020

LFA IFR - Constructia compilatoarelor, Comentarii la introducere

Salutare si bun venit colegilor (de la IFR) la partea practica a cursului LFA. Blogez in continuare cateva comentarii referitoare la introducerea carti de compilatoare pe care v-am trimis-o.

Deschideti la pagina "In loc de motivatie" (pe editia mea tiparita este pagina 5).

Daca as scrie acum aceste noi motivatii ele ar suna asa, explicand de ce am scris si tradus aceasta carte de la un colegiu din SUA, despre constructia compilatoarelor.

1) Pentru ca un compilator este cel mai puternic sau complex procesor de text posibil, in sensul complexitatii textului analizat. Este relativ usor sa executi un cod atunci cand intalnesti un cuvant anume dar ia sa fie nevoie sa executi un cod sau sa generezi un cod sau sa calculezi o semnificatie sau doar sa validezi un text complex ?

Exemplu: Intelegerea unu text: "Nu vreau sa nu mergi la cursul de compilataore ?" nu mai este o treaba de procesare a cuvintelor ci de inteles a intregii fraze. E clar ca simpla prezenta a lui Nu nu inseamna ca Nu trebuie sa mergi la cursul de compilatoare.

Fenomene similare apar cand calculam valoarea unei expresii cu paranteze sau generam codul pentru, o expresie complexa... dar despre asta in capitolul despre generarea de cod.

2) Flex si Bison sunt uneltele clasice din lumea Unix pentru procesarea de texte. Si amandoua sunt generatoare de cod, deci scriu codul C/C++ pentru noi. Flex este o unealta pentru impartit textul in cuvinte si pentru a face ceva la intalnirea fiecarui cuvant. Puteti face orice cu el, daca descrierea acelui orice presupune ca la fiecare cuvant de comanda sa se execute ceva. De exemplu puteti misca un robotel pe o tabla de sah prin comensi sus, jos, stanga, dreapta sau procesa texte cu cuvinte pentru a, sa zicem, extrage din ele anumite chestii (adrese de email) sau dimpotriva, a le scoate din texte.

Lucrati cu Java: Exista perechi de unelte similare: JYacc, JLex. Teoretic pentru fiecare limbaj ar trebui sa aveti o pereche de unelte similare cu Flex si Bison. In Haskell am Happy si Alex.

Bison este ceva mai puternic: El primeste reguli gramaticale pentru a recunoaste sintaxa, si este capabil sa execute ceva pentru fiecare cap de regula gramaticala , pe baza informatiilor atasate elementelor din corpul regulii. De exemplu daca:
<exp> -> <exp> + <exp>
citeste regula ca <exp> este o suma de alte doua expresii, atunci le ataseaza niste valori:
 $$            $1           $2
Bineinteles ca valoarea $$ a primei expresii va fi, ati ghicit, suma valorilor celor doua parti $1 si $2.

3) In miezul platformei dot.net exista exact asa ceva, un fisier .y cu sintaxa limbajului de asamblare a platformei dot.net. Am avut ocazia sa il gasesc atunci cand am cautat printr-o colectie de fisier Microsoft ale platformei dot.net.
Si ascuns bine dupa niste scripturi Bat era bineinteles un software Yacc/Bison pentru Windows. da' exista Bison pentru Windows. Dar optiunile liniei de comanada nu sunt la fel.

Va rog cititi in continuare introducerea, pina la capat. [pg 7]

Urmeaza capitolul I.




In curs de scriere... faceti refresh din cand in cand ...

Niciun comentariu:

Trimiteți un comentariu