From bbs@floyd.upol.czMon Jan 29 16:14:48 1996 Date: Wed, 6 Dec 1995 15:24:55 +0100 From: BBS Floyd To: hubicka@limax.paru.cas.cz Subject: Skolicka #1-flex (fwd) *** Forwarded file follows *** Posted By: kotelnik (kotelnik) on 'Linux' Title: Skolicka #1-flex Date: Wed Nov 22 17:59:58 1995 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. A ted jak se pouziva: 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 A nyni priklad takoveho uplne jednoducheho programu: %% username printf( "%s", getlogin() ); takze rozbor: %% 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 u rulesy 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 flex toho samozdrejme umi mnohem mnohem vic napriklad v prvni casti nadefinujete typ DIGIT: DIGIT[0-9] a potom rulesa: {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 rulesy 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