Analiza Lexicală II

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

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?

  • Ș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?

  • `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ă?

<p>Lex alege regula care se potrivește cu cele mai multe caractere sau, dacă este egal, regula definită prima. (A)</p> Signup and view all the answers

Ce face acțiunea REJECT în Lex?

<p>Anulează potrivirea curentă și caută o potrivire alternativă. (A)</p> Signup and view all the answers

Care este scopul utilizării flag-urilor în Lex atunci când se gestionează diferite medii lexicale?

<p>Pentru a marca anumite reguli ca fiind active sau inactive, în funcție de starea curentă. (D)</p> Signup and view all the answers

Cum pot fi incluse comentarii în codul Lex?

<p>Liniile care încep cu un spațiu sau tab sunt considerate comentarii și copiate în programul generat. (D)</p> Signup and view all the answers

Cum se definește o stare de început (start condition) în Lex și cum se activează această stare?

<p>Se definește cu <code>%Start name1 name2</code> și se activează cu <code>BEGIN name1;</code>. (C)</p> Signup and view all the answers

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 %%?

<p>Sunt copiate verbatim în programul C generat, în afara oricărei funcții. (C)</p> Signup and view all the answers

Care este funcția delimitatorilor %{ și %} în fișierul sursă Lex?

<p>Sunt folosiți pentru a include direct cod C, fără ca acesta să fie interpretat de Lex. (B)</p> Signup and view all the answers

Flashcards

Accesarea ultimului caracter

Ultimul caracter dintr-un șir potrivită poate fi accesat folosind yytext[yyleng-1].

Ce face yymore()?

yymore() adaugă următoarea expresie recunoscută la sfârșitul intrării curente în yytext.

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

Permite aplicarea diferitelor seturi de reguli lexicale în momente diferite, în funcție de contextul anterior.

Signup and view all the flashcards

Condiții de start

Condițiile de start sunt folosite pentru a împărți regulile lexicale.

Signup and view all the flashcards

Cum funcționează condițiile de start?

O regulă este recunoscută doar când Lex este în starea de start specificată între paranteze unghiulare <>.

Signup and view all the flashcards

Cum schimbăm condiția de start?

BEGIN stare; actualizează condiția de start, ajustând comportamentul Lex.

Signup and view all the flashcards

Potrivire maximă

Lex alege regula care potrivește cea mai lungă secvență de caractere din intrare.

Signup and view all the flashcards

Ordinea regulilor

Dacă mai multe reguli se potrivesc cu aceeași lungime, Lex alege pe cea definită prima în fișierul de reguli.

Signup and view all the flashcards

Ce face REJECT?

REJECT forțează Lex să ignore potrivirea curentă și să caute o altă potrivire.

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 și yyleng 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() și yyless() 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 din yytext 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.

Quiz Team

Related Documents

More Like This

Use Quizgecko on...
Browser
Browser