Podcast
Questions and Answers
Care dintre următoarele afirmații descrie cel mai bine funcția yymore()
în Lex?
Care dintre următoarele afirmații descrie cel mai bine funcția yymore()
în Lex?
- Specifică numărul de caractere din `yytext` care trebuie reținute.
- Indică faptul că următoarea expresie de intrare recunoscută trebuie adăugată la sfârșitul intrării curente. (correct)
- Returnează caracterele nepotrivite la intrare.
- Suprascrie intrarea curentă în `yytext` cu următoarea expresie de intrare recunoscută.
Ce face funcția yyless()
în Lex?
Ce face funcția yyless()
în Lex?
- Șterge toate caracterele din `yytext`.
- Returnează la intrare un număr specificat de caractere din `yytext`. (correct)
- Adaugă mai multe caractere la `yytext`.
- Suprascrie conținutul lui `yytext` cu o nouă intrare.
Care este scopul variabilelor yytext
și yyleng
în Lex?
Care este scopul variabilelor yytext
și yyleng
în Lex?
- `yytext` stochează numărul de caractere potrivite, iar `yyleng` stochează textul efectiv.
- Ambele variabile stochează același lucru: numărul de caractere potrivite.
- `yytext` stochează textul potrivit, iar `yyleng` stochează numărul de caractere potrivite. (correct)
- Ambele variabile stochează același lucru: textul potrivit.
Cum gestionează Lex situațiile în care mai multe reguli se potrivesc cu intrarea curentă?
Cum gestionează Lex situațiile în care mai multe reguli se potrivesc cu intrarea curentă?
Ce face acțiunea REJECT
în Lex?
Ce face acțiunea REJECT
în Lex?
Care este scopul utilizării flag-urilor în Lex atunci când se gestionează diferite medii lexicale?
Care este scopul utilizării flag-urilor în Lex atunci când se gestionează diferite medii lexicale?
Cum pot fi incluse comentarii în codul Lex?
Cum pot fi incluse comentarii în codul Lex?
Cum se definește o stare de început (start condition) în Lex și cum se activează această stare?
Cum se definește o stare de început (start condition) în Lex și cum se activează această stare?
Ce se întâmplă cu liniile din fișierul Lex care nu fac parte dintr-o regulă sau acțiune și încep cu un spațiu sau un tab înainte de primul delimitator %%
?
Ce se întâmplă cu liniile din fișierul Lex care nu fac parte dintr-o regulă sau acțiune și încep cu un spațiu sau un tab înainte de primul delimitator %%
?
Care este funcția delimitatorilor %{
și %}
în fișierul sursă Lex?
Care este funcția delimitatorilor %{
și %}
în fișierul sursă Lex?
Flashcards
Accesarea ultimului caracter
Accesarea ultimului caracter
Ultimul caracter dintr-un șir potrivită poate fi accesat folosind yytext[yyleng-1]
.
Ce face yymore()
?
Ce face yymore()
?
yymore()
adaugă următoarea expresie recunoscută la sfârșitul intrării curente în yytext
.
Ce face yyless()
?
Ce face yyless()
?
yyless(n)
specifică numărul de caractere (n
) din yytext
care trebuie reținute, returnând restul la intrare.
Sensibilitate la contextul stâng
Sensibilitate la contextul stâng
Signup and view all the flashcards
Condiții de start
Condiții de start
Signup and view all the flashcards
Cum funcționează condițiile de start?
Cum funcționează condițiile de start?
Signup and view all the flashcards
Cum schimbăm condiția de start?
Cum schimbăm condiția de start?
Signup and view all the flashcards
Potrivire maximă
Potrivire maximă
Signup and view all the flashcards
Ordinea regulilor
Ordinea regulilor
Signup and view all the flashcards
Ce face REJECT
?
Ce face REJECT
?
Signup and view all the flashcards
Study Notes
Lexical Analysis II - Overview
- Laboratorul anterior a introdus elementele de bază ale Lex, inclusiv expresiile regulate pentru scanare și compilarea scannerelor.
- Variabilele
yytext
șiyyleng
sunt utile pentru extragerea textului potrivit și a numărului său de caractere.
Variabile în Lex
- Accesarea ultimului caracter dintr-un șir potrivit:
yytext[yyleng-1]
Acțiuni Lex Suplimentare
- Uneori, o acțiune Lex poate decide că o regulă nu a recunoscut corect întinderea caracterelor.
- Funcțiile
yymore()
șiyyless()
sunt oferite pentru a ajuta în astfel de situații.
Funcția yymore()
- Indică faptul că următoarea expresie de intrare recunoscută trebuie adăugată la sfârșitul intrării curente.
- În mod normal, următorul șir de intrare ar suprascrie intrarea curentă în
yytext
.
Funcția yyless()
- Indică faptul că nu toate caracterele potrivite de expresia curentă de succes sunt dorite acum.
- Argumentul
n
specifică numărul de caractere dinyytext
care trebuie păstrate. - Caracterele suplimentare potrivite anterior sunt returnate la intrare.
Echivalentul operatorului ^
- Oferă același tip de lookahead ca operatorul ^, dar într-o formă diferită.
Sensibilitatea contextului stâng
- Uneori, este de dorit să existe mai multe seturi de reguli lexicale care să fie aplicate în momente diferite din intrare.
- Un preprocesor compilator ar putea face distincție între instrucțiunile preprocesor și a le analiza diferit de declarațiile obișnuite.
- Acest lucru necesită sensibilitate la contextul anterior, iar există mai multe moduri de a aborda astfel de probleme.
Operatorul ^
- Un operator de context anterior, care recunoaște contextul stâng imediat precedent.
- Contextul adiacent din stânga ar putea fi extins, pentru a produce o facilitate similară cu cea pentru contextul drept adiacent, dar este puțin probabil să fie la fel de util, deoarece, adesea, contextul stâng relevant a apărut cu ceva timp mai devreme, cum ar fi la începutul unei linii.
Mijloace de gestionare a mediilor diferite:
- Utilizarea simplă a flagurilor
- Utilizarea condițiilor de start pe reguli
- Posibilitatea de a pune mai mulți analizatori lexicali să ruleze împreună.
- În fiecare caz, există reguli care recunosc necesitatea de a schimba mediul în care este analizat textul de intrare următor și setarea unui parametru care să reflecte schimbarea.
Condițiile de start Lex
- Orice regulă poate fi asociată cu o condiție de start.
- Va fi recunoscută numai atunci când Lex se află în acea condiție de start.
- Condiția de start curentă poate fi modificată în orice moment.
Surse Lex
- Secțiunile de cod, definițiile, regulile de translație sunt principalele elemente care alcătuiesc un fișier Lex
- Liniile care încep cu spații sau tab-uri în secțiunea de reguli sau acțiuni sunt copiate în programul C generat.
- Conținutul dintre marcajele
%{
și%}
este copiat direct, permițând includerea directivelor preprocesor. - După al treilea delimitator
%%
, totul este copiat după ieșirea Lex.
Definirea șirurilor de substituție Lex
- Definițiile sunt plasate înaintea primului delimitator
%%
. - Liniile care nu sunt între marcajele
%{
și%}
și care încep în prima coloană sunt considerate definiții de șiruri de substituție.
Recapitulare din laboratorul anterior - Ambiguitate
- Lex decide ce regulă se aplică folosind următoarele criterii:
- Alege cea mai lungă potrivire.
- Dintre regulile cu același număr de caractere, alege pe cea care apare prima în tabelul de reguli.
Respinge
- Comanda
REJECT
poate fi utilizată pentru a anula comportamentul implicit. - Aceasta determină Lex să execute următoarea regulă posibilă, ajustând indicatorul de intrare.
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.