flex


(Kvalita teto skolicky neni nejlepsi, protoze patrila k tem prvnim)
Byl bych opravdu rad, kdyby nekdo napsal lepsi

Obsah:


Co je flex?

flex je uplne skvely program na rozebirani textovych fajlu vseho druhu jeho zakladni funkce je v tom ze ma nejaka klicova slova. Ty vyhledava ve vstupu a kdyz je najde tak neco provede. Jeho sila je v tom ze kompiluje do zdrojaku v cecku a extreme rychly.

Startovani

jeho zdrojaky jsou ulozeny v souborech z priponou .l . flex nazev je zkompiluje do soubory lex.yy.c . a pak staci zkompilovat prikazem:
cc lex.yy.c -lfl a je hotovo

Zakladni syntaxe

A nyni priklad takoveho uplne jednoducheho programu:
%%
username printf( "%s", getlogin() );
%% znamena zacatek pravidel pred nej muzete psat normalni ceckarskej zdrojak treba includy nebo nejaky ty funkce

username je klicove slovo co se bude vyhledavat..vsechno ostatni pujde na vystup beze zmeny

to printf je akce co se provede-napise username

doufam ze jste uz uhadli ze tento program projde text a vsechny username nahradi uzivatelskymi jmeny.Myslim ze flex sam od sebe program opatri mainem ale kdyz chcete nejaky parametry apod tak je jeste treba udelat vlastni main to se dela takto:

za cast rules(konec naseho prikladu) napisete dalsi %%

a pak normalni kod:

%%
main()
{printf("zacatek meho sqeleho skorotexu\n");
 yyflex();/*uhadli jste!zde se vola funkce flexu a vsechno se provede*/
 printf("Doufam ze program se vam libil a nezapomenete poslat $60 
autorovi\n");
}
samozdrejme za main muze delat i neco rozumnyho..treba ze u prvnich %% si nadefinujete promenou v pravidle username ji inkrementujete a na konci printfnete pocet vyskytu nebo neco tak nejak. Hledane slovo muze byt naprikald i \n a tak muzete treba citat pocet radek. Takze napsat wc ve flexovi je hracka ne 5 radek

Dalsi moznosti

flex toho samozdrejme umi mnohem mnohem vic napriklad v prvni casti nadefinujete typ DIGIT:
DIGIT[0-9]
a potom rules:
{DIGIT}+ printf("Cislo:%s",yytext);
vypise pred vsechny cisla v textu Cislo: takze naprikal 112 11 bude
Cislo:112 Cislo:11
Takze udelat rozbor nejakeho jazyka treba cecka je hrackou..kdyz ne uz tak uplne trivialni. Rozebirat tyto komplikovanejsi moznosti flexu uz v tomto clanku nebudu ale nakonec to nejlepsi:

do kodu pravidla se da vlozit i return z nejakym cislem takze se to hodi na rozebirani konfiguraci ktera obsahuji ruzna slova co neco delaji..proste se vzdycky zavola yyparse a podle navratovaho kodu se zjisti co je tam za klicove slovo a neco se provede..to se dela tak dlouho dokud se nedostanete na konec.

Flexu se bohate vyuziva ve spojeni z yyacc a bisonem. Tim se pak daji delat analyzatory textu-interpretrvyrazu , basicu nebo jineho jazyka velmi rychlou a efektivni cestou..kdyz tenhle post zaujme a nikdo jiny to neudela hodil bych nejake to mensi info o bisonu priste

Tak honem bezte k pocitaci a napiste si nejakej flex programek Je to super!! dobre informace o flexu v linuxu se da najit prikazem info /m flex je tam pekne intro kde je muj priklad a jeste nejake dalsi podobny program ale v shellu je awk o kterym by se tu taky dalo napsat doufam ze me bude nekdo nasledovat a ze se neco noveho dozvim


Tento soubor je soucasti rozsahle sbirky skolicek na http://paru.cas.cz/~hubicka/skolicky

Take si muzete prohlidnout jeji puvodni textovou podobu

Nebo mi mailnout na hubicka@ucw.cz

Copyright (C) Jan Hubicka 1995