1 / 6

LEX generátor lexikálnych analyzátorov

LEX generátor lexikálnych analyzátorov. použitie: lex [ voľby ] subor.l voľby: -h výpis pomoci -oMENO.C meno výstupného súboru

judson
Download Presentation

LEX generátor lexikálnych analyzátorov

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. LEXgenerátor lexikálnych analyzátorov • použitie:lex [voľby] subor.l • voľby: -h výpis pomoci -oMENO.C meno výstupného súboru • výstup: zdrojový kód v jazyku C (lexyy.c alebo meno.c), kde funkcia int yylex() reprezentuje lexikálny analyzátor špecifikačný súbor subor.l LEX yylex ( ) lexyy.c prekladač C vstup výstup lexyy.exe • štruktúra špecifikačného súboru: • deklarácie • %% • pravidlá • %% • funkcie

  2. Špecifikačný súbor: Deklarácie Časť deklarácii môže obsahovať (môže byť aj prázdna): • špecifikácia substitučného reťazca (ako #define v C) - musí začínať na prvej pozícii v riadku: meno hodnota Pr. ID [a-z][a-z0-9]* • deklarácie v jazyku C - %{ a %} musia byť na prvej pozícii v riadku: %{ C kód /* direktívy preprocesora, deklarácie premenných a fukcií,…*/ %} Pr. %{ #include <string.h> int index; %} • špecifikácia počiatočných podmienok: %start podmienka1 podmienka2 ... Pr. %start vkomentari vretazci

  3. Špecifikačný súbor: Pravidlá • Obsahuje postupnosť pravidiel, ktoré určujú aké vzorky sa majú vyhľadávať a čo sa má vykonať pri ich nájdení. • Syntax pravidla: vzorka akcia (aktívne) <podmienky>vzorka akcia (podmienečne aktívne) • Vzorka je špecifikovaná regulárnym výrazom, akcia príkazom v jazyku C (väčšinou zložený príkaz). • Pravidlo musí začínať na prvej pozícii v riadku, medzerové znaky oddeľujú akciu od vzorky. • Podmienečne aktívne pravidlá sa uplatňujú, iba ak je aktívna jedna z jeho podmienok. • Podmienky sú tvorené zoznamom podmienok (definovaných v časti deklarácii) oddelených čiarkou(,). Využitie pravidiel pri rozpoznávaní: • Uplatní sa to pravidlo, ktoré rozpoznáva najdlhšiu časť vstupného prúdu znakov. • Ak viacero pravidiel rozpoznáva túto časť, uplatní sa pravidlo skôr uvedené v špecifikačnom súbore. • Ak ani jedno pravidlo nerozpozná aktuálnu časť vstupu, použije sa implicitné pravidlo - kópia na výstup.

  4. Pravidlá: regulárne výrazy • reg. výraz - postupnosť symbolov a operátorov: X znak X (nie operátor) "X" znak X \X esc-znak \X (\n,\t,...) "XYZ" reťazec XYZ [XYZ] znak X alebo Y alebo Z [X-Z] znak X alebo Y alebo Z [^XYZ] ľubovoľný znak okrem X,Y,Z . ľubovolný znak okrem \a (R) R R? nepovinné R R* 0,1,2,... opakovaní R R+ 1,2,3,... opakovaní R R|S R alebo S {M} substitúcia za M ^R R na začiatku riadku R$ R na konci riadku R/S R ak nasleduje S R{min,max} interval opakovania R

  5. Pravidlá: akcie (činnosti) • akcia - príkaz alebo postupnosť príkazov v jazyku C v {} zátvorkách • využiteľné premenné LEXu: char yytex[]; rozpoznaný reťazec int yyleng; dĺžka rozpoznaného reťazca FILE *yyin; vstupný súbor (implicitne štandardný vstup) • využiteľné funkcie LEXu: ; prázdny príkaz(nič sa nevykoná) BEGIN podmienka; aktivácia pravidiel s danou podmienkou BEGIN 0; deaktivácia všetkých podmienených pravidiel ECHO; výpis obsahu yytext na výstup REJECT; vrátenie rozpoznaného reťazca späť na vstup int input(); zistenie nasledujúceho znaku zo vstupu void output(int c); vloženie znaku c na výstup void unput(); vrátenie znaku c na vstup

  6. Špecifikačný súbor: Funkcie Obsahuje definície funkcií (je však nepovinná): • Používateľské funkcie - použité v akciách v časti pravidiel • Funkcia yywrap() - volaná pri zistení konca vstupu, pričom jej návratová hodnota určuje, či má analyzátor ukončiť svoju prácu (hodnota 1) alebo má pokračovať v analýze (hodnota 0), kedy je však nutné priradiť do premennej yyin nový zdroj vstupu. int yywrap(){return 1;} int yywrap(){ if(pokracovat){ fclose(yyin); yyin=fopen(“novy.txt”,”r”); return 0; } else return 1; } • Funkcia main()- potrebná, ak chceme vytvoriť spustiteľnú verziu analyzátora. int main(int argc, char *argv[]){ /* … */ yylex() /* … */ }

More Related