www.wikidata.uk-ua.nina.az
flex Fast LEXical analyzer generator vilna alternativa do lex 4 Chasto vikoristovuyetsya z vilnim generatorom sintaksichnih analizatoriv Bison Na vidminu vid Bison flex ne ye chastinoyu GNU 5 Flex buv napisanij na C Vernom Pakssonom blizko 1987 flexTip generator leksichnih analizatorivAvtor Vern Paxsond 1 2 Rozrobnik Vern PaxsonStabilnij vipusk 2 5 37 3 serpnya 2012 11 rokiv tomu 2012 08 03 Operacijna sistema UNIX podibnaMova programuvannya C 3 Licenziya BSD licenseRepozitorij github com westes flex gitVebsajt flex sourceforge netPodibnij leksichnij skaner dlya C flex vklyuchenij do paketu flex Zmist 1 Vikoristannya 2 Priklad leksichnogo analizatora 3 Nedoliki 3 1 Chasova skladnist 3 2 Povtorne vikoristannya 4 Flex 4 1 Rozrobniki Flex 5 Div takozh 6 Posilannya 7 Primitki 8 DzherelaVikoristannya red Lex chi Flex instrument dlya leksichnogo analizu sho mozhe vikoristovuvatis dlya vidilennya z sircevogo tekstu pevnih ryadkiv napered zadanim sposobom Yacc chi Bison instrument dlya gramatichnogo rozboru vin chitaye tekst i mozhe vikoristovuvatis dlya konvertuvannya poslidovnosti sliv u strukturovanij format dlya podalshoyi obrobki 6 Na vhodi otrimuye tekst u vilnomu formati j pravila vidilennya leksem Na vihodi daye kod analizatora v viglyadi funkciyi na movi C a Pravila zadayutsya v viglyadi regulyarnih viraziv livoruch i zdebilshogo kodu na movi C pravoruch Pravila mistyat tri sekciyi vidokremleni ryadkom viznachennya pravila kod koristuvachaViznachennya mistyat startovi znachennya j viznachennya pravila bezposeredno sami virazi j diyi sho vidpovidayut yim koristuvackij kod prosto vklyuchayetsya v vivid flex Deyaki sekciyi mozhut buti vidsutnimi Funkciya analizatora otrimuye tekst na vhodi j vikonuye zadanij kod dlya kozhnoyi znajdenoyi leksemi Napriklad danij kod dlya kozhnogo vhodzhennya username v teksti vikonaye kod printf s getlogin username printf s getlogin Dana funkciya vivede v potik ryadok sho povertayetsya funkciyeyu getlogin Tobto kozhne vhodzhennya username u vhidnomu potoci bude zamineno znachennyam povernenim getlogin Napriklad imenem potochnogo koristuvacha Pravila vidpovidno do yakih pidsumkova funkciya maye drukuvati na vihodi tip leksemi if zminna chislo unarna chi binarna operaciya ta znachennya dlya deyakih leksem if printf IF statement n a z printf tag value s n yytext D printf decimal number s n yytext printf unary op n printf binary op n Priklad pidrahunku kilkosti ryadkiv i simvoliv u teksti int num lines 0 num chars 0 n num lines num chars num chars main yylex printf of lines d of chars d n num lines num chars Dali funkciyu stvorenu generatorom mozhlivo vikoristovuvati z generatorami sintaksichnih analizatoriv zazvichaj flex vikoristovuyetsya razom z yacc chi bison Sintaksichnij analizator viklikaye funkciyu yylex stvorenu generatorom flex dlya poshuku nastupnoyi leksemi Priklad leksichnogo analizatora red Odnim iz bazovih ponyat leksichnogo analizu ye logichnij simvol token Logichnij simvol mozhe skladatisya z odnogo chi kilkoh zvichajnih simvoliv Prikladom logichnih simvoliv skladenih z kilkoh prostih simvoliv mozhut buti znaki operacij gt lt lt gt tosho Klyuchovi slova komp yuternoyi movi takozh mozhut rozglyadatis yak riznovid logichnih simvoliv Tut i dali simvolami budut nazivatis lishe prosti simvoli shob vidrizniti yih vid logichnih simvoliv Priklad skanera napisanogo na C dlya imperativnoyi movi programuvannya PL 0 Rozpiznayutsya nastupni logichni simvoli lt lt lt gt gt gt chisla 0 9 0 9 identifikatori a zA Z a zA Z0 9 ta klyuchovi slova begin call const do end if odd procedure then var while Vikoristovuyutsya zovnishni zminni FILE source Pochatkovij fajl int cur line cur col err line err col Dani dlya informaciyi pro pomilku int num Ostannye prochitane chislo dlya sintaksichnogo analizu char id Ostannij prochitanij identifikator dlya sintaksichnogo analizu Hashtab keywords Perelik klyuchovih sliv Zovnishni proceduri error const char msg Povidomiti pro pomilku Hashtab create htab int estimate Stvoriti poshukovu tablicyu int enter htab Hashtab ht char name void data Dodati element do poshukovoyi tablici Entry find htab Hashtab ht char s Znajti element poshukovoyi tablici void get htab data Entry entry Povernuti dani z poshukovoyi tablici FILE fopen char fn char mode Vidkriti fajl dlya chitannya fgetc FILE stream Prochitati nastupnij simvol z potoku ungetc int ch FILE stream Povernuti simvol u potik isdigit int ch isalpha int ch isalnum int ch Klasifikaciya simvoliv Zovnishni tipi Symbol Perelichuvanij tip usih logichnih simvoliv movi PL 0 Hashtab Poshukova tablicya Entry Element poshukovoyi tablici Skanuvannya zapuskayetsya viklikom init scan z peredacheyu imeni pochatkovogo fajla Yaksho pochatkovij fajl uspishno vidkrito sintaksichnij analizator ciklichno viklikaye getsym shob povernuti successive simvoli z vhidnogo fajlu Osnova skanera getsym maye buti zrozumiloyu Po pershe propuskayutsya probili Dali zavantazhenij logichnij simvol klasifikuyetsya Yaksho potochnij prostij simvol vhodit do logichnogo simvolu z kilkoh prostih simvoliv slid vikonati dodatkovi diyi Chisla peretvoryuyutsya do vnutrishnogo formatu identifikatori pereviryayutsya na nayavnist zbigiv z klyuchovimi slovami int read ch void int ch fgetc source cur col if ch n cur line cur col 0 return ch void put back int ch ungetc ch source cur col if ch n cur line Symbol getsym void int ch while ch read ch EOF amp amp ch lt err line cur line err col cur col switch ch case EOF return eof case return plus case return minus case return times case return slash case return eql case return lparen case return rparen case return comma case return semicolon case return period case ch read ch return ch becomes nul case lt ch read ch if ch gt return neq if ch return leq put back ch return lss case gt ch read ch if ch return geq put back ch return gtr default if isdigit ch num 0 do no checking for overflow num 10 num ch 0 ch read ch while ch EOF amp amp isdigit ch put back ch return number if isalpha ch Entry entry id len 0 do if id len lt MAX ID id id len char ch id len ch read ch while ch EOF amp amp isalnum ch id id len 0 put back ch entry find htab keywords id return entry Symbol get htab data entry ident error getsym invalid character c ch return nul int init scan const char fn if source fopen fn r NULL return 0 cur line 1 cur col 0 keywords create htab 11 enter htab keywords begin beginsym enter htab keywords call callsym enter htab keywords const constsym enter htab keywords do dosym enter htab keywords end endsym enter htab keywords if ifsym enter htab keywords odd oddsym enter htab keywords procedure procsym enter htab keywords then thensym enter htab keywords var varsym enter htab keywords while whilesym return 1 Teper porivnyajte navedenij vishe kod z kodom shob zgeneruvati skaner dlya tiyeyi zh movi za dopomogoyu flex include y tab h digit 0 9 letter a zA Z return PLUS return MINUS return TIMES return SLASH return LPAREN return RPAREN return SEMICOLON return COMMA return PERIOD return BECOMES return EQL lt gt return NEQ lt return LSS gt return GTR lt return LEQ gt return GEQ begin return BEGINSYM call return CALLSYM const return CONSTSYM do return DOSYM end return ENDSYM if return IFSYM odd return ODDSYM procedure return PROCSYM then return THENSYM var return VARSYM while return WHILESYM letter letter digit yylval id char strdup yytext return IDENT digit yylval num atoi yytext return NUMBER t n r skip whitespace printf Unknown character c n yytext 0 return UNKNOWN int yywrap void return 1 Blizko 50 ryadkiv kodu dlya flex proti blizko 100 ryadkiv otrimanogo kodu Nedoliki red Chasova skladnist red Leksichnij analizator Flex inkoli maye chasovu skladnist O n displaystyle O n nbsp vidnosno rozmiru vhidnih danih Inshimi slovami vin vikonuye stalu kilkist operacij dlya kozhnogo vhidnogo logichnogo simvolu Cya kilkist dostatno nizka GCC generuye 12 instrukcij dlya ciklu perevirki determinovanogo avtomatu Slid zaznachiti sho cya kilkist ne zalezhit vid dovzhini tokena dovzhini regulyarnogo virazu j rozmiru determinovanogo avtomatu Odnak odna neobov yazkova mozhlivist Flex mozhe zmusiti Flex generuvati skaner z nelinijnoyu produktivnistyu vikoristannya makrosa REJECT v skaneri z mozhlivistyu poznachati vkraj dovgi tokeni V comu vipadku programist bezposeredno vkazav flex povernutis i sprobuvati she raz pislya togo yak vin uzhe pidibrav vhidni dani V rezultati determinovanij avtomat bude zmushenij povernutis do poshuku inshih prijnyatnih staniv Teoretichno chasova skladnist stanovit O n m 2 O m 2 displaystyle O n m 2 geq O m 2 nbsp de m displaystyle m nbsp dovzhina najdovshogo tokena ce povertaye do O n displaystyle O n nbsp yaksho tokeni mali v porivnyanni z rozmirom vhidnih danih 7 Mozhlivist REJECT za zamovchuvannyam ne dozvolena i vpliv yiyi na produktivnist detalno zadokumentovano v instrukciyi koristuvacha Flex Povtorne vikoristannya red Za zamovchuvannyam sintaksichnij analizator zgenerovanij za dopomogoyu Flex ne rozrahovanij na povtorne vikoristannya Ce mozhe viklikati serjozni problemi z programami sho viklikayut zgenerovanij skaner z riznih trediv Dlya obhodu ciyeyi problemi isnuye dodatkova opciya z yakoyu Flex zabezpechuye mozhlivist paralelnogo vikoristannya Detalnij opis cih opcij mozhna znajti v instrukciyi koristuvacha Flex 1 Flex red Flex instrument dlya stvorennya leksichnih analizatoriv Generator sintaksichnih analizatoriv stvoryuye programu sintaksichnogo analizu movi Ce zh stosuvalos programi flex Ci programi zdijsnyuyut sintaksichnij analiz i tokenizaciyu shlyahom vikoristannya mashini viznachenogo kincevogo stanu Determinovanij chi nedeterminovanij avtomat teoretichnij avtomat sho prijmaye regulyarni movi Ci mashini pidmnozhina kolekciyi mashin Tyuringa Determinovani avtomati ekvivalentni do mashin Tyuringa de zi strichki sho ruhayetsya vpravo mozhlive lishe chitannya chi nedeterminovanih avtomativ Sintaksis bazuyetsya na vikoristanni regulyarnih viraziv Flex nadaye dva sposobi generuvannya skaneriv Vin pochatkovo generuye kod movoyu C kod dlya kompilyaciyi na protivagu C bibliotekam i kodu Flex rozshirennya flex vikoristovuyetsya dlya generuvannya C kodu i klasiv Klasi j kod Flex potrebuyut kompilyatora C dlya stvorennya program leksichnoyi perevirki ta zviryannya z shablonami Flex alternativnij movnij sintaksichnij analizator za zamovchuvannyam generuye a parsing scanner na movi C Skaneri na C zgenerovani u Flex vklyuchayut fajl zagolovku FlexLexer h yakij viznachaye interfejsi dvoh zgenerovanih klasiv C Rozrobniki Flex red Vern Paxson z vikoristannyam bagatoh idej Van Jacobson Div takozh red John Levine Tony Mason and Doug Brown Lex amp Yacc O Reilly and Associates 2nd edition M E Lesk and E Schmidt LEX Lexical Analyzer Generator Alfred Aho Ravi Sethi and Jeffrey Ullman Compilers Principles Techniques and Tools Addison Wesley 1986 Opisuye tehnologiyi sho vikoristovuyutsya v flex determinovani skinchenni avtomati Lex Ragel Quex Generator sintaksichnih analizatoriv BisonPosilannya red Flex Homepage Flex Manual ANSI C Lex Specification Arhivovano 12 grudnya 2010 u Wayback Machine JFlex Fast Scanner Generator for Java Arhivovano 6 zhovtnya 2011 u Wayback Machine Brief description of Lex Flex YACC and Bison Arhivovano 7 travnya 2005 u Wayback Machine Compiler Construction using Flex and Bison course by Anthony Aaby A Romanian rebuild version of this book in pdf format fb2 press pdf or fb2 printing pdf may be downloaded from 2 or directly from 3 or 4 Download Win32 binaries of Flex and Bison Arhivovano 14 kvitnya 2005 u Wayback Machine Primitki red Zdebilshogo yylex Dzherela red https cvsweb openbsd org src usr bin lex README https cvsweb openbsd org src usr bin lex parse y http openbsd su src usr bin lex Makefile Levine John August 2009 flex amp bison O Reilly Media s 304 ISBN 978 0 596 15597 1 Arhiv originalu za 16 serpnya 2011 Procitovano 15 listopada 2010 Is flex GNU or not Arhivovano 3 bereznya 2016 u Wayback Machine flex FAQ Brown Martin 31 travnya 2006 Write text parsers with yacc and lex angl IBM Arhiv originalu za 24 chervnya 2021 Procitovano 17 chervnya 2021 http flex sourceforge net manual Performance html Arhivovano 27 sichnya 2014 u Wayback Machine last paragraph Otrimano z https uk wikipedia org w index php title Flex leksichnij analizator amp oldid 35614469