Differences

This shows you the differences between two versions of the page.

Link to this comparison view

cpl:labs:01 [2015/12/06 19:24]
laura.vasilescu [Secțiunea de cod]
cpl:labs:01 [2016/10/03 21:56] (current)
bogdan.nitulescu [Introducere]
Line 1: Line 1:
 ====== 01. Introduction to Flex ====== ====== 01. Introduction to Flex ======
  
 +===== Introducere =====
 +De-a lungul acestui semestru, veți studia în cadrul cursului modul de implementare al unui compilator. La nivel conceptual, compilatorul este un program ce face translatarea dintr-un limbaj în altul. Cel mai adesea, compilatorul face translatarea dintr-un limbaj de nivel înalt (C, C++, Java), ce este scris și înteles de un programator,​ într-un limbaj low level (bytecode, limbaj asamblare, cod mașina) ce poate fi mai apoi executat de procesor (eventual după aplicarea unei noi translatări).
 +
 +Operația de compilare a unui limbaj se face în general în mai mulți pași. Fiecare pas produce ca output o translatare a datelor de intrare primite, output ce servește ca input pentru pasul următor. Principalii pași ce se disting, în mod conceptual, pentru majoritatea compilatoarelor se pot vedea în figura urmatoare, împreuna cu inputul si outputul aferent, precum și tool-urile pe care le vom folosi în cadrul laboratorului și temelor pentru implementare.
 +
 +{{ :​cpl:​labs:​lab1better.png?​600 |}}
 ===== Nice to read ===== ===== Nice to read =====
  
Line 89: Line 95:
 <​state1,​state2,​...,​stateN>​rule <​state1,​state2,​...,​stateN>​rule
 </​code>​ </​code>​
 +
 +Un exemplu [[http://​pastebin.com/​uaCe7CxS|aici]].
  
 === Secvențe de cod C în secțiunea de definiții === === Secvențe de cod C în secțiunea de definiții ===
Line 172: Line 180:
 ===== Funcția yylex ===== ===== Funcția yylex =====
  
-  * se aplică acțiunile corespunzătoare din specificație (secțiunea de reguli) care pot genera text specific în fișierul ''​yyout''​ sau pot returna ​coduri lexicale;+  * se aplică acțiunile corespunzătoare din specificație (secțiunea de reguli) care pot genera text specific în fișierul ''​yyout''​ sau pot întoarce ​coduri lexicale;
   * textul din fișierul sursă care nu se potrivește cu niciun șablon este copiat automat în ''​yyout'';​   * textul din fișierul sursă care nu se potrivește cu niciun șablon este copiat automat în ''​yyout'';​
   * dacă pentru un text se potrivesc mai multe șabloane, se alege potrivirea **cea mai lungă**;   * dacă pentru un text se potrivesc mai multe șabloane, se alege potrivirea **cea mai lungă**;
   * dacă pentru un text se potrivesc mai multe șabloane de aceeași lungime, se alege **prima potrivire în ordine textuală** din specificație;​   * dacă pentru un text se potrivesc mai multe șabloane de aceeași lungime, se alege **prima potrivire în ordine textuală** din specificație;​
   * textul corespunzător potrivirii este copiat în ''​yytext'',​ iar lungimea acestuia este reținută în ''​yyleng'';​   * textul corespunzător potrivirii este copiat în ''​yytext'',​ iar lungimea acestuia este reținută în ''​yyleng'';​
-  * când analizorul întâlnește marcajul ''​EOF'',​ verifică rezultatul funcției ''​yywrap'';​ dacă rezultatul este fals (zero), înseamnă că analiza trebuie să continue cu noul fișier desemnat de ''​yyin'';​ dacă rezultatul este nenul, analiza se termină și se returnează ​valoarea zero spre apelantul funcției ''​yylex'';​+  * când analizorul întâlnește marcajul ''​EOF'',​ verifică rezultatul funcției ''​yywrap'';​ dacă rezultatul este fals (zero), înseamnă că analiza trebuie să continue cu noul fișier desemnat de ''​yyin'';​ dacă rezultatul este nenul, analiza se termină și se întoarce ​valoarea zero spre apelantul funcției ''​yylex'';​
  
 Absența funcției ''​yywrap''​ poate fi suplinită de opțiunea ''​%option noyywrap''​ sau prin opțiunea ''​-lfl''​ la linkare. ​ Absența funcției ''​yywrap''​ poate fi suplinită de opțiunea ''​%option noyywrap''​ sau prin opțiunea ''​-lfl''​ la linkare. ​
Line 183: Line 191:
  
 În rezolvarea laboratorului folosiți arhiva de sarcini {{ :​cpl:​labs:​lab01_num_lines.zip | lab01_num_lines.zip }} În rezolvarea laboratorului folosiți arhiva de sarcini {{ :​cpl:​labs:​lab01_num_lines.zip | lab01_num_lines.zip }}
 +
 +====== Exercițiul 0 ======
 +
 +Înscrieți-vă pe [[cpl:​info:​lista-discutii | Lista de discuții de CPL]].
  
 ===== Exercițiul 1 - num lines (3p) ===== ===== Exercițiul 1 - num lines (3p) =====
Line 199: Line 211:
 ===== Exercițiul 3 - names (2p) ===== ===== Exercițiul 3 - names (2p) =====
  
-Scrieți un fișier de specificație ''​.lex''​ care identifică toate cuvintele ​dintr-un text care încep cu majusculă.+Scrieți un fișier de specificație ''​.lex''​ care identifică toate cuvintele care încep cu majusculă.
  
 ===== Exercițiul 4 - appearances (2p) ===== ===== Exercițiul 4 - appearances (2p) =====
cpl/labs/01.1449422669.txt.gz · Last modified: 2015/12/06 19:24 by laura.vasilescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0