www.wikidata.uk-ua.nina.az
LL analizator algoritm sintaksichnogo analizu metodom rekursivnogo spusku dlya pidmnozhini kontekstno vilnih gramatik Vin obroblyaye vhid zliva napravo tomu persha bukva oznachaye Left ta buduye livorekursivne vivedennya ryadka tomu jogo porivnyuyut z LR analizatorom Klas gramatik sho rozpiznayutsya cim analizatorom nazivayetsya LL gramatikami Dali opisuyetsya tablichnij analizator alternativa algoritmu rekursivnogo spusku yakij zazvichaj koduyetsya vruchnu hocha ne zavzhdi divitsya napriklad ANTLR dlya generatora analizatoriv LL gramatik metodom rekursivnogo spusku LL analizatori nazivayutsya LL k analizatorami yaksho voni divlyatsya na k tokeniv vpered protyagom analizu virazu Yaksho takij analizator isnuye ta mozhe rozpiznavati virazi gramatiki bez bektrekingu todi gramatika nazivayetsya LL k gramatikoyu Z cih gramatik najpopulyarnishoyu gramatikoyu ye gramatika LL 1 bo nezvazhayuchi na yiyi obmezhenist vona maye duzhe prostij analizator Movi sho vidpovidayut LL k gramatikam z velikim k vvazhayutsya takimi sho vazhko analizuyutsya hocha sogodni ce ne zovsim virno cherez dostupnist ta poshirenist generatoriv sintaksichnih analizatoriv sho pidtrimuyut LL k gramatiki LL analizator nazivayetsya LL analizatorom yaksho vin ne obmezhenij skinchennim chislom tokeniv dlya poperednogo pereglyadu a mozhe prijmati rishennya viznachayuchi chi nalezhat vhidni tokeni regulyarnij movi napriklad vikoristovuyuchi DSkA Isnuye konkurenciya mizh yevropejskoyu shkoloyu proektuvannya mov yaka viddaye perevagu LL gramatikam ta amerikanskoyu yaka chastishe vikoristovuye LR gramatiki Ce bagato v chomu zavdyaki tradiciyam vikladannya ta detalnomu opisu metodiv ta instrumentiv v literaturi Inshij vpliv ide vid doslidzhen Niklausa Virta v Vishij tehnichnij shkoli Cyuriha yaki opisuvali bagato sposobiv optimizaciyi LL 1 mov ta kompilyatoriv Zmist 1 Zagalnij vipadok 2 Konkretnij priklad 2 1 Inicializaciya 2 2 Procedura analizu 2 3 Realizaciya analizatora na C 3 Primitki 4 Pobudova tablici LL 1 analizatora 5 Pobudova tablici analizu dlya LL k gramatiki 6 Konflikti 6 1 Konflikti LL 1 6 2 Rozv yazannya konfliktiv LL 1 7 Div takozh 8 Posilannya 9 DzherelaZagalnij vipadok red Analizator pracyuye na ryadkah z pevnoyi kontekstno vilnoyi gramatiki Analizator skladayetsya z vhidnogo bufera v yakomu zberigayetsya vhidnij ryadok steka v yakomu zberigayut terminalni ta neterminalni simvoli z gramatiki sho analizuyetsya tablicyu analizu yaka kazhe yake yaksho isnuye pravilo gramatiki zastosuvati zalezhno vid simvoliv na vershini steku ta nastupnogo vhidnogo tokena Analizator zastosovuye pravilo z tablici yake vidpovidaye simvolu na vershini steku ryadok tablici ta simvolu z vhidnogo potoku stovpec Koli analizator zapuskayetsya stek vzhe mistit dva simvoli S de specialnij terminal sho vkazuye na dno steka ta kinec vhidnogo potoku a S aksioma gramatiki Analizator sprobuye zminiti vmist steka na te sho vin znajde na vhodi Tim ne mensh vin tilki trimaye v steku te sho maye buti perepisanim Konkretnij priklad red Inicializaciya red Shob poyasniti yak ce pracyuye mi vizmemo nastupnu neveliku gramatiku S F S S F F ayaka analizuye nastupnij vhid a a Tablicya analizu dlya ciyeyi gramatiki viglyadaye tak a S 2 1 F 3 Zauvazhte sho ye takozh stovpchik dlya specialnogo terminalu sho poznachaye kinec vvodu Procedura analizu red Na kozhnomu kroci parser chitaye nastupnij dostupnij simvol z vhidnogo potoku ta simvol na vershini steku Yaksho vhidnij simvol ta simvol na vershini steku zbigayutsya parser vidkidaye yih oboh zalishayuchi tilki simvoli sho ne zbiglisya Tomu na pershomu kroci analizator chitaye vhidnij simvol ta simvol na vershini steku S Instrukciyi z tablici analizu prihodyat vid kolonki z zagolovkom ta ryadkom z zagolovkom S cya klitinka mistit 2 sho vkazuye analizatoru zastosuvati pravilo 2 Analizator maye zaminiti S na S F na vershini steku ta vivesti pravilo nomer 2 Stek prijmaye viglyad S F Tak yak z vhidnogo potoku ne zbigayetsya z simvolom na vershini steku S vin ne vidalyayetsya ta zalishayetsya yak nastupnij dostupnij vhidnij simvol dlya nastupnogo kroku Na drugomu kroci analizator vidalyaye z vhidnogo potoku ta z steku tak yak voni zbigayutsya Stek staye S F Teper na vhodi a ta S u steku Tablicya kazhe zastosuvati pravilo 1 gramatiki ta vivesti pravilo 1 u vihidnij potik Stek staye F F Analizator maye a na vhodi ta F na vershini steku Tablicya kazhe zastosuvati pravilo 3 Stek staye a F Na nastupnih dvoh krokah analizator chitaye a ta z vhidnogo potoku ta tak yak voni zbigayutsya z simvolami v steku tezh vidalyaye yih zvidti Rezultat F Na nastupnih troh krokah analizator zaminit F zi steku na a vivede pravilo 3 ta vidalit a ta zi steku ta z vhidnogo ryadka Analizator takim chinom zavershit robotu koli mistitimetsya yak na vhodi tak i u steku V takomu vipadku analizator skazhe sho vin prijmaye vhidnij ryadok ta vivede nastupnij spisok nomeriv pravil u vihidnij potik 2 1 3 3 Ce naspravdi spisok pravil dlya livorekursivnogo vivedennya vhidnogo ryadka u danij kontekstno vilnij gramatici yaki utvoryuyut takij lancyuzhok S S F F F a F a a Realizaciya analizatora na C red Nizhche dana realizaciya na C tablichnogo LL analizatora dlya movi sho bula dana v prikladi Realizaciya analizatora na C include lt iostream gt include lt map gt include lt stack gt enum Symbols the symbols Terminal symbols TS L PARENS TS R PARENS TS A a TS PLUS TS EOS in this case corresponds to 0 TS INVALID invalid token Non terminal symbols NTS S S NTS F Converts a valid token to the corresponding terminal symbol enum Symbols lexer char c switch c case return TS L PARENS break case return TS R PARENS break case a return TS A break case return TS PLUS break case 0 this will act as the terminal symbol return TS EOS break default return TS INVALID break int main int argc char argv using namespace std if argc lt 2 cout lt lt usage n t ll a a lt lt endl return 0 map lt enum Symbols map lt enum Symbols int gt gt table LL parser table maps lt non terminal terminal gt pair to action stack lt enum Symbols gt ss symbol stack char p input buffer initialize the symbols stack ss push TS EOS terminal ss push NTS S non terminal S initialize the symbol stream cursor p amp argv 1 0 setup the parsing table table NTS S TS L PARENS 2 table NTS S TS A 1 table NTS F TS A 3 while ss size gt 0 if lexer p ss top cout lt lt Matched symbols lt lt lexer p lt lt endl p ss pop else cout lt lt Rule lt lt table ss top lexer p lt lt endl switch table ss top lexer p case 1 1 S F ss pop ss push NTS F F break case 2 2 S S F ss pop ss push TS R PARENS ss push NTS F F ss push TS PLUS ss push NTS S S ss push TS L PARENS break case 3 3 F a ss pop ss push TS A a break default cout lt lt parsing table defaulted lt lt endl return 0 break cout lt lt finished parsing lt lt endl return 0 Primitki red Yak mozhna bulo bachiti na prikladi analizator vikonuye tri vidi krokiv zalezhno vid togo chi na vershini steku terminal neterminal chi specialnij simvol Yaksho na vershini neterminal todi vin shukaye v tablici analizu za bazisom neterminalu ta simvolom u vhidnomu potoci yake gramatichne pravilo varto vikoristati shob zaminiti jogo u steku Nomer pravila zapisuyetsya u vihidnij potik Yaksho tablicya kazhe sho potribnogo pravila ne isnuye to vivoditsya pomilka i robota pripinyayetsya Yaksho na vershini terminal todi vin porivnyuyetsya z simvolom na vhodi ta yaksho voni rivni voni obidva vidalyayutsya Yaksho voni ne rivni analizator vivodit pomilku ta zupinyayetsya Yaksho na vershini steku ta u vhidnomu potoci tezh todi analizator dopovidaye pro uspishnij analiz vhidnogo potoku inakshe vivodit pomilku V oboh vipadkah analiz zupinyayetsya Ci kroki povtoryuyutsya azh do zupinki analizatora i v rezultati otrimuyemo abo lancyuzhok vivedennya abo povidomlennya pro pomilku Pobudova tablici LL 1 analizatora red Shob zapovniti tablicyu analizu mi mayemo z yasuvati yake pravilo vikoristovuvati koli analizator bachit neterminal A na vershini steku ta simvol a na vhodi Legko pobachiti sho ce pravilo maye mati formu A gt w ta sho mova sho vidpovidaye w maye mati hoch odne slovo sho pochinayetsya z w Z takoyu metoyu mi opisuyemo First set dlya w sho zapisuyetsya tut yak Fi w yak mnozhinu terminaliv sho mozhut znahoditis na pochatku bud yakogo slova z w plyus e yaksho porozhnye slovo tezh nalezhit w Mayuchi gramatiku z pravilami A1 w1 An wn mi mozhemo obchisliti Fi wi ta Fi Ai dlya kozhnogo pravila tak inicializuyemo kozhne Fi wi ta Fi Ai porozhnoyu mnozhinoyu dodayemo Fi wi do Fi Ai dlya kozhnogo pravila Ai wi de Fi opisuyetsya tak Fi a w a dlya kozhnogo teminalu a Fi A w Fi A dlya kozhnogo takogo neterminalu A sho e ne nalezhit Fi A Fi A w Fi A e Fi w dlya kozhnogo neterminalu A sho e nalezhit Fi A Fi e e dodayemo Fi wi do Fi Ai dlya kozhnogo pravila Ai wi povtoryuyemo kroki 2 ta 3 azh poki vsi mnozhini Fi ne stanut odnakovimi Na zhal mnozhin Fi ne dostatno shob virahuvati tablicyu analizu Ce tomu sho prava chastina pravila w mozhe buti perepisana v porozhnij ryadok Tomu analizator takozh maye vikoristovuvati pravilo A gt w yaksho e nalezhit Fi w ta vidimij u vhidnomu potoci yak simvol sho mozhe jti za A Tomu mi takozh potrebuyemo mnozhinu Follow dlya A yaku zapishemo yak Fo A yaka opisuyetsya yak mnozhina terminaliv a takih sho isnuye ryadok simvoliv aAab yaki mozhut vivoditis z pochatkovogo simvolu Obchislennya mnozhini Follow dlya neterminaliv v gramatici mozhe buti zdijsnene tak inicializuvati kozhne Fo Ai porozhnoyu mnozhinoyu yaksho isnuye pravilo vidu Aj wAiw todi yaksho terminal a nalezhit Fi w to dodati a do Fo Ai yaksho e nalezhit Fi w to dodati Fo Aj do Fo Ai povtoryuvati krok 2 poki vsi Fo ne stanut odnakovimi Teper mi mozhemo opisati tochno yaki pravila de budut zberigatis v tablici analizu Yaksho T A a poznachaye misce v tablici dlya neterminalu A ta terminalu a todi T A a mistit pravilo A w todi i tilki todi kolia nalezhit Fi w abo e nalezhit Fi w i a nalezhit Fo A dd Yaksho tablicya mistit shonajbilshe odne pravilo v kozhnij klitinci todi analizator zavzhdi bude znati yake pravilo vin maye vikoristati i tomu mozhe analizuvati ryadki bez bektrekingu Ce tochno takij vipadok dlya gramatiki sho nazvana LL 1 gramatikoyu Pobudova tablici analizu dlya LL k gramatiki red Do seredini 1990 tih vvazhalos sho LL k analiz dlya k gt 1 ye nepraktichnim tak yak rozmir tablici analizu bude zazvichaj v girshomu vipadku mati eksponencijnu skladnist vid k Take sprijnyattya silno zminilos z vipuskom PCCTS blizko 1992 koli bulo pokazano sho bagato mov programuvannya mozhut efektivno analizuvatis sintaksichnim analizatorom LL k gramatiki bez vikoristannya povedinki dlya girshogo vipadku Bilshe togo v deyakih vipadkah LL analiz mozhlivij navit dlya neobmezhenogo prepereglyadu A tradicijni generatori analizatoriv yak yacc vikoristovuyut tablici analizu LALR 1 shob stvoriti obmezhenij LR analizator z fiksovanim odnotokenevim prepereglyadom Konflikti red Konflikti LL 1 red Ye tri tipi LL 1 konfliktiv FIRST FIRSTMnozhini FIRST dvoh riznih neterminaliv peretinayutsya FIRST FOLLOWMnozhini pravil gramatiki FIRST ta FOLLOW peretinayutsya Z e sho nalezhit mnozhini FIRST nevidomo yaku alternativu vibrati Priklad konfliktiv LL 1 S gt A a b A gt a e Mnozhina FIRST dlya A dorivnyuye a e ta mnozhina FOLLOW a livo rekursivnijLiva rekursiya sprichinit konflikt FIRST FIRST z usima alternativami E gt E term alt1 alt2 Rozv yazannya konfliktiv LL 1 red Livostoronnye vinesennya za duzhkiPracyuye priblizno yak 3x 3y 3 x y A gt X X Y Z staye A gt X B B gt Y Z e Mozhe zastosovuvatis koli dvi alternativi pochinayutsya z odnogo i togo zh simvolu yak u konflikti FIRST FIRST PidstanovkaPidstanovka pravila v inshe pravilo shob viluchiti nepryami konflikti chi konflikti FIRST FOLLOW Zauvazhte sho ce mozhe sprichiniti konflikt FIRST FIRST Viluchennya livoyi rekursiyi 1 Prostij priklad viluchennya livoyi rekursiyi Nastupni produktivni pravila mayut livu rekursiyu na E E gt E T gt T Ci pravila zadayut nisho inshe okrim spisku z T rozdilenih U formi regulyarnogo virazu zapisuyetsya tak T T Tomu pravila mozhna perepisati tak E gt T Z Z gt T Z gt e Teper nemaye livoyi rekursiyi ta konfliktiv u zhodnomu z pravil Div takozh red Sintaksichne derevo Analiz zverhu vniz Analiz znizu vverh JFLAPGeneratori sintaksichnih analizatoriv ANTLR Coco R JavaCCPosilannya red Proste poyasnennya mnozhin First ta Follow Arhivovano 3 sichnya 2019 u Wayback Machine angl sproba poyasniti proces stvorennya cih mnozhin u bilsh pryamolinijnij sposib Instrukciya realizaciyi LL 1 analizatora na C angl Simulyator analizatora Arhivovano 24 bereznya 2010 u Wayback Machine Dzherela red Modern Compiler Design Grune Bal Jacobs and Langendoen Otrimano z https uk wikipedia org w index php title LL analizator amp oldid 35520981