3 w.a.sEREBRQKOW, m.p.gALOˆKIN oSNOWY KONSTRUIROWANIQ KOMPILQTOROW mOSKWA 1999 pREDISLOWIE pREDLAGAEMAQ WNIMANI@ ˆITATEL...
32 downloads
195 Views
1MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
3 w.a.sEREBRQKOW, m.p.gALOˆKIN oSNOWY KONSTRUIROWANIQ KOMPILQTOROW mOSKWA 1999 pREDISLOWIE pREDLAGAEMAQ WNIMANI@ ˆITATELQ KNIGA OSNOWANA NA KURSE LEKCIJ, PROˆITANNYH NA FAKULXTETE WYˆISLITELXNOJ MATEMATIKI I KIBERNETIKI mOSKOWSKOGO GOSUDARSTWENNOGO UNIWERSITETA I FAKULXTETE UPRAWLENIQ I PRIKLADNOJ MATEMATIKI mOSKOWSKOGO FIZIKO-TEHNIˆESKOGO INSTITUTA W 19911999 GG. aWTORY NADE@TSQ, ˆTO IZDANIE KNIGI WOSPOLNIT SU]ESTWENNYJ PROBEL W LITERATURE NA RUSSKOM QZYKE PO RAZRABOTKE KOMPILQTOROW. sODERVANIE KNIGI PREDSTAWLQET SOBOJ “KLASSIˆESKIE” RAZDELY PREDMETA: LEKSIˆESKIJ I SINTAKSIˆESKIJ ANALIZ, ORGANIZACIQ PAMQTI KOMPILQTORA (TABLICY SIMWOLOW) I PERIODA ISPOLNENIQ (MAGAZINA), GENERACIQ KODA. rASSMATRIWA@TSQ NEKOTORYE SREDSTWA AWTOMATIZACII PROCESSA RAZRABOTKI TRANSLQTOROW, TAKIE KAK LEX, YACC, super, METODY GENERACII OPTIMALXNOGO KODA. sDELANA POPYTKA NA PROTQVENII WSEGO IZLOVENIQ PROWESTI EDINU@ “ATRIBUTNU@” TOˆKU ZRENIQ NA PROCESS RAZRABOTKI KOMPILQTORA. w KNIGE NE ZATRAGIWA@TSQ ˆREZWYˆAJNO WAVNYE WOPROSY GLOBALXNOJ OPTIMIZACII I RAZRABOTKI KOMPILQTOROW DLQ MA[IN S PARALLELXNOJ ARHITEKTUROJ. aWTORY NADE@TSQ WOSPOLNITX “TI PROBELY W BUDU]EM. kNIGA BUDET POLEZNOJ KAK STUDENTAM I ASPIRANTAM PROGRAMMISTSKIH SPECIALXNOSTEJ, TAK I PROFESSIONALAM W “TIH OBLASTQH.
4
gLAWA 1
wWEDENIE 1.1
mESTO KOMPILQTORA W PROGRAMMNOM OBESPEˆENII
kOMPILQTORY SOSTAWLQ@T SU]ESTWENNU@ ˆASTX PROGRAMMNOGO OBESPEˆENIQ —wm. —TO SWQZANO S TEM, ˆTO QZYKI WYSOKOGO UROWNQ STALI OSNOWNYM SREDSTWOM RAZRABOTKI PROGRAMM. tOLXKO OˆENX NEZNAˆITELXNAQ ˆASTX PROGRAMMNOGO OBESPEˆENIQ, TREBU@]AQ OSOBOJ “FFEKTIWNOSTI, PROGRAMMIRUETSQ S POMO]X@ ASSEMBLEROW. w NASTOQ]EE WREMQ RASPROSTRANENO DOWOLXNO MNOGO QZYKOW PROGRAMMIROWANIQ. nARQDU S TRADICIONNYMI QZYKAMI, TAKIMI, KAK fORTRAN, [IROKOE RASPROSTRANENIE POLUˆILI TAK NAZYWAEMYE “UNIWERSALXNYE” QZYKI (pASKALX, sI, mODULA-2, aDA I DRUGIE), A TAKVE NEKOTORYE SPECIALIZIROWANNYE (NAPRIMER, QZYK OBRABOTKI SPISOˆNYH STRUKTUR lISP). kROME TOGO, BOLX[OE RASPROSTRANENIE POLUˆILI QZYKI, SWQZANNYE S UZKIMI PREDMETNYMI OBLASTQMI, TAKIE, KAK WHODNYE QZYKI PAKETOW PRIKLADNYH PROGRAMM. dLQ NEKOTORYH QZYKOW IMEETSQ DOWOLXNO MNOGO REALIZACIJ. nAPRIMER, REALIZACIJ pASKALQ, mODULY-2 ILI sI DLQ —wm TIPA IBM PC NA RYNKE DESQTKI. s DRUGOJ STORONY, POSTOQNNO RASTU]AQ POTREBNOSTX W NOWYH KOMPILQTORAH SWQZANA S BURNYM RAZWITIEM ARHITEKTUR —wm. —TO RAZWITIE IDET PO RAZLIˆNYM NAPRAWLENIQM. sOWER[ENSTWU@TSQ STARYE ARHITEKTURY KAK W KONCEPTUALXNOM OTNO[ENII, TAK I PO OTDELXNYM, KONKRETNYM LINIQM. —TO MOVNO PROILL@STRIROWATX NA PRIMERE MIKROPROCESSORA Intel-80X86. pOSLEDOWATELXNYE WERSII “TOGO MIKROPROCESSORA 8086, 80186, 80286, 80386, 80486, 80586 OTLIˆA@TSQ NE TOLXKO TEHNIˆESKIMI HARAKTERISTIKAMI, NO I, ˆTO BOLEE WAVNO, NOWYMI WOZMOVNOSTQMI I, ZNAˆIT, IZMENENIEM (RAS[IRENIEM) SISTEMY KOMAND. eSTESTWENNO, “TO TREBUET NOWYH KOMPILQTOROW (ILI MODIFIKACII STARYH). tO VE MOVNO SKAZATX O MIKROPROCESSORAH Motorola 68010, 68020, 68030, 68040. w RAMKAH TRADICIONNYH POSLEDOWATELXNYH MA[IN WOZNIKAET BOLX[OE 5
glawa 1. wwedenie
6
ˆISLO RAZLIˆNYH NAPRAWLENIJ ARHITEKTUR. pRIMERAMI MOGUT SLUVITX ARHITEKTURY CISC, RISC. tAKIE WEDU]IE FIRMY, KAK Intel, Motorola, Sun, DEC, NAˆINA@T PEREHODITX NA WYPUSK MA[IN S RISC-ARHITEKTURAMI. eSTESTWENNO, DLQ KAVDOJ NOWOJ SISTEMY KOMAND TREBUETSQ POLNYJ NABOR NOWYH KOMPILQTOROW S RASPROSTRANENNYH QZYKOW. nAKONEC, BURNO RAZWIWA@TSQ RAZLIˆNYE PARALLELXNYE ARHITEKTURY. sREDI NIH OTMETIM WEKTORNYE, MNOGOPROCESSORNYE, S [IROKIM KOMANDNYM SLOWOM (WARIANTOM KOTORYH QWLQ@TSQ SUPERSKALQRNYE —wm). nA RYNKE UVE IME@TSQ DESQTKI TIPOW —wm S PARALLELXNOJ ARHITEKTUROJ, NAˆINAQ OT SUPER-—wm (Cray, CDC I DRUGIE), ˆEREZ RABOˆIE STANCII (NAPRIMER, IBM RS/6000) I KONˆAQ PERSONALXNYMI (NAPRIMER, NA OSNOWE MIKROPROCESSORA I-860). eSTESTWENNO, DLQ KAVDOJ IZ MA[IN SOZDA@TSQ NOWYE KOMPILQTORY DLQ MNOGIH QZYKOW PROGRAMMIROWANIQ. zDESX NEOBHODIMO TAKVE OTMETITX, ˆTO NOWYE ARHITEKTURY TREBU@T RAZRABOTKI SOWER[ENNO NOWYH PODHODOW K SOZDANI@ KOMPILQTOROW, TAK ˆTO NARQDU S SOBSTWENNO RAZRABOTKOJ KOMPILQTOROW WEDETSQ I BOLX[AQ NAUˆNAQ RABOTA PO SOZDANI@ NOWYH METODOW TRANSLQCII.
1.2
sTRUKTURA KOMPILQTORA
oBOB]ENNAQ STRUKTURA KOMPILQTORA I OSNOWNYE FAZY KOMPILQCII POKAZANY NA RIS. 1.1. nA FAZE LEKSIˆESKOGO ANALIZA (la) WHODNAQ PROGRAMMA, PREDSTAWLQ@]AQ SOBOJ POTOK LITER, RAZBIWAETSQ NA LEKSEMY – SLOWA W SOOTWETSTWII S OPREDELENIQMI QZYKA. oSNOWNYMI FORMALIZMAMI, LEVA]IM W OSNOWE REALIZACII LEKSIˆESKIH ANALIZATOROW, QWLQ@TSQ KONEˆNYE AWTOMATY I REGULQRNYE WYRAVENIQ. lEKSIˆESKIJ ANALIZATOR MOVET RABOTATX W DWUH OSNOWNYH REVIMAH: LIBO KAK PODPROGRAMMA, WYZYWAEMAQ SINTAKSIˆESKIM ANALIZATOROM DLQ POLUˆENIQ OˆEREDNOJ LEKSEMY, LIBO KAK POLNYJ PROHOD, REZULXTATOM KOTOROGO QWLQETSQ FAJL LEKSEM. w PROCESSE WYDELENIQ LEKSEM la MOVET KAK SAMOSTOQTELXNO STROITX TABLICY OB˙EKTOW (IDENTIFIKATOROW, STROK, ˆISEL I T.D.), TAK I WYDAWATX ZNAˆENIQ DLQ KAVDOJ LEKSEMY PRI OˆEREDNOM K NEMU OBRA]ENII. w “TOM SLUˆAE TABLICY OB˙EKTOW STROQTSQ W POSLEDU@]IH FAZAH (NAPRIMER, W PROCESSE SINTAKSIˆESKOGO ANALIZA). nA “TAPE la OBNARUVIWA@TSQ NEKOTORYE (PROSTEJ[IE) O[IBKI (NEDOPUSTIMYE SIMWOLY, NEPRAWILXNAQ ZAPISX ˆISEL, IDENTIFIKATOROW I DR.). oSNOWNAQ ZADAˆA SINTAKSIˆESKOGO ANALIZA – RAZBOR STRUKTURY PROGRAMMY. kAK PRAWILO, POD STRUKTUROJ PONIMAETSQ DEREWO, SOOTWETSTWU@]EE RAZBORU W KONTEKSTNO-SWOBODNOJ GRAMMATIKE QZYKA. w NASTOQ]EE WREMQ ˆA]E WSEGO ISPOLXZUETSQ LIBO LL(1)-ANALIZ (I EGO WARIANT – REKURSIWNYJ SPUSK), LIBO LR(1)-ANALIZ I EGO WARIANTY (LR(0), SLR(1), LALR(1) I DRUGIE). rEKURSIWNYJ SPUSK ˆA]E ISPOLXZUETSQ PRI RUˆNOM PROGRAMMIROWANII SINTAKSIˆESKOGO ANALIZATORA, LR(1) – PRI ISPOLXZOWANII SISTEM AWTOMATIˆESKOGO POSTROENIQ SINTAKSIˆESKIH ANALIZATOROW.
1.2. struktura kompilqtora
V
NV
>
!
" -# $ &%'%
V
NV
>
(*) + ,
- $ %.0/+ # $ &%'%
V
NV
>
7
;S TVU>T+WYX ZW [Z\ U>]^+X _a`abc+T+^+d+ZWU>T+e gf Z9h?ZeTh?]i^+TVh?] U>]^+X _a`abc+T+^+d+ZWU>T+e
j Uh?_a^k+U>_?h?T+e]lalaT+Znm?Z9h?ZeT U>]^+X _a`abc+T+^+d+ZWU>T+e
12 3 4 5 36 +) 7 98;: ) )+=? ! @? 5 "2A - $ BDCEF % E
S*h?T+\2Z9ogk+U>TVp?la]9qrsTVh?\s] tvu?h?Z rs_aW [la]>qVw uaT+[9U rs_aW [la]9qVwUh?T+xaW _K_m+-hzy {
G 6 7 4 5 H ' I C %9J
S*h?T+\2Z9ogk+U>TVp?la]9qrsTVh?\s] tvTVh?_aZl?U>_?h?T+e]lalabgx}|h?] rs{
12 3 4 5K ) = L . C % F NMON % I>P Q % % N$ B ' R $ # $ % $ %
~ ^+daZWU>labgxK\sTVm k?X+
rIS. 1.1:
8
glawa 1. wwedenie
rEZULXTATOM SINTAKSIˆESKOGO ANALIZA QWLQETSQ SINTAKSIˆESKOE DEREWO SO SSYLKAMI NA TABLICY OB˙EKTOW. w PROCESSE SINTAKSIˆESKOGO ANALIZA TAKVE OBNARUVIWA@TSQ O[IBKI, SWQZANNYE SO STRUKTUROJ PROGRAMMY. nA “TAPE KONTEKSTNOGO ANALIZA WYQWLQ@TSQ ZAWISIMOSTI MEVDU ˆASTQMI PROGRAMMY, KOTORYE NE MOGUT BYTX OPISANY KONTEKSTNO-SWOBODNYM SINTAKSISOM. —TO W OSNOWNOM SWQZI “OPISANIE-ISPOLXZOWANIE”, W ˆASTNOSTI, ANALIZ TIPOW OB˙EKTOW, ANALIZ OBLASTEJ WIDIMOSTI, SOOTWETSTWIE PARAMETROW, METKI I DRUGIE. w PROCESSE KONTEKSTNOGO ANALIZA TABLICY OB˙EKTOW POPOLNQ@TSQ INFORMACIEJ OB OPISANIQH (SWOJSTWAH) OB˙EKTOW. oSNOWNYM FORMALIZMOM, ISPOLXZU@]IMSQ PRI KONTEKSTNOM ANALIZE, QWLQETSQ APPARAT ATRIBUTNYH GRAMMATIK. rEZULXTATOM KONTEKSTNOGO ANALIZA QWLQETSQ ATRIBUTIROWANNOE DEREWO PROGRAMMY. iNFORMACIQ OB OB˙EKTAH MOVET BYTX KAK RASSREDOTOˆENA W SAMOM DEREWE, TAK I SOSREDOTOˆENA W OTDELXNYH TABLICAH OB˙EKTOW. w PROCESSE KONTEKSTNOGO ANALIZA TAKVE MOGUT BYTX OBNARUVENY O[IBKI, SWQZANNYE S NEPRAWILXNYM ISPOLXZOWANIEM OB˙EKTOW. zATEM PROGRAMMA MOVET BYTX PEREWEDENA WO WNUTRENNEE PREDSTAWLENIE. —TO DELAETSQ DLQ CELEJ OPTIMIZACII I/ILI UDOBSTWA GENERACII KODA. e]E ODNOJ CELX@ PREOBRAZOWANIQ PROGRAMMY WO WNUTRENNEE PREDSTAWLENIE QWLQETSQ VELANIE IMETX PERENOSIMYJ KOMPILQTOR. tOGDA TOLXKO POSLEDNQQ FAZA (GENERACIQ KODA) QWLQETSQ MA[INNO-ZAWISIMOJ. w KAˆESTWE WNUTRENNEGO PREDSTAWLENIQ MOVET ISPOLXZOWATXSQ PREFIKSNAQ ILI POSTFIKSNAQ ZAPISX, ORIENTIROWANNYJ GRAF, TROJKI, ˆETWERKI I DRUGIE. fAZ OPTIMIZACII MOVET BYTX NESKOLXKO. oPTIMIZACII OBYˆNO DELQT NA MA[INNO-ZAWISIMYE I MA[INNO-NEZAWISIMYE, LOKALXNYE I GLOBALXNYE. ˜ASTX MA[INNO-ZAWISIMOJ OPTIMIZACII WYPOLNQETSQ NA FAZE GENERACII KODA. gLOBALXNAQ OPTIMIZACIQ PYTAETSQ PRINQTX WO WNIMANIE STRUKTURU WSEJ PROGRAMMY, LOKALXNAQ – TOLXKO NEBOLX[IH EE FRAGMENTOW. gLOBALXNAQ OPTIMIZACIQ OSNOWYWAETSQ NA GLOBALXNOM POTOKOWOM ANALIZE, KOTORYJ WYPOLNQETSQ NA GRAFE PROGRAMMY I PREDSTAWLQET PO SU]ESTWU PREOBRAZOWANIE “TOGO GRAFA. pRI “TOM MOGUT UˆITYWATXSQ TAKIE SWOJSTWA PROGRAMMY, KAK MEVPROCEDURNYJ ANALIZ, MEVMODULXNYJ ANALIZ, ANALIZ OBLASTEJ VIZNI PEREMENNYH I T.D. nAKONEC, GENERACIQ KODA – POSLEDNQQ FAZA TRANSLQCII. rEZULXTATOM EE QWLQETSQ LIBO ASSEMBLERNYJ MODULX, LIBO OB˙EKTNYJ (ILI ZAGRUZOˆNYJ) MODULX. w PROCESSE GENERACII KODA MOGUT WYPOLNQTXSQ NEKOTORYE LOKALXNYE OPTIMIZACII, TAKIE KAK RASPREDELENIE REGISTROW, WYBOR DLINNYH ILI KOROTKIH PEREHODOW, UˆET STOIMOSTI KOMAND PRI WYBORE KONKRETNOJ POSLEDOWATELXNOSTI KOMAND. dLQ GENERACII KODA RAZRABOTANY RAZLIˆNYE METODY, TAKIE KAK TABLICY RE[ENIJ, SOPOSTAWLENIE OBRAZCOW, WKL@ˆA@]EE DINAMIˆESKOE PROGRAMMIROWANIE, RAZLIˆNYE SINTAKSIˆESKIE METODY. kONEˆNO, TE ILI INYE FAZY TRANSLQTORA MOGUT LIBO OTSUTSTWOWATX SOWSEM, LIBO OB˙EDINQTXSQ. w PROSTEJ[EM SLUˆAE ODNOPROHODNOGO TRANSLQTORA NET QWNOJ FAZY GENERACII PROMEVUTOˆNOGO PREDSTAWLENIQ I OPTIMIZACII, OSTALXNYE FAZY OB˙EDINENY W ODNU, PRIˆEM NET I QWNO POSTROENNOGO SINTAKSIˆESKOGO DEREWA.
gLAWA 2
qZYKI I IH PREDSTAWLENIE 2.1
aLFAWITY, CEPOˆKI I QZYKI
˜TO TAKOE TEORIQ QZYKOW? ˜TOBY OTWETITX NA “TOT WOPROS, SNAˆALA NADO SPROSITX: “˜TO TAKOE QZYK?” mY OPREDELIM FORMALXNYJ QZYK ABSTRAKTNO KAK MATEMATIˆESKU@ SISTEMU. —TOT FORMALIZM DAST NAM WOZMOVNOSTX DELATX STROGIE SUVDENIQ OTNOSITELXNO FORMALXNYH QZYKOW. iMEQ “TO W WIDU, DADIM SLEDU@]IE OPREDELENIQ. aLFAWIT, ILI SLOWARX – “TO KONEˆNOE MNOVESTWO SIMWOLOW. dLQ OBOZNAˆENIQ SIMWOLOW MY BUDEM POLXZOWATXSQ CIFRAMI, LATINSKIMI BUKWAMI I SPECIALXNYMI LITERAMI TIPA #, $. pUSTX V – ALFAWIT. cEPOˆKA W ALFAWITE V – “TO L@BAQ STROKA KONEˆNOJ DLINY, SOSTAWLENNAQ IZ SIMWOLOW ALFAWITA V . sINONIMOM CEPOˆKI QWLQ@TSQ PREDLOVENIE, STROKA I SLOWO. pUSTAQ CEPOˆKA (OBOZNAˆAETSQ e) – “TO CEPOˆKA, W KOTORU@ NE WHODIT NI ODIN SIMWOL. kONKATENACIEJ CEPOˆEK x I y NAZYWAETSQ CEPOˆKA xy. zAMETIM, ˆTO xe = ex = x DLQ L@BOJ CEPOˆKI x. pUSTX x, y, z – PROIZWOLXNYE CEPOˆKI W NEKOTOROM ALFAWITE. cEPOˆKA y NAZYWAETSQ PODCEPOˆKOJ CEPOˆKI xyz. cEPOˆKI x I y NAZYWA@TSQ, SOOTWETSTWENNO, PREFIKSOM I SUFFIKSOM CEPOˆKI xy. zAMETIM, ˆTO L@BOJ PREFIKS ILI SUFFIKS CEPOˆKI QWLQETSQ PODCEPOˆKOJ “TOJ CEPOˆKI. kROME TOGO, PUSTAQ CEPOˆKA QWLQETSQ PREFIKSOM, SUFFIKSOM I PODCEPOˆKOJ DLQ L@BOJ CEPOˆKI. pRIMER 2.1. dLQ CEPOˆKI abbba PREFIKSOM QWLQETSQ L@BAQ CEPOˆKA IZ MNOVESTWA L1 = {e, a, ab, abb, abbb, abbba}, SUFFIKSOM QWLQETSQ L@BAQ CEPOˆKA IZ MNOVESTWA L2 = {e, a, ba, bba, bbba, abbba}, PODCEPOˆKOJ QWLQETSQ L@BAQ CEPOˆKA IZ MNOVESTWA L1 ∪ L2 . dLINOJ CEPOˆKI w (OBOZNAˆAETSQ |w|) NAZYWAETSQ ˆISLO SIMWOLOW W NEJ. nAPRIMER, |abababa| = 7, A |e| = 0. qZYK W ALFAWITE V – “TO MNOVESTWO CEPOˆEK W ALFAWITE V . 9
glawa 2. qzyki i ih predstawlenie
10
pRIMER 2.2. pUSTX DAN ALFAWIT V = {a, b}. wOT NEKOTORYE QZYKI W ALFAWITE V : A) L1 = ∅ – PUSTOJ QZYK; B) L2 = {e} – QZYK, SODERVA]IJ TOLXKO PUSTU@ CEPOˆKU (ZAMETIM, ˆTO L1 I L2 – RAZLIˆNYE QZYKI); W) L3 = {e, a, b, aa, ab, ba, bb} – QZYK, SODERVA]IJ CEPOˆKI IZ a I b, DLINA KOTORYH NE PREWOSHODIT 2; G) L4 – QZYK, WKL@ˆA@]IJ WSEWOZMOVNYE CEPOˆKI IZ a I b, SODERVA]IE ˆETNOE ˆISLO a I ˆETNOE ˆISLO b; 2
D) L5 = {an |n > 0} – QZYK CEPOˆEK IZ a, DLINY KOTORYH PREDSTAWLQ@T SOBOJ KWADRATY NATURALXNYH ˆISEL. dWA POSLEDNIH QZYKA SODERVAT BESKONEˆNOE ˆISLO CEPOˆEK.
wWEDEM OBOZNAˆENIE V ∗ DLQ MNOVESTWA WSEH CEPOˆEK W ALFAWITE V , WKL@ˆAQ PUSTU@ CEPOˆKU. kAVDYJ QZYK W ALFAWITE V QWLQETSQ PODMNOVESTWOM V ∗ . dLQ OBOZNAˆENIQ MNOVESTWA WSEH CEPOˆEK W ALFAWITE V , KROME PUSTOJ CEPOˆKI, BUDEM ISPOLXZOWATX V + . pRIMER 2.3. pUSTX V = {0, 1}. tOGDA V ∗ = {e, 0, 1, 00, 01, 10, 11, 000, ...}, V + = {0, 1, 00, 01, 10, 11, 000, ...}. wWEDEM NEKOTORYE OPERACII NAD QZYKAMI. pUSTX L1 I L2 – QZYKI W ALFAWITE V . kONKATENACIEJ QZYKOW L1 I L2 NAZYWAETSQ QZYK L1 L2 = {xy|x ∈ L1 , y ∈ L2 }. pUSTX L – QZYK W ALFAWITE V . iTERACIEJ QZYKA L NAZYWAETSQ QZYK L ∗ , OPREDELQEMYJ SLEDU@]IM OBRAZOM: (1) L0 = {e}; (2) Ln = LLn−1 , n > 0; (3) L∗ =
∞ S
Ln .
n=0
pRIMER 2.4. pUSTX L1 = {aa, bb} I L2 = {e, a, bb}. tOGDA L1 L2 = {aa, bb, aaa, bba, aabb, bbbb}, I L∗1 = {e, aa, bb, aaaa, aabb, bbaa, bbbb, aaaaaa, ...}.
bOLX[INSTWO QZYKOW, PREDSTAWLQ@]IH INTERES, SODERVAT BESKONEˆNOE ˆISLO CEPOˆEK. pRI “TOM WOZNIKA@T TRI WAVNYH WOPROSA. wO-PERWYH, KAK PREDSTAWITX QZYK (T.E. SPECIFICIROWATX WHODQ]IE W NEGO CEPOˆKI)? eSLI QZYK SODERVIT TOLXKO KONEˆNOE MNOVESTWO CEPOˆEK, OTWET PROST. mOVNO PROSTO PEREˆISLITX EGO CEPOˆKI. eSLI QZYK BESKONEˆEN, NEOBHODIMO NAJTI DLQ NEGO KONEˆNOE PREDSTAWLENIE. —TO KONEˆNOE PREDSTAWLENIE, W SWO@ OˆEREDX, BUDET STROKOJ SIMWOLOW NAD NEKOTORYM ALFAWITOM WMESTE S NEKOTOROJ INTERPRETACIEJ, SWQZYWA@]EJ “TO PREDSTAWLENIE S QZYKOM.
2.2. predstawlenie qzykow
11
wO-WTORYH, DLQ L@BOGO LI QZYKA SU]ESTWUET KONEˆNOE PREDSTAWLENIE? mOVNO PREDPOLOVITX, ˆTO OTWET OTRICATELEN. mY UWIDIM, ˆTO MNOVESTWO WSEH CEPOˆEK NAD ALFAWITOM SˆETNO. qZYK – “TO L@BOE PODMNOVESTWO CEPOˆEK. iZ TEORII MNOVESTW IZWESTNO, ˆTO MNOVESTWO WSEH PODMNOVESTW SˆETNOGO MNOVESTWA NESˆETNO. hOTQ MY I NE DALI STROGOGO OPREDELENIQ TOGO, ˆTO QWLQETSQ KONEˆNYM PREDSTAWLENIEM, INTUITIWNO QSNO, ˆTO L@BOE RAZUMNOE OPREDELENIE KONEˆNOGO PREDSTAWLENIQ WEDET TOLXKO K SˆETNOMU MNOVESTWU KONEˆNYH PREDSTAWLENIJ, POSKOLXKU NUVNO IMETX WOZMOVNOSTX ZAPISATX TAKOE KONEˆNOE PREDSTAWLENIE W WIDE STROKI SIMWOLOW KONEˆNOJ DLINY. pO“TOMU QZYKOW ZNAˆITELXNO BOLX[E, ˆEM KONEˆNYH PREDSTAWLENIJ. w-TRETXIH, MOVNO SPROSITX, KAKOWA STRUKTURA TEH KLASSOW QZYKOW, DLQ KOTORYH SU]ESTWUET KONEˆNOE PREDSTAWLENIE?
2.2
pREDSTAWLENIE QZYKOW
pROCEDURA – “TO KONEˆNAQ POSLEDOWATELXNOSTX INSTRUKCIJ, KOTORYE MOGUT BYTX MEHANIˆESKI WYPOLNENY. pRIMEROM MOVET SLUVITX MA[INNAQ PROGRAMMA. pROCEDURA, KOTORAQ WSEGDA ZAKANˆIWAETSQ, NAZYWAETSQ ALGORITMOM. oDIN IZ SPOSOBOW PREDSTAWLENIQ QZYKA – DATX ALGORITM, OPREDELQ@]IJ, PRINADLEVIT LI CEPOˆKA QZYKU. bOLEE OB]IJ SPOSOB SOSTOIT W TOM, ˆTOBY DATX PROCEDURU, KOTORAQ OSTANAWLIWAETSQ S OTWETOM “DA” DLQ CEPOˆEK, PRINADLEVA]IH QZYKU, I LIBO OSTANAWLIWAETSQ S OTWETOM “NET”, LIBO WOOB]E NE OSTANAWLIWAETSQ DLQ CEPOˆEK, NE PRINADLEVA]IH QZYKU. gOWORQT, ˆTO TAKAQ PROCEDURA ILI ALGORITM RASPOZNAET QZYK. tAKOJ METOD PREDSTAWLQET QZYK S TOˆKI ZRENIQ RASPOZNAWANIQ. qZYK MOVNO TAKVE PREDSTAWITX METODOM POROVDENIQ. a IMENNO, MOVNO DATX PROCEDURU, KOTORAQ SISTEMATIˆESKI POROVDAET W OPREDELENNOM PORQDKE CEPOˆKI QZYKA. eSLI MY MOVEM RASPOZNATX CEPOˆKI QZYKA NAD ALFAWITOM V LIBO S POMO]X@ PROCEDURY, LIBO S POMO]X@ ALGORITMA, TO MY MOVEM I GENERIROWATX QZYK, POSKOLXKU MY MOVEM SISTEMATIˆESKI GENERIROWATX WSE CEPOˆKI IZ V ∗ , PROWERQTX KAVDU@ CEPOˆKU NA PRINADLEVNOSTX QZYKU I WYDAWATX SPISOK TOLXKO CEPOˆEK QZYKA. nO ESLI PROCEDURA NE WSEGDA ZAKANˆIWAETSQ PRI PROWERKE CEPOˆKI, MY NE SDWINEMSQ DALX[E PERWOJ CEPOˆKI, NA KOTOROJ PROCEDURA NE ZAKANˆIWAETSQ. —TU PROBLEMU MOVNO OBOJTI, ORGANIZOWAW PROWERKU TAKIM OBRAZOM, ˆTOBY PROCEDURA NIKOGDA NE PRODOLVALA PROWERQTX ODNU CEPOˆKU BESKONEˆNO. dLQ “TOGO WWEDEM SLEDU@]U@ KONSTRUKCI@. pREDPOLOVIM, ˆTO V IMEET p SIMWOLOW. mY MOVEM RASSMATRIWATX CEPOˆKI IZ V ∗ KAK ˆISLA, PREDSTAWLENNYE W BAZISE p, PL@S PUSTAQ CEPOˆKA e. mOVNO ZANUMEROWATX CEPOˆKI W PORQDKE WOZRASTANIQ DLINY I W “ˆISLOWOM” PORQDKE DLQ CEPOˆEK ODINAKOWOJ DLINY. tAKAQ NUMERACIQ DLQ CEPOˆEK QZYKA {a, b, c}∗ PRIWEDENA NA RIS. 2.1, A. pUSTX P – PROCEDURA DLQ PROWERKI PRINADLEVNOSTI CEPOˆKI QZYKU L. pREDPOLOVIM, ˆTO P MOVET BYTX PREDSTAWLENA DISKRETNYMI [AGAMI, TAK
glawa 2. qzyki i ih predstawlenie
12
ˆTO IMEET SMYSL GOWORITX OB i-OM [AGE PROCEDURY DLQ L@BOJ DANNOJ CEPOˆKI. pREVDE ˆEM DATX PROCEDURU PEREˆISLENIQ CEPOˆEK QZYKA L, DADIM PROCEDURU NUMERACII PAR POLOVITELXNYH ˆISEL. wSE UPORQDOˆENNYE PARY POLOVITELXNYH ˆISEL (x, y) MOVNO OTOBRAZITX NA MNOVESTWO POLOVITELXNYH ˆISEL SLEDU@]EJ FORMULOJ: z = (x + y − 1)(x + y − 2)/2 + y pARY CELYH POLOVITELXNYH ˆISEL MOVNO UPORQDOˆITX W SOOTWETSTWII SO ZNAˆENIEM z (RIS. 2.1, B). 1 2 3 4 5 6 7 8 9 ...
e a b c aa ab ac ba bb ...
y
x
1 2 3 4 5 1 1 3 6 10 15 2 2 5 9 14 3 4 8 13 4 7 12 5 11 z(x, y)
A
B rIS. 2.1:
tEPERX MOVNO DATX PROCEDURU NUMERACII CEPOˆEK L. nUMERUEM UPORQDOˆENNYE PARY CELYH POLOVITELXNYH ˆISEL. pRI NUMERACII PARY (i, j) GENERIRUEM i-@ CEPOˆKU IZ V ∗ I PRIMENQEM K CEPOˆKE PERWYE j [AGOW PROCEDURY P. kAK TOLXKO MY OPREDELILI, ˆTO SGENERIROWANNAQ CEPOˆKA PRINADLEVIT L, DOBAWLQEM CEPOˆKU K SPISKU “LEMENTOW L. eSLI CEPOˆKA i PRINADLEVIT L, “TO BUDET OPREDELENO P ZA j [AGOW DLQ NEKOTOROGO KONEˆNOGO j. pRI PEREˆISLENII (i, j) BUDET SGENERIROWANA CEPOˆKU S NOMEROM i. lEGKO WIDETX, ˆTO “TA PROCEDURA PEREˆISLQET WSE CEPOˆKI L. eSLI MY IMEEM PROCEDURU GENERACII CEPOˆKU QZYKA, TO MY WSEGDA MOVEM POSTROITX PROCEDURU RASPOZNAWANIQ PREDLOVENIJ QZYKA, NO NE WSEGDA ALGORITM. dLQ OPREDELENIQ TOGO, PRINADLEVIT LI x QZYKU L, PROSTO NUMERUEM PREDLOVENIQ L I SRAWNIWAEM x S KAVDYM PREDLOVENIEM. eSLI SGENERIROWANO x, PROCEDURA OSTANAWLIWAETSQ, RASPOZNAW, ˆTO x PRINADLEVIT L. kONEˆNO, ESLI x NE PRINADLEVIT L, PROCEDURA NIKOGDA NE ZAKONˆITSQ. qZYK, PREDLOVENIQ KOTOROGO MOGUT BYTX SGENERIROWANY PROCEDUROJ, NAZYWAETSQ REKURSIWNO PEREˆISLIMYM. qZYK REKURSIWNO PEREˆISLIM, ESLI IMEETSQ PROCEDURA, RASPOZNA@]AQ PREDLOVENIQ QZYKA. gOWORQT, ˆTO QZYK REKURSIWEN, ESLI SU]ESTWUET ALGORITM DLQ RASPOZNAWANIQ QZYKA. kLASS REKURSIWNYH QZYKOW QWLQETSQ SOBSTWENNYM PODMNOVESTWOM KLASSA REKURSIWNO PEREˆISLIMYH QZYKOW. mALO TOGO, SU]ESTWU@T QZYKI, NE QWLQ@]IESQ DAVE REKURSIWNO PEREˆISLIMYMI.
2.3. grammatiki
13
wOZWRA]AQSX K WOPROSU “˜TO ESTX TEORIQ QZYKOW?”, MOVNO SKAZATX, ˆTO “TO – IZUˆENIE MNOVESTW CEPOˆEK, IH PREDSTAWLENIJ, STRUKTURY I SWOJSTW.
2.3
gRAMMATIKI
2.3.1 fORMALXNOE OPREDELENIE GRAMMATIKI dLQ NAS NAIBOLX[IJ INTERES PREDSTAWLQET ODNA IZ SISTEM GENERACII QZYKOW – GRAMMATIKI. pONQTIE GRAMMATIKI IZNAˆALXNO BYLO FORMALIZOWANO LINGWISTAMI PRI IZUˆENII ESTESTWENNYH QZYKOW. pREDPOLAGALOSX, ˆTO “TO MOVET POMOˆX PRI IH AWTOMATIˆESKOJ TRANSLQCII. oDNAKO, NAILUˆ[IE REZULXTATY W “TOM NAPRAWLENII DOSTIGNUTY PRI OPISANII NE ESTESTWENNYH QZYKOW, A QZYKOW PROGRAMMIROWANIQ. pRIMEROM MOVET SLUVITX SPOSOB OPISANIQ SINTAKSISA QZYKOW PROGRAMMIROWANIQ PRI POMO]I bnf – FORMY b“KUSA-nAURA. oPREDELENIE. gRAMMATIKA – “TO ˆETWERKA G = (N, T, P, S), GDE (1) N – ALFAWIT NETERMINALXNYH SIMWOLOW; (2) T – ALFAWIT TERMINALXNYH SIMWOLOW, N ∩ T = ∅; (3) P – KONEˆNOE MNOVESTWO PRAWIL WIDA α → β, GDE α ∈ (N ∪ T )+ , β ∈ (N ∪ T )∗ ; (4) S ∈ N – NAˆALXNYJ SIMWOL (ILI AKSIOMA) GRAMMATIKI. mY BUDEM ISPOLXZOWATX BOLX[IE LATINSKIE BUKWY DLQ OBOZNAˆENIQ NETERMINALXNYH SIMWOLOW, MALYE LATINSKIE BUKWY IZ NAˆALA ALFAWITA DLQ OBOZNAˆENIQ TERMINALXNYH SIMWOLOW, MALYE LATINSKIE BUKWY IZ KONCA ALFAWITA DLQ OBOZNAˆENIQ CEPOˆEK IZ T ∗ I, NAKONEC, MALYE GREˆESKIE BUKWY DLQ OBOZNAˆENIQ CEPOˆEK IZ (N ∪ T )∗ . bUDEM ISPOLXZOWATX TAKVE SOKRA]ENNU@ ZAPISX A → α1 |α2 | ... |αn DLQ OBOZNAˆENIQ GRUPPY PRAWIL A → α1 , A → α2 , ... , A → αn . oPREDELIM NA MNOVESTWE (N ∪ T )∗ BINARNOE OTNO[ENIE WYWODIMOSTI ⇒ SLEDU@]IM OBRAZOM: ESLI δ → γ ∈ P , TO αδβ ⇒ αγβ DLQ WSEH α, β ∈ (N ∪ T )∗ . eSLI α1 ⇒ α2 , TO GOWORQT, ˆTO CEPOˆKA α2 NEPOSREDSTWENNO WYWODIMA IZ α1 . mY BUDEM ISPOLXZOWATX TAKVE REFLEKSIWNO-TRANZITIWNOE I TRANZITIWNOE ZAMYKANIQ OTNO[ENIQ ⇒, A TAKVE EGO STEPENX k > 0 (OBOZNAˆAEMYE SOOTWETSTWENNO ⇒∗ , ⇒+ I ⇒k ). eSLI α1 ⇒∗ α2 (α1 ⇒+ α2 , α1 ⇒k α2 ), TO GOWORQT, ˆTO CEPOˆKA α2 WYWODIMA (NETRIWIALXNO WYWODIMA, WYWODIMA ZA k [AGOW) IZ α1 . eSLI α ⇒k β (k > 0), TO SU]ESTWUET POSLEDOWATELXNOSTX [AGOW γ0 ⇒ γ1 ⇒ γ2 ⇒ ... ⇒ γk−1 ⇒ γk
glawa 2. qzyki i ih predstawlenie
14
GDE α = γ0 I β = γk . pOSLEDOWATELXNOSTX CEPOˆEK γ0 , γ1 , γ2 , ... , γk W “TOM SLUˆAE NAZYWA@T WYWODOM β IZ α. sENTENCIALXNOJ FORMOJ GRAMMATIKI G NAZYWAETSQ CEPOˆKA, WYWODIMAQ IZ EE NAˆALXNOGO SIMWOLA. qZYKOM, POROVDAEMYM GRAMMATIKOJ G (OBOZNAˆAETSQ L(G)), NAZYWAETSQ MNOVESTWO WSEH EE TERMINALXNYH SENTENCIALXNYH FORM, T.E. L(G) = {w|w ∈ T ∗ , S ⇒+ w} gRAMMATIKI G1 I G2 NAZYWA@TSQ “KWIWALENTNYMI, ESLI ONI POROVDA@T ODIN I TOT VE QZYK, T.E. L(G1 ) = L(G2 ). pRIMER 2.5. gRAMMATIKA G = ({S, B, C}, {a, b, c}, P, S), GDE P = {S → aSBC, S → aBC, CB → BC, aB → ab, bB → bb, bC → bc, cC → cc}, POROVDAET QZYK L(G) = {an bn cn |n > 0}. dEJSTWITELXNO, PRIMENQEM n − 1 RAZ PRAWILO 1 I POLUˆAEM an−1 S(BC)n−1 , ZATEM n − 1 RAZ PRAWILO 2 I POLUˆAEM an (BC)n , ZATEM n(n − 1)/2 RAZ PRAWILO 3 I POLUˆAEM an B n C n . zATEM ISPOLXZUEM PRAWILO 4 I POLUˆAEM an bB n−1 C n . zATEM PRIMENQEM n − 1 RAZ PRAWILO 5 I POLUˆAEM an bn C n . zATEM PRIMENQEM PRAWILO 6 I n−1 RAZ PRAWILO 7 I POLUˆAEM an bn cn . mOVNO POKAZATX, ˆTO QZYK L(G) SOSTOIT IZ CEPOˆEK TOLXKO TAKOGO WIDA. pRIMER 2.6. rASSMOTRIM GRAMMATIKU G = ({S}, {0, 1}, {S → 0S1, S → 01}, S). lEGKO WIDETX, ˆTO CEPOˆKA 000111 ∈ L(G), TAK KAK SU]ESTWUET WYWOD S ⇒ 0S1 ⇒ 00S11 ⇒ 000111 nETRUDNO POKAZATX, ˆTO GRAMMATIKA POROVDAET QZYK L(G) = {0n 1n |n > 0}.
pRIMER 2.7. rASSMOTRIM GRAMMATIKU G = ({S, A}, {0, 1}, {S → 0S, S → 0A, A → 1A, A → 1}, S). nETRUDNO POKAZATX, ˆTO GRAMMATIKA POROVDAET QZYK L(G) = {0n 1m |n, m > 0}.
2.3.2
tIPY GRAMMATIK I IH SWOJSTWA
rASSMOTRIM KLASSIFIKACI@ GRAMMATIK (PREDLOVENNU@ n.hOMSKIM), OSNOWANNU@ NA WIDE IH PRAWIL. oPREDELENIE. pUSTX DANA GRAMMATIKA G = (N, T, P, S). tOGDA (1) ESLI PRAWILA GRAMMATIKI NE UDOWLETWORQ@T NIKAKIM OGRANIˆENIQM, TO EE NAZYWA@T GRAMMATIKOJ TIPA 0, ILI GRAMMATIKOJ BEZ OGRANIˆENIJ. (2) ESLI A) KAVDOE PRAWILO GRAMMATIKI, KROME S → e, IMEET WID α → β, GDE |α| 6 |β|, I
2.3. grammatiki
15
B) W TOM SLUˆAE, KOGDA S → e ∈ P , SIMWOL S NE WSTREˆAETSQ W PRAWYH ˆASTQH PRAWIL, GRAMATIKU NAZYWA@T GRAMMATIKOJ TIPA 1, ILI NEUKORAˆIWA@]EJ. (3) ESLI KAVDOE PRAWILO GRAMMATIKI IMEET WID A → β, GDE A ∈ N , β ∈ (N ∪ T )∗ , TO EE NAZYWA@T GRAMMATIKOJ TIPA 2, ILI KONTEKSTNOSWOBODNOJ (ks-GRAMMATIKOJ). (4) ESLI KAVDOE PRAWILO GRAMMATIKI IMEET WID LIBO A → xB, LIBO A → x, GDE A, B ∈ N , x ∈ T ∗ TO EE NAZYWA@T GRAMMATIKOJ TIPA 3, ILI PRAWOLINEJNOJ. lEGKO WIDETX, ˆTO GRAMMATIKA W PRIMERE 2.5 – NEUKORAˆIWA@]AQ, W PRIMERE 2.6 – KONTEKSTNO-SWOBODNAQ, W PRIMERE 2.7 – PRAWOLINEJNAQ. qZYK, POROVDAEMYJ GRAMMATIKOJ TIPA i, NAZYWA@T QZYKOM TIPA i. qZYK TIPA 0 NAZYWA@T TAKVE QZYKOM BEZ OGRANIˆENIJ, QZYK TIPA 1 – KONTEKSTNOZAWISIMYM (kz), QZYK TIPA 2 – KONTEKSTNO-SWOBODNYM (ks), QZYK TIPA 3 – PRAWOLINEJNYM. tEOREMA 2.1. kAVDYJ KONTEKSTNO-SWOBODNYJ QZYK MOVET BYTX POROVDEN NEUKORAˆIWA@]EJ GRAMMATIKOJ. dOKAZATELXSTWO. pUSTX L – KONTEKSTNO-SWOBODNYJ QZYK. tOGDA SU]ESTWUET KONTEKSTNO-SWOBODNAQ GRAMMATIKA G = (N, T, P, S), POROVDA@]AQ L. pOSTROIM NOWU@ GRAMMATIKU G0 = (N 0 , T, P 0 , S 0 ) SLEDU@]IM OBRAZOM: 1. eSLI W P ESTX PRAWILO WIDA A → α0 B1 α1 ... Bk αk , GDE k > 0, Bi ⇒+ e DLQ 1 6 i 6 k, I NI IZ ODNOJ CEPOˆKI αj (0 6 j 6 k) NE WYWODITSQ e, TO WKL@ˆITX W P 0 WSE PRAWILA (KROME A → e) WIDA A → α0 X1 α1 ... Xk αk GDE Xi – “TO LIBO Bi , LIBO e. 2. eSLI S ⇒+ e, TO WKL@ˆITX W P 0 PRAWILA S 0 → S, S 0 → e I POLOVITX 0 N = N ∪ {S 0 }. w PROTIWNOM SLUˆAE POLOVITX N 0 = N I S 0 = S. lEGKO WIDETX, ˆTO G0 – NEUKORAˆIWA@]AQ GRAMMATIKA. mOVNO POKAZATX PO INDUKCII, ˆTO L(G0 ) = L(G).
pUSTX Ki – KLASS WSEH QZYKOW TIPA i. dOKAZANO, ˆTO SPRAWEDLIWO SLEDU@]EE (STROGOE) WKL@ˆENIE: K3 ⊂ K2 ⊂ K1 ⊂ K0 . zAMETIM, ˆTO ESLI QZYK POROVDAETSQ NEKOTOROJ GRAMMATIKOJ, “TO NE OZNAˆAET, ˆTO ON NE MOVET BYTX POROVDEN GRAMMATIKOJ S BOLEE SILXNYMI OGRANIˆENIQMI NA PRAWILA. pRIWODIMYJ NIVE PRIMER ILL@STRIRUET “TOT FAKT.
16
glawa 2. qzyki i ih predstawlenie
pRIMER 2.8. rASSMOTRIM GRAMMATIKU G = ({S, A, B}, {0, 1}, {S → AB, A → 0A, A → 0, B → 1B, B → 1}, S). —TA GRAMMATIKA QWLQETSQ KONTEKSTNOSWOBODNOJ. lEGKO POKAZATX, ˆTO L(G) = {0n 1m |n, m > 0}. oDNAKO, W PRIMERE 2.7 PRIWEDENA PRAWOLINEJNAQ GRAMMATIKA, POROVDA@]AQ TOT VE QZYK. pOKAVEM ˆTO SU]ESTWUET ALGORITM, POZWOLQ@]IJ DLQ PROIZWOLXNOGO kz-QZYKA L W ALFAWITE T , I PROIZWOLXNOJ CEPOˆKI w ∈ T ∗ OPREDELITX, PRINADLEVIT LI w QZYKU L. tEOREMA 2.2. kAVDYJ KONTEKSTNO-ZAWISIMYJ QZYK QWLQETSQ REKURSIWNYM QZYKOM. dOKAZATELXSTWO. pUSTX L – KONTEKSTNO-ZAWISIMYJ QZYK. tOGDA SU]ESTWUET NEKOTORAQ NEUKORAˆIWA@]AQ GRAMMATIKA G = (N, T, P, S), POROVDA@]AQ L. pUSTX w ∈ T ∗ I |w| = n. eSLI n = 0, T.E. w = e, TO PRINADLEVNOSTX w ∈ L PROWERQETSQ TRIWIALXNYM OBRAZOM. tAK ˆTO BUDEM PREDPOLAGATX, ˆTO n > 0. oPREDELIM MNOVESTWO Tm KAK MNOVESTWO STROK u ∈ (N ∪ T )+ DLINY NE BOLEE n TAKIH, ˆTO WYWOD S ⇒∗ u IMEET NE BOLEE m [AGOW. qSNO, ˆTO T0 = {S}. lEGKO POKAZATX, ˆTO Tm MOVNO POLUˆITX IZ Tm−1 PROSMATRIWAQ, KAKIE STROKI S DLINOJ, MENX[EJ ILI RAWNOJ n MOVNO WYWESTI IZ STROK IZ Tm−1 PRIMENENIEM ODNOGO PRAWILA, T.E. Tm = Tm−1 ∪ {u | v ⇒ u DLQ NEKOTOROGO v ∈ Tm−1 , GDE |u| 6 n}. eSLI S ⇒∗ u I |u| 6 n, TO u ∈ Tm DLQ NEKOTOROGO m. eSLI IZ S NE WYWODITSQ u ILI |u| > n, TO u NE PRINADLEVIT Tm NI DLQ KAKOGO m. oˆEWIDNO, ˆTO Tm ⊇ Tm−1 DLQ WSEH m > 1. pOSKOLXKU Tm ZAWISIT TOLXKO OT Tm−1 , ESLI Tm = Tm−1 , TO Tm = Tm+1 = Tm+2 = ... . pROCEDURA BUDET WYˆISLQTX T1 , T2 , T3 , . . . POKA DLQ NEKOTOROGO m NE OKAVETSQ Tm = Tm−1 . eSLI w NE PRINADLEVIT Tm , TO NE PRINADLEVIT I L(G), POSKOLXKU DLQ j > m WYPOLNENO Tj = Tm . eSLI w ∈ Tm , TO S ⇒∗ w. pOKAVEM, ˆTO SU]ESTWUET TAKOE m, ˆTO Tm = Tm−1 . pOSKOLXKU DLQ KAVDOGO i > 1 SPRAWEDLIWO Ti ⊇ Ti−1 , TO ESLI Ti 6= Ti−1 , TO ˆISLO “LEMENTOW W Ti PO KRAJNEJ MERE NA 1 BOLX[E, ˆEM W Ti−1 . pUSTX |N ∪ T | = k. tOGDA ˆISLO STROK W (N ∪ T )+ DLINY MENX[EJ ILI RAWNOJ n RAWNO k + k 2 + ... + k n 6 nk n . tOLXKO “TI STROKI MOGUT BYTX W L@BOM Ti . zNAˆIT, Tm = Tm−1 DLQ NEKOTOROGO m 6 nk n . tAKIM OBRAZOM, PROCEDURA, WYˆISLQ@]AQ Ti DLQ WSEH i > 1 DO TEH POR, POKA NE BUDUT NAJDENY DWA RAWNYH MNOVESTWA, GARANTIROWANNO ZAKANˆIWAETSQ, ZNAˆIT, “TO ALGORITM.
gLAWA 3
lEKSIˆESKIJ ANALIZ oSNOWNAQ ZADAˆA LEKSIˆESKOGO ANALIZA – RAZBITX WHODNOJ TEKST, SOSTOQ]IJ IZ POSLEDOWATELXNOSTI ODINOˆNYH SIMWOLOW, NA POSLEDOWATELXNOSTX SLOW, ILI LEKSEM, T.E. WYDELITX “TI SLOWA IZ NEPRERYWNOJ POSLEDOWATELXNOSTI SIMWOLOW. wSE SIMWOLY WHODNOJ POSLEDOWATELXNOSTI S “TOJ TOˆKI ZRENIQ RAZDELQ@TSQ NA SIMWOLY, PRINADLEVA]IE KAKIM-LIBO LEKSEMAM, I SIMWOLY, RAZDELQ@]IE LEKSEMY (RAZDELITELI). w NEKOTORYH SLUˆAQH MEVDU LEKSEMAMI MOVET I NE BYTX RAZDELITELEJ. s DRUGOJ STORONY, W NEKOTORYH QZYKAH LEKSEMY MOGUT SODERVATX NEZNAˆA]IE SIMWOLY (NAPRIMER, SIMWOL PROBELA W fORTRANE). w sI RAZDELITELXNOE ZNAˆENIE SIMWOLOW-RAZDELITELEJ MOVET BLOKIROWATXSQ (“\” W KONCE STROKI WNUTRI ”...”). oBYˆNO WSE LEKSEMY DELQTSQ NA KLASSY. pRIMERAMI TAKIH KLASSOW QWLQ@TSQ ˆISLA (CELYE, WOSXMERIˆNYE, [ESTNADCATIRIˆNYE, DEJSTWITELXNYE I T.D.), IDENTIFIKATORY, STROKI. oTDELXNO WYDELQ@TSQ KL@ˆEWYE SLOWA I SIMWOLY PUNKTUACII (INOGDA IH NAZYWA@T SIMWOLY-OGRANIˆITELI). kAK PRAWILO, KL@ˆEWYE SLOWA – “TO NEKOTOROE KONEˆNOE PODMNOVESTWO IDENTIFIKATOROW. w NEKOTORYH QZYKAH (NAPRIMER, pl/1) SMYSL LEKSEMY MOVET ZAWISETX OT EE KONTEKSTA I NEWOZMOVNO PROWESTI LEKSIˆESKIJ ANALIZ W OTRYWE OT SINTAKSIˆESKOGO. s TOˆKI ZRENIQ DALXNEJ[IH FAZ ANALIZA LEKSIˆESKIJ ANALIZATOR WYDAET INFORMACI@ DWUH SORTOW: DLQ SINTAKSIˆESKOGO ANALIZATORA, RABOTA@]EGO WSLED ZA LEKSIˆESKIM, SU]ESTWENNA INFORMACIQ O POSLEDOWATELXNOSTI KLASSOW LEKSEM, OGRANIˆITELEJ I KL@ˆEWYH SLOW, A DLQ KONTEKSTNOGO ANALIZA, RABOTA@]EGO WSLED ZA SINTAKSIˆESKIM, WAVNA INFORMACIQ O KONKRETNYH ZNAˆENIQH OTDELXNYH LEKSEM (IDENTIFIKATOROW, ˆISEL I T.D.). tAKIM OBRAZOM, OB]AQ SHEMA RABOTY LEKSIˆESKOGO ANALIZATORA TAKOWA. sNAˆALA WYDELQETSQ OTDELXNAQ LEKSEMA (WOZMOVNO, ISPOLXZUQ SIMWOLYRAZDELITELI). kL@ˆEWYE SLOWA RASPOZNA@TSQ LIBO QWNYM WYDELENIEM NEPOSREDSTWENNO IZ TEKSTA, LIBO SNAˆALA WYDELQETSQ IDENTIFIKATOR, A ZATEM DELAETSQ PROWERKA NA PRINADLEVNOSTX EGO MNOVESTWU KL@ˆEWYH SLOW. eSLI WYDELENNAQ LEKSEMA QWLQETSQ OGRANIˆITELEM, TO ON (TOˆNEE, NEKOTORYJ EGO PRIZNAK) WYDAETSQ KAK REZULXTAT LEKSIˆESKOGO ANALIZA. eSLI WY17
glawa 3. leksi˜eskij analiz
18
DELENNAQ LEKSEMA QWLQETSQ KL@ˆEWYM SLOWOM, TO WYDAETSQ PRIZNAK SOOTWETSTWU@]EGO KL@ˆEWOGO SLOWA. eSLI WYDELENNAQ LEKSEMA QWLQETSQ IDENTIFIKATOROM – WYDAETSQ PRIZNAK IDENTIFIKATORA, A SAM IDENTIFIKATOR SOHRANQETSQ OTDELXNO. nAKONEC, ESLI WYDELENNAQ LEKSEMA PRINADLEVIT KAKOMULIBO IZ DRUGIH KLASSOW LEKSEM (NAPRIMER, LEKSEMA PREDSTAWLQET SOBOJ ˆISLO, STROKU I T.D.), TO WYDAETSQ PRIZNAK SOOTWETSTWU@]EGO KLASSA, A ZNAˆENIE LEKSEMY SOHRANQETSQ OTDELXNO. lEKSIˆESKIJ ANALIZATOR MOVET BYTX KAK SAMOSTOQTELXNOJ FAZOJ TRANSLQCII, TAK I PODPROGRAMMOJ, RABOTA@]EJ PO PRINCIPU “DAJ LEKSEMU”. w PERWOM SLUˆAE (RIS. 3.1, A) WYHODOM ANALIZATORA QWLQETSQ FAJL LEKSEM, WO WTOROM (RIS. 3.1, B) LEKSEMA WYDAETSQ PRI KAVDOM OBRA]ENII K ANALIZATORU (PRI “TOM, KAK PRAWILO, PRIZNAK KLASSA LEKSEMY WOZWRA]AETSQ KAK REZULXTAT FUNKCII “LEKSIˆESKIJ ANALIZATOR”, A ZNAˆENIE LEKSEMY PEREDAETSQ ˆEREZ GLOBALXNU@ PEREMENNU@). s TOˆKI ZRENIQ OBRABOTKI ZNAˆENIJ LEKSEM, ANALIZATOR MOVET LIBO PROSTO WYDAWATX ZNAˆENIE KAVDOJ LEKSEMY, I W “TOM SLUˆAE POSTROENIE TABLIC OB˙EKTOW (IDENTIFIKATOROW, STROK, ˆISEL I T.D.) PERENOSITSQ NA BOLEE POZDNIE FAZY, LIBO ON MOVET SAMOSTOQTELXNO STROITX TABLICY OB˙EKTOW. w “TOM SLUˆAE W KAˆESTWE ZNAˆENIQ LEKSEMY WYDAETSQ UKAZATELX NA WHOD W SOOTWETSTWU@]U@ TABLICU.
"$#
%
! &
rIS. 3.1: rABOTA LEKSIˆESKOGO ANALIZATORA ZADAETSQ NEKOTORYM KONEˆNYM AWTOMATOM. oDNAKO, NEPOSREDSTWENNOE OPISANIE KONEˆNOGO AWTOMATA NEUDOBNO S PRAKTIˆESKOJ TOˆKI ZRENIQ. pO“TOMU DLQ ZADANIQ LEKSIˆESKOGO ANALIZATORA, KAK PRAWILO, ISPOLXZUETSQ LIBO REGULQRNOE WYRAVENIE, LIBO PRAWOLINEJNAQ GRAMMATIKA. wSE TRI FORMALIZMA (KONEˆNYH AWTOMATOW, REGULQRNYH WYRAVENIJ I PRAWOLINEJNYH GRAMMATIK) IME@T ODINAKOWU@ WYRAZITELXNU@ MO]NOSTX. w ˆASTNOSTI, PO REGULQRNOMU WYRAVENI@ ILI PRAWOLINEJNOJ GRAMMATIKE MOVNO SKONSTRUIROWATX KONEˆNYJ AWTOMAT, RASPOZNA@]IJ TOT VE QZYK.
3.1. regulqrnye mnovestwa i wyraveniq
3.1
19
rEGULQRNYE MNOVESTWA I WYRAVENIQ
wWEDEM PONQTIE REGULQRNOGO MNOVESTWA, IGRA@]EGO WAVNU@ ROLX W TEORII FORMALXNYH QZYKOW. rEGULQRNOE MNOVESTWO W ALFAWITE T OPREDELQETSQ REKURSIWNO SLEDU@]IM OBRAZOM: (1) ∅ (PUSTOE MNOVESTWO) – REGULQRNOE MNOVESTWO W ALFAWITE T ; (2) {e} – REGULQRNOE MNOVESTWO W ALFAWITE T (e – PUSTAQ CEPOˆKA); (3) {a} – REGULQRNOE MNOVESTWO W ALFAWITE T DLQ KAVDOGO a ∈ T ; (4) ESLI P I Q – REGULQRNYE MNOVESTWA W ALFAWITE T , TO REGULQRNYMI QWLQ@TSQ I MNOVESTWA (A) P ∪ Q (OB˙EDINENIE), (B) P Q (KONKATENACIQ, T.E. MNOVESTWO {pq|p ∈ P, q ∈ Q}), ∞ S (W) P ∗ (ITERACIQ: P ∗ = P n ); n=0
(5) NIˆTO DRUGOE NE QWLQETSQ REGULQRNYM MNOVESTWOM W ALFAWITE T . iTAK, MNOVESTWO W ALFAWITE T REGULQRNO TOGDA I TOLXKO TOGDA, KOGDA ONO LIBO ∅, LIBO {e}, LIBO {a} DLQ NEKOTOROGO a ∈ T , LIBO EGO MOVNO POLUˆITX IZ “TIH MNOVESTW PRIMENENIEM KONEˆNOGO ˆISLA OPERACIJ OB˙EDINENIQ, KONKATENACII I ITERACII. pRIWEDENNOE WY[E OPREDELENIE REGULQRNOGO MNOVESTWA POZWOLQET WWESTI SLEDU@]U@ UDOBNU@ FORMU EGO ZAPISI, NAZYWAEMU@ REGULQRNYM WYRAVENIEM. rEGULQRNOE WYRAVENIE W ALFAWITE T I OBOZNAˆAEMOE IM REGULQRNOE MNOVESTWO W ALFAWITE T OPREDELQ@TSQ REKURSIWNO SLEDU@]IM OBRAZOM: (1) ∅ – REGULQRNOE WYRAVENIE, OBOZNAˆA@]EE MNOVESTWO ∅; (2) e – REGULQRNOE WYRAVENIE, OBOZNAˆA@]EE MNOVESTWO {e}; (3) a – REGULQRNOE WYRAVENIE, OBOZNAˆA@]EE MNOVESTWO {a}; (4) ESLI p I q – REGULQRNYE WYRAVENIQ, OBOZNAˆA@]IE REGULQRNYE MNOVESTWA P I Q SOOTWETSTWENNO, TO (A) (p|q) – REGULQRNOE MNOVESTWO P ∪ Q,
WYRAVENIE,
OBOZNAˆA@]EE
REGULQRNOE
(B) (pq) – REGULQRNOE WYRAVENIE, OBOZNAˆA@]EE REGULQRNOE MNOVESTWO P Q, (W) (p∗ ) – REGULQRNOE WYRAVENIE, OBOZNAˆA@]EE REGULQRNOE MNOVESTWO P ∗ ;
20
glawa 3. leksi˜eskij analiz
(5) NIˆTO DRUGOE NE QWLQETSQ REGULQRNYM WYRAVENIEM W ALFAWITE T . mY BUDEM OPUSKATX LI[NIE SKOBKI W REGULQRNYH WYRAVENIQH, DOGOWORIW[ISX O TOM, ˆTO OPERACIQ ITERACII IMEET NAIWYS[IJ PRIORITET, ZATEM IDET OPERACII KONKATENACII, NAKONEC, OPERACIQ OB˙EDINENIQ IMEET NAIMENX[IJ PRIORITET. kROME TOGO, MY BUDEM POLXZOWATXSQ ZAPISX@ p+ DLQ OBOZNAˆENIQ pp∗ . tAKIM OBRAZOM, ZAPISX (a|((ba)(a∗ ))) “KWIWALENTNA a|ba+ . nAKONEC, MY BUDEM ISPOLXZOWATX ZAPISX L(r) DLQ REGULQRNOGO MNOVESTWA, OBOZNAˆAEMOGO REGULQRNYM WYRAVENIEM r. pRIMER 3.1. nESKOLXKO PRIMEROW REGULQRNYH WYRAVENIJ I OBOZNAˆAEMYH IMI REGULQRNYH MNOVESTW: A) a(e|a)|b – OBOZNAˆAET MNOVESTWO {a, b, aa}; B) a(a|b)∗ – OBOZNAˆAET MNOVESTWO WSEWOZMOVNYH CEPOˆEK, SOSTOQ]IH IZ a I b, NAˆINA@]IHSQ S a; W) (a|b)∗ (a|b)(a|b)∗ – OBOZNAˆAET MNOVESTWO WSEH NEPUSTYH CEPOˆEK, SOSTOQ]IH IZ a I b, T.E. MNOVESTWO {a, b}+ ; G) ((0|1)(0|1)(0|1))∗ – OBOZNAˆAET MNOVESTWO WSEH CEPOˆEK, SOSTOQ]IH IZ NULEJ I EDINIC, DLINY KOTORYH DELQTSQ NA 3.
qSNO, ˆTO DLQ KAVDOGO REGULQRNOGO MNOVESTWA MOVNO NAJTI REGULQRNOE WYRAVENIE, OBOZNAˆA@]EE “TO MNOVESTWO, I NAOBOROT. bOLEE TOGO, DLQ KAVDOGO REGULQRNOGO MNOVESTWA SU]ESTWUET BESKONEˆNO MNOGO OBOZNAˆA@]IH EGO REGULQRNYH WYRAVENIJ. bUDEM GOWORITX, ˆTO REGULQRNYE WYRAVENIQ RAWNY ILI “KWIWALENTNY (=), ESLI ONI OBOZNAˆA@T ODNO I TO VE REGULQRNOE MNOVESTWO. sU]ESTWUET RQD ALGEBRAIˆESKIH ZAKONOW, POZWOLQ@]IH OSU]ESTWLQTX “KWIWALENTNOE PREOBRAZOWANIE REGULQRNYH WYRAVENIJ. lEMMA. pUSTX p, q I r – REGULQRNYE WYRAVENIQ. tOGDA SPRAWEDLIWY SLEDU@]IE SOOTNO[ENIQ: (1) p|q = q|p; (7) pe = ep = p; (2) ∅∗ = e; (8) ∅p = p∅ = ∅; (3) p|(q|r) = (p|q)|r; (9) p∗ = p|p∗ ; (4) p(qr) = (pq)r; (10) (p∗ )∗ = p∗ ; (5) p(q|r) = pq|pr; (11) p|p = p; (6) (p|q)r = pr|qr; (12) p|∅ = p. sLEDSTWIE. dLQ L@BOGO REGULQRNOGO WYRAVENIQ SU]ESTWUET “KWIWALENTNOE REGULQRNOE WYRAVENIE, KOTOROE LIBO ESTX ∅, LIBO NE SODERVIT W SWOEJ ZAPISI ∅. w DALXNEJ[EM BUDEM RASSMATRIWATX TOLXKO REGULQRNYE WYRAVENIQ, NE SODERVA]IE W SWOEJ ZAPISI ∅. pRI PRAKTIˆESKOM OPISANII LEKSIˆESKIH STRUKTUR BYWAET POLEZNO SOPOSTAWLQTX REGULQRNYM WYRAVENIQM NEKOTORYE IMENA, I SSYLATXSQ NA NIH PO
3.2. kone˜nye awtomaty
21
“TIM IMENAM. dLQ OPREDELENIQ TAKIH IMEN MY BUDEM ISPOLXZOWATX ZAPISX WIDA d1 = r 1 d2 = r 2 ... dn = r n GDE di – RAZLIˆNYE IMENA, A KAVDOE ri – REGULQRNOE WYRAVENIE NAD SIMWOLAMI T ∪ {d1 , d2 , ... , di−1 }, T.E. SIMWOLAMI OSNOWNOGO ALFAWITA I RANEE OPREDELENNYMI SIMWOLAMI (IMENAMI). tAKIM OBRAZOM, DLQ L@BOGO ri MOVNO POSTROITX REGULQRNOE WYRAVENIE NAD T , POWTORNO ZAMENQQ IMENA REGULQRNYH WYRAVENIJ NA OBOZNAˆAEMYE IMI REGULQRNYE WYRAVENIQ. pRIMER 3.2. iSPOLXZOWANIE IMEN DLQ REGULQRNYH WYRAVENIJ. A) rEGULQRNOE WYRAVENIE DLQ MNOVESTWA IDENTIFIKATOROW. Letter = a|b|c| ... |x|y|z Digit = 0|1| ... |9 Identif ier = Letter(Letter|Digit)∗ B) rEGULQRNOE WYRAVENIE DLQ MNOVESTWA ˆISEL W DESQTIˆNOJ ZAPISI. Digit = 0|1| ... |9 Integer = Digit+ F raction = .Integer|e Exponent = (E(+| − |e)Integer)|e N umber = Integer F raction Exponent
3.2
kONEˆNYE AWTOMATY
rEGULQRNYE WYRAVENIQ, WWEDENNYE RANEE, SLUVAT DLQ OPISANIQ REGULQRNYH MNOVESTW. dLQ RASPOZNAWANIQ REGULQRNYH MNOVESTW SLUVAT KONEˆNYE AWTOMATY. nEDETERMINIROWANNYJ KONEˆNYJ AWTOMAT (nka) – “TO PQTERKA M = (Q, T, D, q0 , F ), GDE (1) Q – KONEˆNOE MNOVESTWO SOSTOQNIJ; (2) T – KONEˆNOE MNOVESTWO DOPUSTIMYH WHODNYH SIMWOLOW (WHODNOJ ALFAWIT); (3) D – FUNKCIQ PEREHODOW (OTOBRAVA@]AQ MNOVESTWO Q × (T ∪ {e}) WO MNOVESTWO PODMNOVESTW MNOVESTWA Q), OPREDELQ@]AQ POWEDENIE UPRAWLQ@]EGO USTROJSTWA; (4) q0 ∈ Q – NAˆALXNOE SOSTOQNIE UPRAWLQ@]EGO USTROJSTWA; (5) F ⊆ Q – MNOVESTWO ZAKL@ˆITELXNYH SOSTOQNIJ. rABOTA KONEˆNOGO AWTOMATA PREDSTAWLQET SOBOJ NEKOTORU@ POSLEDOWATELXNOSTX [AGOW, ILI TAKTOW. tAKT OPREDELQETSQ TEKU]IM SOSTOQNIEM UPRAWLQ@]EGO USTROJSTWA I WHODNYM SIMWOLOM, OBOZREWAEMYM W DANNYJ MOMENT
glawa 3. leksi˜eskij analiz
22
a
................
# $%&
' (
!
"
rIS. 3.2:
WHODNOJ GOLOWKOJ. sAM [AG SOSTOIT IZ IZMENENIQ SOSTOQNIQ I, WOZMOVNO, SDWIGA WHODNOJ GOLOWKI NA ODNU QˆEJKU WPRAWO (RIS. 3.2). nEDETERMINIZM AWTOMATA ZAKL@ˆAETSQ W TOM, ˆTO, WO-PERWYH, NAHODQSX W NEKOTOROM SOSTOQNII I OBOZREWAQ TEKU]IJ SIMWOL, AWTOMAT MOVET PEREJTI W ODNO IZ, WOOB]E GOWORQ, NESKOLXKIH WOZMOVNYH SOSTOQNIJ, I WO-WTORYH, AWTOMAT MOVET DELATX PEREHODY PO e. pUSTX M = (Q, T, D, q0 , F ) – nka. kONFIGURACIEJ AWTOMATA M NAZYWAETSQ PARA (q, w) ∈ Q × T ∗ , GDE q – TEKU]EE SOSTOQNIE UPRAWLQ@]EGO USTROJSTWA, A w – CEPOˆKA SIMWOLOW NA WHODNOJ LENTE, SOSTOQ]AQ IZ SIMWOLA POD GOLOWKOJ I WSEH SIMWOLOW SPRAWA OT NEGO. kONFIGURACIQ (q 0 , w) NAZYWAETSQ NAˆALXNOJ, A KONFIGURACIQ (q, e), GDE q ∈ F – ZAKL@ˆITELXNOJ (ILI DOPUSKA@]EJ). pUSTX M = (Q, T, D, q0 , F ) – nka. tAKTOM AWTOMATA M NAZYWAETSQ BINARNOE OTNO[ENIE `, OPREDELENNOE NA KONFIGURACIQH M SLEDU@]IM OBRAZOM: ESLI p ∈ D(q, a), GDE a ∈ T ∪ {e}, TO (q, aw) ` (p, w) DLQ WSEH w ∈ T ∗ . bUDEM OBOZNAˆATX SIMWOLOM `+ (`∗ ) TRANZITIWNOE (REFLEKSIWNOTRANZITIWNOE) ZAMYKANIE OTNO[ENIQ `. gOWORQT, ˆTO AWTOMAT M DOPUSKAET CEPOˆKU w, ESLI (q0 , w) `∗ (q, e) DLQ NEKOTOROGO q ∈ F . qZYKOM, DOPUSKAEMYM (RASPOZNAWAEMYM, OPREDELQEMYM) AWTOMATOM M , (OBOZNAˆAETSQ L(M )), NAZYWAETSQ MNOVESTWO WHODNYH CEPOˆEK, DOPUSKAEMYH AWTOMATOM M . t.E. L(M ) = {w|w ∈ T ∗ I (q0 , w) `∗ (q, e) DLQ NEKOTOROGO q ∈ F }. wAVNYM ˆASTNYM SLUˆAEM NEDETERMINIROWANNOGO KONEˆNOGO AWTOMATA QWLQETSQ DETERMINIROWANNYJ KONEˆNYJ AWTOMAT, KOTORYJ NA KAVDOM TAKTE RABOTY IMEET WOZMOVNOSTX PEREJTI NE BOLEE ˆEM W ODNO SOSTOQNIE I NE MOVET DELATX PEREHODY PO e. pUSTX M = (Q, T, D, q0 , F ) – nka. bUDEM NAZYWATX M DETERMINIROWANNYM KONEˆNYM AWTOMATOM (dka), ESLI WYPOLNENY SLEDU@]IE DWA USLO-
3.2. kone˜nye awtomaty
23
WIQ: (1) D(q, e) = ∅ DLQ L@BOGO q ∈ Q, I (2) D(q, a) SODERVIT NE BOLEE ODNOGO “LEMENTA DLQ L@BYH q ∈ Q I a ∈ T . tAK KAK FUNKCIQ PEREHODOW dka SODERVIT NE BOLEE ODNOGO “LEMENTA DLQ L@BOJ PARY ARGUMENTOW, DLQ dka MY BUDEM POLXZOWATXSQ ZAPISX@ D(q, a) = p WMESTO D(q, a) = {p}. kONEˆNYJ AWTOMAT MOVET BYTX IZOBRAVEN GRAFIˆESKI W WIDE DIAGRAMMY, PREDSTAWLQ@]EJ SOBOJ ORIENTIROWANNYJ GRAF, W KOTOROM KAVDOMU SOSTOQNI@ SOOTWETSTWUET WER[INA, A DUGA, POMEˆENNAQ SIMWOLOM a ∈ T ∪ {e}, SOEDINQET DWE WER[INY p I q, ESLI p ∈ D(q, a). nA DIAGRAMME WYDELQ@TSQ NAˆALXNOE I ZAKL@ˆITELXNYE SOSTOQNIQ (W PRIMERAH NIVE, SOOTWETSTWENNO, WHODQ]EJ STRELKOJ I DWOJNYM KONTUROM). pRIMER 3.3. pUSTX L = L(r), GDE r = (a|b)∗ a(a|b)(a|b). A) nEDETERMINIROWANNYJ KONEˆNYJ AWTOMAT M , DOPUSKA@]IJ QZYK L: M = {{1, 2, 3, 4}, {a, b}, D, 1, {4}}, GDE FUNKCIQ PEREHODOW D OPREDELQETSQ TAK: D(1, a) = {1, 2}, D(3, a) = {4}, D(2, a) = {3}, D(3, b) = {4}, D(2, b) = {3}. dIAGRAMMA AWTOMATA PRIWEDENA NA RIS. 3.3, A. B) dETERMINIROWANNYJ KONEˆNYJ AWTOMAT M , DOPUSKA@]IJ QZYK L: M = {{1, 2, 3, 4, 5, 6, 7, 8}, {a, b}, D, 1, {3, 5, 6, 8}}, GDE FUNKCIQ PEREHODOW D OPREDELQETSQ TAK: D(1, a) = 2, D(5, a) = 8, D(1, b) = 1, D(5, b) = 6, D(2, a) = 4, D(6, a) = 2, D(2, b) = 7, D(6, b) = 1, D(3, a) = 3, D(7, a) = 8, D(3, b) = 5, D(7, b) = 6, D(4, a) = 3, D(8, a) = 4, D(4, b) = 5, D(8, b) = 7. dIAGRAMMA AWTOMATA PRIWEDENA NA RIS. 3.3, B.
pRIMER 3.4. dIAGRAMMA dka, DOPUSKA@]EGO MNOVESTWO ˆISEL W DESQTIˆNOJ ZAPISI, PRIWEDENA NA RIS. 3.4. pRIMER 3.5. aNALIZ CEPOˆEK. A) pRI ANALIZE CEPOˆKI w = ababa AWTOMAT IZ PRIMERA 3.3, A, MOVET SDELATX SLEDU@]U@ POSLEDOWATELXNOSTX TAKTOW: (1, ababa) ` (1, baba) ` (1, aba) ` (2, ba) ` (3, a) ` (4, e). sOSTOQNIE 4 QWLQETSQ ZAKL@ˆITELXNYM, SLEDOWATELXNO, CEPOˆKA w DOPUSKAETSQ “TIM AWTOMATOM.
glawa 3. leksi˜eskij analiz
24
b a a
1
a
2
a,b
3
a,b
a
3 b
4
b
4
5
a a
1 b
a
b
a
b b
6
a
2
7
b
a
8
b
rIS. 3.3:
B) pRI ANALIZE CEPOˆKI w = ababab AWTOMAT IZ PRIMERA 3.3, B, DOLVEN SDELATX SLEDU@]U@ POSLEDOWATELXNOSTX TAKTOW: (1, ababab) ` (2, babab) ` (7, abab) ` (8, bab) ` (7, ab) ` (8, b) ` (7, e). tAK KAK SOSTOQNIE 7 NE QWLQETSQ ZAKL@ˆITELXNYM, CEPOˆKA w NE DOPUSKAETSQ “TIM AWTOMATOM.
E
1
2 Digit Digit
.
Digit
3
4 Digit Digit
rIS. 3.4:
E
5
+, -
6
7 Digit
Digit
3.3. algoritmy postroeniq kone˜nyh awtomatow
3.3
25
aLGORITMY POSTROENIQ KONEˆNYH AWTOMATOW
3.3.1 pOSTROENIE NEDETERMINIROWANNOGO KONEˆNOGO AWTOMATA PO REGULQRNOMU WYRAVENI@ rASSMOTRIM ALGORITM POSTROENIQ PO REGULQRNOMU WYRAVENI@ NEDETERMINIROWANNOGO KONEˆNOGO AWTOMATA, DOPUSKA@]EGO TOT VE QZYK. aLGORITM 3.1. pOSTROENIE NEDETERMINIROWANNOGO KONEˆNOGO AWTOMATA PO REGULQRNOMU WYRAVENI@. wHOD. rEGULQRNOE WYRAVENIE r W ALFAWITE T . wYHOD. nka M , TAKOJ ˆTO L(M ) = L(r). mETOD. aWTOMAT DLQ WYRAVENIQ STROITSQ KOMPOZICIEJ IZ AWTOMATOW, SOOTWETSTWU@]IH PODWYRAVENIQM. nA KAVDOM [AGE POSTROENIQ STROQ]IJSQ AWTOMAT IMEET W TOˆNOSTI ODNO ZAKL@ˆITELXNOE SOSTOQNIE, W NAˆALXNOE SOSTOQNIE NET PEREHODOW IZ DRUGIH SOSTOQNIJ I NET PEREHODOW IZ ZAKL@ˆITELXNOGO SOSTOQNIQ W DRUGIE. 1. dLQ WYRAVENIQ e STROITSQ AWTOMAT
e i
f
rIS. 3.5:
2. dLQ WYRAVENIQ a (a ∈ T ) STROITSQ AWTOMAT
a i
f
rIS. 3.6:
3. pUSTX M (s) I M (t) – nka DLQ REGULQRNYH WYRAVENIJ s I t SOOTWETSTWENNO. A) dLQ WYRAVENIQ s|t AWTOMAT M (s|t) STROITSQ KAK POKAZANO NA RIS. 3.7. zDESX i – NOWOE NAˆALXNOE SOSTOQNIE I f – NOWOE ZAKL@ˆITELXNOE SOSTOQNIE. zAMETIM, ˆTO IMEET MESTO PEREHOD PO e IZ i W NAˆALXNYE SOSTOQNIQ M (s) I M (t) I PEREHOD PO e IZ ZAKL@ˆITELXNYH SOSTOQNIJ M (s) I M (t) W f . nAˆALXNOE I ZAKL@ˆITELXNOE SOSTOQNIQ AWTOMATOW M (s) I M (t) NE QWLQ@TSQ TAKOWYMI DLQ AWTOMATA M (s|t).
glawa 3. leksi˜eskij analiz
26
M(s) e
e
i
f e
e M(t)
rIS. 3.7: B) dLQ WYRAVENIQ st AWTOMAT M (st) STROITSQ SLEDU@]IM OBRAZOM:
i
M(t)
M(s)
f
rIS. 3.8: nAˆALXNOE SOSTOQNIE M (s) STANOWITSQ NAˆALXNYM DLQ NOWOGO AWTOMATA, A ZAKL@ˆITELXNOE SOSTOQNIE M (t) STANOWITSQ ZAKL@ˆITELXNYM DLQ NOWOGO AWTOMATA. nAˆALXNOE SOSTOQNIE M (t) I ZAKL@ˆITELXNOE SOSTOQNIE M (s) SLIWA@TSQ, T.E. WSE PEREHODY IZ NAˆALXNOGO SOSTOQNIQ M (t) STANOWQTSQ PEREHODAMI IZ ZAKL@ˆITELXNOGO SOSTOQNIQ M (s). w NOWOM AWTOMATE “TO OB˙EDINENNOE SOSTOQNIE NE QWLQETSQ NI NAˆALXNYM, NI ZAKL@ˆITELXNYM. W) dLQ WYRAVENIQ s∗ AWTOMAT M (s∗ ) STROITSQ SLEDU@]IM OBRAZOM:
i
e
e M(s)
e rIS. 3.9:
e
f
3.3. algoritmy postroeniq kone˜nyh awtomatow
27
zDESX i – NOWOE NAˆALXNOE SOSTOQNIE, A f – NOWOE ZAKL@ˆITELXNOE SOSTOQNIE.
3.3.2 pOSTROENIE DETERMINIROWANNOGO KONEˆNOGO AWTOMATA PO NEDETERMINIROWANNOMU rASSMOTRIM ALGORITM POSTROENIQ PO NEDETERMINIROWANNOMU KONEˆNOMU AWTOMATU DETERMINIROWANNOGO KONEˆNOGO AWTOMATA, DOPUSKA@]EGO TOT VE QZYK. aLGORITM 3.2. pOSTROENIE DETERMINIROWANNOGO KONEˆNOGO AWTOMATA PO NEDETERMINIROWANNOMU. wHOD. nka M = (Q, T, D, q0 , F ). wYHOD. dka M 0 = (Q0 , T, D0 , q00 , F 0 ), TAKOJ ˆTO L(M ) = L(M 0 ). mETOD. kAVDOE SOSTOQNIE REZULXTIRU@]EGO dka – “TO NEKOTOROE MNOVESTWO SOSTOQNIJ ISHODNOGO nka. w ALGORITME BUDUT ISPOLXZOWATXSQ SLEDU@]IE FUNKCII: e-closure(R) (R ⊆ Q) – MNOVESTWO SOSTOQNIJ nka, DOSTIVIMYH IZ SOSTOQNIJ, WHODQ]IH W R, POSREDSTWOM TOLXKO PEREHODOW PO e, T.E. MNOVESTWO S=
[
{p|(q, e) `∗ (p, e)}
q∈R
move(R, a) (R ⊆ Q) – MNOVESTWO SOSTOQNIJ nka, W KOTORYE ESTX PEREHOD NA WHODE a DLQ SOSTOQNIJ IZ R, T.E. MNOVESTWO S=
[
{p|p ∈ D(q, a)}
q∈R
wNAˆALE Q0 I D0 PUSTY. wYPOLNITX [AGI 1-4: (1) oPREDELITX q00 = e-closure({q0 }). (2) dOBAWITX q00 W Q0 KAK NEPOMEˆENNOE SOSTOQNIE. (3) wYPOLNITX SLEDU@]U@ PROCEDURU: while (W Q0 ESTX NEPOMEˆENNOE SOSTOQNIE R){ POMETITX R; for (KAVDOGO WHODNOGO SIMWOLA a ∈ T ){ S = e-closure(move(R, a)); if (S 6= ∅){ if (S ∈ / Q0 ) DOBAWITX S W Q0 KAK NEPOMEˆENNOE SOSTOQNIE; OPREDELITX D 0 (R, a) = S; }
glawa 3. leksi˜eskij analiz
28 } }
(4) oPREDELITX F 0 = {S|S ∈ Q0 , S ∩ F 6= ∅}. pRIMER 3.6. rEZULXTAT PRIMENENIQ ALGORITMA 3.2 PRIWEDEN NA RIS. 3.10.
e
2 0
e
a
3 e
e
1
e
6 e
7
a
8
b
9
b
10
e b
4
5
e a a
A b
a B
D b
a
b
a
C
b
E
b
rIS. 3.10:
3.3.3
pOSTROENIE DETERMINIROWANNOGO KONEˆNOGO AWTOMATA PO REGULQRNOMU WYRAVENI@
pRIWEDEM TEPERX ALGORITM POSTROENIQ PO REGULQRNOMU WYRAVENI@ DETERMINIROWANNOGO KONEˆNOGO AWTOMATA, DOPUSKA@]EGO TOT VE QZYK [10]. pUSTX DANO REGULQRNOE WYRAVENIE r W ALFAWITE T . k REGULQRNOMU WYRAVENI@ r DOBAWIM MARKER KONCA: (r)#. tAKOE REGULQRNOE WYRAVENIE BUDEM NAZYWATX POPOLNENNYM. w PROCESSE SWOEJ RABOTY ALGORITM BUDET ISPOLXZOWATX POPOLNENNOE REGULQRNOE WYRAVENIE. aLGORITM BUDET OPERIROWATX S SINTAKSIˆESKIM DEREWOM DLQ POPOLNENNOGO REGULQRNOGO WYRAVENIQ (r)# , KAVDYJ LIST KOTOROGO POMEˆEN SIMWOLOM
3.3. algoritmy postroeniq kone˜nyh awtomatow
29
a ∈ T ∪ {e, #}, A KAVDAQ WNUTRENNQQ WER[INA POMEˆENA ZNAKOM ODNOJ IZ OPERACIJ: · (KONKATENACIQ), | (OB˙EDINENIE), ∗ (ITERACIQ). kAVDOMU LISTU DEREWA (KROME e-LISTXEW) PRIPI[EM UNIKALXNYJ NOMER, NAZYWAEMYJ POZICIEJ, I BUDEM ISPOLXZOWATX EGO, S ODNOJ STORONY, DLQ SSYLKI NA LIST W DEREWE, I, S DRUGOJ STORONY, DLQ SSYLKI NA SIMWOL, SOOTWETSTWU@]IJ “TOMU LISTU. zAMETIM, ˆTO ESLI NEKOTORYJ SIMWOL ISPOLXZUETSQ W REGULQRNOM WYRAVENII NESKOLXKO RAZ, ON IMEET NESKOLXKO POZICIJ. tEPERX, OBHODQ DEREWO T SNIZU-WWERH SLEWA-NAPRAWO, WYˆISLIM ˆETYRE FUNKCII: nullable, f irstpos, lastpos I f ollowpos. fUNKCII nullable, f irstpos I lastpos OPREDELENY NA UZLAH DEREWA, A f ollowpos – NA MNOVESTWE POZICIJ. zNAˆENIEM WSEH FUNKCIJ, KROME nullable, QWLQETSQ MNOVESTWO POZICIJ. fUNKCIQ f ollowpos WYˆISLQETSQ ˆEREZ TRI OSTALXNYE FUNKCII. fUNKCIQ f irstpos(n) DLQ KAVDOGO UZLA n SINTAKSIˆESKOGO DEREWA REGULQRNOGO WYRAVENIQ DAET MNOVESTWO POZICIJ, KOTORYE SOOTWETSTWU@T PERWYM SIMWOLAM W PODCEPOˆKAH, GENERIRUEMYH PODWYRAVENIEM S WER[INOJ W n. aNALOGIˆNO, lastpos(n) DAET MNOVESTWO POZICIJ, KOTORYM SOOTWETSTWU@T POSLEDNIE SIMWOLY W PODCEPOˆKAH, GENERIRUEMYH PODWYRAVENIQMI S WER[INOJ n. dLQ UZLA n, PODDEREWXQ KOTOROGO (T.E. DEREWXQ, U KOTORYH UZEL n QWLQETSQ KORNEM) MOGUT PORODITX PUSTOE SLOWO, OPREDELIM nullable(n) = true, A DLQ OSTALXNYH UZLOW nullable(n) = f alse. tABLICA DLQ WYˆISLENIQ FUNKCIJ nullable, f irstpos I lastpos PRIWEDENA NA RIS. 3.11. UZEL n LIST e LIST i (NE e) | /\ uv · /\ uv ∗ | v
nullable(n) true f alse
f irstpos(n) ∅ {i}
lastpos(n) ∅ {i}
nullable(u) or f irstpos(u) ∪ f irstpos(v) lastpos(u) ∪ lastpos(v) nullable(v) nullable(u) if nullable(u) then if nullable(v) then and f irstpos(u) ∪ f irstpos(v) lastpos(u) ∪ lastpos(v) nullable(v) else f irstpos(u) else lastpos(v) true
f irstpos(v)
lastpos(v)
rIS. 3.11:
pRIMER 3.7. sINTAKSIˆESKOE DEREWO DLQ POPOLNENNOGO REGULQRNOGO WYRAVENIQ (a|b)∗ abb# S REZULXTATOM WYˆISLENIQ FUNKCIJ f irstpos I lastpos PRIWEDENO NA RIS. 3.12. sLEWA OT KAVDOGO UZLA RASPOLOVENO ZNAˆENIE f irstpos, SPRAWA OT UZLA – ZNAˆENIE lastpos. zAMETIM, ˆTO “TI FUNKCII MOGUT BYTX WYˆISLENY ZA ODIN OBHOD DEREWA.
glawa 3. leksi˜eskij analiz
30
{ 1,2,3} • {6} {1,2,3} • {5} {6} # {6} {1,2,3} • {4} { 5} b { 5} {1,2,3} •
{3} {4} b {4}
{1,2} * { 1,2} { 3} a { 3} {1,2}
{1} a {1}
|
{1,2}
{2} b {2}
rIS. 3.12: POZICIQ 1 2 3 4 5 6
f ollowpos {1, 2, 3} {1, 2, 3} {4} {5} {6} ∅
rIS. 3.13: eSLI i – POZICIQ, TO f ollowpos(i) ESTX MNOVESTWO POZICIJ j TAKIH, ˆTO SU]ESTWUET NEKOTORAQ STROKA ... cd ..., WHODQ]AQ W QZYK, OPISYWAEMYJ REGULQRNYM WYRAVENIEM, TAKAQ, ˆTO POZICIQ i SOOTWETSTWUET “TOMU WHOVDENI@ c, A POZICIQ j – WHOVDENI@ d. fUNKCIQ f ollowpos MOVET BYTX WYˆISLENA TAKVE ZA ODIN OBHOD DEREWA SNIZU-WWERH PO SLEDU@]IM DWUM PRAWILAM. 1. pUSTX n – WNUTRENNIJ UZEL S OPERACIEJ · (KONKATENACIQ), u I v – EGO POTOMKI. tOGDA DLQ KAVDOJ POZICII i, WHODQ]EJ W lastpos(u), DOBAWLQEM K MNOVESTWU ZNAˆENIJ f ollowpos(i) MNOVESTWO f irstpos(v). 2. pUSTX n – WNUTRENNIJ UZEL S OPERACIEJ ∗ (ITERACIQ), u – EGO POTOMOK. tOGDA DLQ KAVDOJ POZICII i, WHODQ]EJ W lastpos(u), DOBAWLQEM K MNOVESTWU ZNAˆENIJ f ollowpos(i) MNOVESTWO f irstpos(u). pRIMER 3.8. rEZULXTAT WYˆISLENIQ FUNKCII f ollowpos DLQ REGULQRNOGO WYRAVENIQ IZ PREDYDU]EGO PRIMERA PRIWEDEN NA RIS. 3.13. aLGORITM 3.3. pRQMOE POSTROENIE dka PO REGULQRNOMU WYRAVENI@.
3.3. algoritmy postroeniq kone˜nyh awtomatow
31
wHOD. rEGULQRNOE WYRAVENIE r W ALFAWITE T . wYHOD. dka M = (Q, T, D, q0 , F ), TAKOJ ˆTO L(M ) = L(r). mETOD. sOSTOQNIQ dka SOOTWETSTWU@T MNOVESTWAM POZICIJ. wNAˆALE Q I D PUSTY. wYPOLNITX [AGI 1-6: (1) pOSTROITX SINTAKSIˆESKOE DEREWO DLQ POPOLNENNOGO REGULQRNOGO WYRAVENIQ (r)#. (2) oBHODQ SINTAKSIˆESKOE DEREWO, WYˆISLITX nullable, f irstpos, lastpos I f ollowpos.
ZNAˆENIQ
FUNKCIJ
(3) oPREDELITX q0 = f irstpos(root), GDE root – KORENX SINTAKSIˆESKOGO DEREWA. (4) dOBAWITX q0 W Q KAK NEPOMEˆENNOE SOSTOQNIE. (5) wYPOLNITX SLEDU@]U@ PROCEDURU: while (W Q ESTX NEPOMEˆENNOE SOSTOQNIE R){ POMETITX R; for (KAVDOGO WHODNOGO SIMWOLA a ∈ T , TAKOGO, ˆTO W R IMEETSQ POZICIQ, KOTOROJ SOOTWETSTWUET a){ PUSTX SIMWOL a W R SOOTWETSTWUET POZICIQM S p1 , ... , pn , I PUSTX S = f ollowpos(pi ); 1≤i≤n
if (S 6= ∅){ if (S ∈ / Q) DOBAWITX S W Q KAK NEPOMEˆENNOE SOSTOQNIE; OPREDELITX D(R, a) = S; } } } (6) oPREDELITX F KAK MNOVESTWO WSEH SOSTOQNIJ IZ Q, SODERVA]IH POZICII, SWQZANNYE S SIMWOLOM #. pRIMER 3.9. rEZULXTAT PRIMENENIQ ALGORITMA 3.3 DLQ REGULQRNOGO WYRAVENIQ (a|b)∗ abb PRIWEDEN NA RIS. 3.14.
glawa 3. leksi˜eskij analiz
32
b a a {1,2,3}
{1,2,3,4} a
b
{1,2,3,5} b
{1,2,3,6} b
a
rIS. 3.14:
3.3.4
pOSTROENIE DETERMINIROWANNOGO KONEˆNOGO AWTOMATA S MINIMALXNYM ˆISLOM SOSTOQNIJ
rASSMOTRIM TEPERX ALGORITM POSTROENIQ dka S MINIMALXNYM ˆISLOM SOSTOQNIJ, “KWIWALENTNOGO DANNOMU dka [10]. pUSTX M = (Q, T, D, q0 , F ) – dka. bUDEM NAZYWATX M WS@DU OPREDELENNYM, ESLI D(q, a) 6= ∅ DLQ WSEH q ∈ Q I a ∈ T . lEMMA. pUSTX M = (Q, T, D, q0 , F ) – dka, NE QWLQ@]IJSQ WS@DU OPREDELENNYM. sU]ESTWUET WS@DU OPREDELENNYJ dka M 0 , TAKOJ ˆTO L(M ) = L(M 0 ). dOKAZATELXSTWO. rASSMOTRIM AWTOMAT M 0 = (Q ∪ {q 0 }, T, D0 , q0 , F ), GDE q 0 ∈ / Q – NEKOTOROE NOWOE SOSTOQNIE, A FUNKCIQ D 0 OPREDELQETSQ SLEDU@]IM OBRAZOM: (1) dLQ WSEH q ∈ Q I a ∈ T , TAKIH ˆTO D(q, a) 6= ∅, OPREDELITX D 0 (q, a) = D(q, a). (2) dLQ WSEH q ∈ Q I a ∈ T , TAKIH ˆTO D(q, a) = ∅, OPREDELITX D 0 (q, a) = q0 . (3) dLQ WSEH a ∈ T OPREDELITX D 0 (q 0 , a) = q 0 . lEGKO POKAZATX, ˆTO AWTOMAT M 0 DOPUSKAET TOT VE QZYK, ˆTO I M . pRIWEDENNYJ NIVE ALGORITM POLUˆAET NA WHODE WS@DU OPREDELENNYJ AWTOMAT. eSLI AWTOMAT NE QWLQETSQ WS@DU OPREDELENNYM, EGO MOVNO SDELATX TAKOWYM NA OSNOWANII TOLXKO ˆTO PRIWEDENNOJ LEMMY. aLGORITM 3.4. pOSTROENIE dka S MINIMALXNYM ˆISLOM SOSTOQNIJ. wHOD. wS@DU OPREDELENNYJ dka M = (Q, T, D, q0 , F ). wYHOD. dka M 0 = (Q0 , T, D0 , q00 , F 0 ), TAKOJ ˆTO L(M ) = L(M 0 ) I M 0 SODERVIT NAIMENX[EE WOZMOVNOE ˆISLO SOSTOQNIJ. mETOD. wYPOLNITX [AGI 1-5:
3.3. algoritmy postroeniq kone˜nyh awtomatow
33
(1) pOSTROITX NAˆALXNOE RAZBIENIE Π MNOVESTWA SOSTOQNIJ IZ DWUH GRUPP: ZAKL@ˆITELXNYE SOSTOQNIQ Q I OSTALXNYE Q−F , T.E. Π = {F, Q−F }. (2) pRIMENITX K Π SLEDU@]U@ PROCEDURU I POLUˆITX NOWOE RAZBIENIE Πnew : for (KAVDOJ GRUPPY G W Π){ RAZBITX G NA PODGRUPPY TAK, ˆTOBY SOSTOQNIQ s I t IZ G OKAZALISX W ODNOJ PODGRUPPE TOGDA I TOLXKO TOGDA, KOGDA DLQ KAVDOGO WHODNOGO SIMWOLA a SOSTOQNIQ s I t IME@T PEREHODY PO a W SOSTOQNIQ IZ ODNOJ I TOJ VE GRUPPY W Π; ZAMENITX G W Πnew NA MNOVESTWO WSEH POLUˆENNYH PODGRUPP; } (3) eSLI Πnew = Π, POLAGAEM Πres = Π I PEREHODIM K [AGU 4, INAˆE POWTORQEM [AG 2 S Π := Πnew . (4) pUSTX Πres = {G1 , ... , Gn }. oPREDELIM: Q0 = {G1 , ... , Gn }; q00 = G, GDE GRUPPA G ∈ Q0 TAKOWA, ˆTO q0 ∈ G; F 0 = {G|G ∈ Q0 I G ∩ F 6= ∅}; D0 (p0 , a) = q 0 , ESLI D(p, a) = q, GDE p ∈ p0 I q ∈ q 0 . tAKIM OBRAZOM, KAVDAQ GRUPPA W Πres STANOWITSQ SOSTOQNIEM NOWOGO AWTOMATA M 0 . eSLI GRUPPA SODERVIT NAˆALXNOE SOSTOQNIE AWTOMATA M , “TA GRUPPA STANOWITSQ NAˆALXNYM SOSTOQNIEM AWTOMATA M 0 . eSLI GRUPPA SODERVIT ZAKL@ˆITELXNOE SOSTOQNIE M , ONA STANOWITSQ ZAKL@ˆITELXNYM SOSTOQNIEM M 0 . oTMETIM, ˆTO KAVDAQ GRUPPA Πres LIBO SOSTOIT TOLXKO IZ SOSTOQNIJ IZ F , LIBO NE IMEET SOSTOQNIJ IZ F . pEREHODY OPREDELQ@TSQ OˆEWIDNYM OBRAZOM. (5) eSLI M 0 IMEET “MERTWOE” SOSTOQNIE, T.E. SOSTOQNIE, KOTOROE NE QWLQETSQ DOPUSKA@]IM I IZ KOTOROGO NET PUTEJ W DOPUSKA@]IE, UDALITX EGO I SWQZANNYE S NIM PEREHODY IZ M 0 . uDALITX IZ M 0 TAKVE WSE SOSTOQNIQ, NEDOSTIVIMYE IZ NAˆALXNOGO. pRIMER 3.10. rEZULXTAT PRIMENENIQ ALGORITMA 3.4 PRIWEDEN NA RIS. 3.15.
glawa 3. leksi˜eskij analiz
34 b
a
b a
2 b a
1 b
3
4 a
b
a
{1}
b
{2,3}
a
b a
{4,5}
a
5 b
b
rIS. 3.15:
3.4
rEGULQRNYE MNOVESTWA I IH PREDSTAWLENIQ
w RAZDELE 3.3.3 PRIWEDEN ALGORITM POSTROENIQ DETERMINIROWANNOGO KONEˆNOGO AWTOMATA PO REGULQRNOMU WYRAVENI@. rASSMOTRIM TEPERX KAK PO OPISANI@ KONEˆNOGO AWTOMATA POSTROITX REGULQRNOE MNOVESTWO, SOWPADA@]EE S QZYKOM, DOPUSKAEMYM KONEˆNYM AWTOMATOM. tEOREMA 3.1. qZYK, DOPUSKAEMYJ DETERMINIROWANNYM KONEˆNYM AWTOMATOM, QWLQETSQ REGULQRNYM MNOVESTWOM. dOKAZATELXSTWO. pUSTX L – QZYK DOPUSKAEMYJ DETERMINIROWANNYM KONEˆNYM AWTOMATOM M = ({q1 , ... , qn }, T, D, q1 , F ). wWEDEM De – RAS[IRENNU@ FUNKCI@ PEREHODOW AWTOMATA M : D e (q, w) = p, GDE w ∈ T ∗ , TOGDA I TOLXKO TOGDA, KOGDA (q, w) `∗ (p, e). k oBOZNAˆIM Rij MNOVESTWO WSEH SLOW x TAKIH, ˆTO D e (qi , x) = qj I ESLI e D (qi , y) = qs DLQ L@BOJ CEPOˆKI y – PREFIKSA x, OTLIˆNOGO OT x I e, TO s 6 k. k iNYMI SLOWAMI, Rij ESTX MNOVESTWO WSEH SLOW, KOTORYE PEREWODQT KONEˆNYJ AWTOMAT IZ SOSTOQNIQ qi W SOSTOQNIE qj , NE PROHODQ NI ˆEREZ KAKOE SOSTOQNIE qs DLQ s > k. oDNAKO, i I j MOGUT BYTX BOLX[E k. k Rij MOVET BYTX OPREDELENO REKURSIWNO SLEDU@]IM OBRAZOM: 0 Rij = {a|a ∈ T, D(qi , a) = qj }, k−1 S k−1 k−1 ∗ k−1 k Rij = Rij Rik (Rkk ) Rkj , GDE 1 6 k 6 n. k tAKIM OBRAZOM, OPREDELENIE Rij OZNAˆAET, ˆTO DLQ WHODNOJ CEPOˆKI w, PEREWODQ]EJ M IZ qi W qj BEZ PEREHODA ˆEREZ SOSTOQNIQ S NOMERAMI, BOLX[IMI k, SPRAWEDLIWO ROWNO ODNO IZ SLEDU@]IH DWUH UTWERVDENIJ: k−1 1. cEPOˆKA w PRINADLEVIT Rij , T.E. PRI ANALIZE CEPOˆKI w AWTOMAT NIKOGDA NE DOSTIGAET SOSTOQNIJ S NOMERAMI, BOLX[IMI ILI RAWNYMI k.
3.4. regulqrnye mnovestwa i ih predstawleniq
35
2. cEPOˆKA w MOVET BYTX PREDSTAWLENA W WIDE w = w1 w2 w3 , k−1 GDE w1 ∈ Rik (PODCEPOˆKA w1 PEREWODIT M SNAˆALA W qk ), k−1 ∗ w2 ∈ (Rkk ) (PODCEPOˆKA w2 PEREWODIT M IZ qk OBRATNO W qk , NE PROHODQ ˆEREZ SOSTOQNIQ S NOMERAMI, BOLX[IMI ILI RAWNYMI k), I k−1 w3 ∈ Rkj (PODCEPOˆKA w3 PEREWODIT M IZ SOSTOQNIQ qk W qj ) – RIS. 3.16.
qk
qi
qj qs , s = k -1
rIS. 3.16: tOGDA L =
S
n R1j . iNDUKCIEJ PO k MOVNO POKAZATX, ˆTO “TO MNOVESTWO
qj ∈F
QWLQETSQ REGULQRNYM. tAKIM OBRAZOM, DLQ WSQKOGO REGULQRNOGO MNOVESTWA IMEETSQ KONEˆNYJ AWTOMAT, DOPUSKA@]IJ W TOˆNOSTI “TO REGULQRNOE MNOVESTWO, I NAOBOROT – QZYK, DOPUSKAEMYJ KONEˆNYM AWTOMATOM ESTX REGULQRNOE MNOVESTWO. rASSMOTRIM TEPERX SOOTNO[ENIE MEVDU QZYKAMI, POROVDAEMYMI PRAWOLINEJNYMI GRAMMATIKAMI I DOPUSKAEMYMI KONEˆNYMI AWTOMATAMI. pRAWOLINEJNAQ GRAMMATIKA G = (N, T, P, S) NAZYWAETSQ REGULQRNOJ, ESLI (1) KAVDOE EE PRAWILO, KROME S → e, IMEET WID LIBO A → aB, LIBO A → a, GDE A, B ∈ N , a ∈ T ; (2) W TOM SLUˆAE, KOGDA S → e ∈ P , NAˆALXNYJ SIMWOL S NE WSTREˆAETSQ W PRAWYH ˆASTQH PRAWIL. lEMMA. pUSTX G – PRAWOLINEJNAQ GRAMMATIKA. sU]ESTWUET REGULQRNAQ GRAMMATIKA G0 TAKAQ, ˆTO L(G) = L(G0 ). dOKAZATELXSTWO. pREDOSTAWLQETSQ ˆITATEL@ W KAˆESTWE UPRAVNENIQ. tEOREMA 3.2. pUSTX G = (N, T, P, S) – PRAWOLINEJNAQ GRAMMATIKA. tOGDA SU]ESTWUET KONEˆNYJ AWTOMAT M = (Q, T, D, q0 , F ) DLQ KOTOROGO L(M ) = L(G).
glawa 3. leksi˜eskij analiz
36
dOKAZATELXSTWO. nA OSNOWANII PRIWEDENNOJ WY[E LEMMY, BEZ OGRANIˆENIQ OB]NOSTI MOVNO SˆITATX, ˆTO G – REGULQRNAQ GRAMMATIKA. pOSTROIM NEDETERMINIROWANNYJ KONEˆNYJ AWTOMAT M SLEDU@]IM OBRAZOM: 1. SOSTOQNIQMI M BUDUT NETERMINALY G PL@S NOWOE SOSTOQNIE R, NE PRINADLEVA]EE N . tAK ˆTO Q = N ∪ {R}; 2. W KAˆESTWE NAˆALXNOGO SOSTOQNIQ M PRIMEM S, T.E. q0 = S; 3. ESLI P SODERVIT PRAWILO S → e, TO F = {S, R}, INAˆE F = {R}. nAPOMNIM, ˆTO S NE WSTREˆAETSQ W PRAWYH ˆASTQH PRAWIL, ESLI S → e ∈ P; 4. SOSTOQNIE R ∈ D(A, a), ESLI A → a ∈ P . kROME TOGO, D(A, a) SODERVIT WSE B TAKIE, ˆTO A → aB ∈ P . D(R, a) = ∅ DLQ KAVDOGO a ∈ T . M , ˆITAQ WHOD w, MODELIRUET WYWOD w W GRAMMATIKE G. pOKAVEM, ˆTO L(M ) = L(G). pUSTX w = a1 a2 ... an ∈ L(G), n > 1. tOGDA S ⇒ a1 A1 ⇒ ... ⇒ a1 a2 ... an−1 An−1 ⇒ a1 a2 ... an−1 an DLQ NEKOTOROJ POSLEDOWATELXNOSTI NETERMINALOW A1 , A2 , ... , An−1 . pO OPREDELENI@, D(S, a1 ) SODERVIT A1 , D(A1 , a2 ) SODERVIT A2 , I T.D., D(An−1 , an ) SODERVIT R. tAK ˆTO w ∈ L(M ), POSKOLXKU D e (S, w) SODERVIT R, A R ∈ F . eSLI e ∈ L(G), TO S ∈ F , TAK ˆTO e ∈ L(M ). aNALOGIˆNO, ESLI w = a1 a2 ... an ∈ L(M ), n > 1, TO SU]ESTWUET POSLEDOWATELXNOSTX SOSTOQNIJ S, A1 , A2 , ... , An−1 , R TAKAQ, ˆTO D(S, a1 ) SODERVIT A1 , D(A1 , a2 ) SODERVIT A2 , I T.D. pO“TOMU S ⇒ a1 A1 ⇒ a1 a2 A2 ⇒ ... ⇒ a1 a2 ... an−1 An−1 ⇒ a1 a2 ... an−1 an – WYWOD W G I x ∈ L(G). eSLI e ∈ L(M ), TO S ∈ F , TAK ˆTO S → e ∈ P I e ∈ L(G). tEOREMA 3.3. dLQ KAVDOGO KONEˆNOGO AWTOMATA M = (Q, T, D, q 0 , F ) SU]ESTWUET PRAWOLINEJNAQ GRAMMATIKA G = (N, T, P, S) TAKAQ, ˆTO L(G) = L(M ). dOKAZATELXSTWO. bEZ POTERI OB]NOSTI MOVNO SˆITATX, ˆTO AWTOMAT M – DETERMINIROWANNYJ. oPREDELIM GRAMMATIKU G SLEDU@]IM OBRAZOM: 1. NETERMINALAMI GRAMMATIKI G BUDUT SOSTOQNIQ AWTOMATA M . tAK ˆTO N = Q; 2. W KAˆESTWE T.E. S = q0 ;
NAˆALXNOGO
SIMWOLA
3. A → aB ∈ P , ESLI D(A, a) = B;
GRAMMATIKI
G
PRIMEM
q0 ,
3.5. programmirowanie leksi˜eskogo
analiza
37
4. A → a ∈ P , ESLI D(A, a) = B I B ∈ F ; 5. S → e ∈ P , ESLI q0 ∈ F . dOKAZATELXSTWO TOGO, ˆTO S ⇒∗ w TOGDA I TOLXKO TOGDA, KOGDA D (q0 , w) ∈ F , ANALOGIˆNO DOKAZATELXSTWU TEOREMY 3.2. e
3.5
pROGRAMMIROWANIE LEKSIˆESKOGO ANALIZA
kAK UVE OTMEˆALOSX RANEE, LEKSIˆESKIJ ANALIZATOR (la) MOVET BYTX OFORMLEN KAK PODPROGRAMMA. pRI OBRA]ENII K la, WYRABATYWA@TSQ KAK MINIMUM DWA REZULXTATA: TIP WYBRANNOJ LEKSEMY I EE ZNAˆENIE (ESLI ONO ESTX). eSLI la SAM FORMIRUET TABLICY OB˙EKTOW, ON WYDAET TIP LEKSEMY I UKAZATELX NA SOOTWETSTWU@]IJ WHOD W TABLICE OB˙EKTOW. eSLI VE la NE RABOTAET S TABLICAMI OB˙EKTOW, ON WYDAET TIP LEKSEMY, A EE ZNAˆENIE PEREDAETSQ, NAPRIMER, ˆEREZ NEKOTORU@ GLOBALXNU@ PEREMENNU@. pOMIMO ZNAˆENIQ LEKSEMY, “TA GLOBALXNAQ PEREMENNAQ MOVET SODERVATX NEKOTORU@ DOPOLNITELXNU@ INFORMACI@: NOMER TEKU]EJ STROKI, NOMER SIMWOLA W STROKE I T.D. —TA INFORMACIQ MOVET ISPOLXZOWATXSQ W RAZLIˆNYH CELQH, NAPRIMER, DLQ DIAGNOSTIKI. w OSNOWE la LEVIT DIAGRAMMA PEREHODOW SOOTWETSTWU@]EGO KONEˆNOGO AWTOMATA. oTDELXNAQ PROBLEMA ZDESX – ANALIZ KL@ˆEWYH SLOW. kAK PRAWILO, KL@ˆEWYE SLOWA – “TO WYDELENNYE IDENTIFIKATORY. pO“TOMU WOZMOVNY DWA OSNOWNYH SPOSOBA RASPOZNAWANIQ KL@ˆEWYH SLOW: LIBO OˆEREDNAQ LEKSEMA SNAˆALA DIAGNOSTIRUETSQ NA SOWPADENIE S KAKIM-LIBO KL@ˆEWYM SLOWOM I W SLUˆAE NEUSPEHA DELAETSQ POPYTKA WYDELITX LEKSEMU IZ KAKOGO-LIBO KLASSA, LIBO, NAOBOROT, POSLE WYBORKI LEKSEMY IDENTIFIKATORA PROISHODIT OBRA]ENIE K TABLICE KL@ˆEWYH SLOW NA PREDMET SRAWNENIQ. pODROBNEE O MEHANIZMAH POISKA W TABLICAH BUDET SKAZANO NIVE (GL. 7), ZDESX OTMETIM TOLXKO, ˆTO POISK KL@ˆEWYH SLOW MOVET WESTISX LIBO W OSNOWNOJ TABLICE IMEN I W “TOM SLUˆAE W NEE DO NAˆALA RABOTY la ZAGRUVA@TSQ KL@ˆEWYE SLOWA, LIBO W OTDELXNOJ TABLICE. pRI PERWOM SPOSOBE WSE KL@ˆEWYE SLOWA NEPOSREDSTWENNO WSTRAIWA@TSQ W KONEˆNYJ AWTOMAT LEKSIˆESKOGO ANALIZATORA, WO WTOROM KONEˆNYJ AWTOMAT SODERVIT TOLXKO RAZBOR IDENTIFIKATOROW. w NEKOTORYH QZYKAH (NAPRIMER, pl/1 ILI fORTRAN) KL@ˆEWYE SLOWA MOGUT ISPOLXZOWATXSQ W KAˆESTWE OBYˆNYH IDENTIFIKATOROW. w “TOM SLUˆAE RABOTA la NE MOVET IDTI NEZAWISIMO OT RABOTY SINTAKSIˆESKOGO ANALIZATORA. w fORTRANE WOZMOVNY, NAPRIMER, SLEDU@]IE STROKI: DO 10 I=1,25 DO 10 I=1.25
glawa 3. leksi˜eskij analiz
38
w PERWOM SLUˆAE STROKA – “TO ZAGOLOWOK CIKLA DO, WO WTOROM – OPERATOR PRISWAIWANIQ. pO“TOMU, PREVDE ˆEM MOVNO BUDET WYDELITX LEKSEMU, LEKSIˆESKIJ ANALIZATOR DOLVEN ZAGLQNUTX DOWOLXNO DALEKO. e]E SLOVNEE DELO W pl/1. zDESX WOZMOVNY TAKIE OPERATORY: IF ELSE THEN ELSE = THEN; ELSE THEN = ELSE; ILI DECLARE (A1, A2, ... , AN) I TOLXKO W ZAWISIMOSTI OT TOGO, ˆTO STOIT POSLE “)”, MOVNO OPREDELITX, QWLQETSQ LI DECLARE KL@ˆEWYM SLOWOM ILI IDENTIFIKATOROM. dLINA TAKOJ STROKI MOVET BYTX SKOLX UGODNO BOLX[OJ I UVE NEWOZMOVNO OTDELITX FAZU SINTAKSIˆESKOGO ANALIZA OT FAZY LEKSIˆESKOGO ANALIZA. rASSMOTRIM NESKOLXKO PODROBNEE WOPROSY PROGRAMMIROWANIQ la. oSNOWNAQ OPERACIQ LEKSIˆESKOGO ANALIZATORA, NA KOTORU@ UHODIT BOLX[AQ ˆASTX WREMENI EGO RABOTY – “TO WZQTIE OˆEREDNOGO SIMWOLA I PROWERKA NA PRINADLEVNOSTX EGO NEKOTOROMU DIAPAZONU. nAPRIMER, OSNOWNOJ CIKL PRI WYBORKE ˆISLA W PROSTEJ[EM SLUˆAE MOVET WYGLQDETX SLEDU@]IM OBRAZOM: while (Insym=’0’) { ... } pROGRAMMU MOVNO ZNAˆITELXNO ULUˆ[ITX SLEDU@]IM OBRAZOM [4]. pUSTX LETTER, DIGIT, BLANK – “LEMENTY PEREˆISLIMOGO TIPA. wWEDEM MASSIW map, WHODAMI KOTOROGO BUDUT SIMWOLY, ZNAˆENIQMI – TIPY SIMWOLOW. iNICIALIZIRUEM MASSIW map SLEDU@]IM OBRAZOM: map[’a’]=LETTER; ........ map[’z’]=LETTER; map[’0’]=DIGIT; ........ map[’9’]=DIGIT; map[’ ’]=BLANK; ........ tOGDA PRIWEDENNYJ WY[E CIKL PRIMET SLEDU@]U@ FORMU: while (map[Insym]==DIGIT) { ... } wYDELENIE KL@ˆEWYH SLOW MOVET OSU]ESTWLQTXSQ POSLE WYDELENIQ IDENTIFIKATOROW. la RABOTAET BYSTREE, ESLI KL@ˆEWYE SLOWA WYDELQ@TSQ NEPOSREDSTWENNO. dLQ “TOGO STROITSQ KONEˆNYJ AWTOMAT, OPISYWA@]IJ MNOVESTWO KL@ˆEWYH SLOW. nA RIS. 3.17 PRIWEDEN FRAGMENT TAKOGO AWTOMATA. rASSMOTRIM PRIMER PROGRAMMIROWANIQ “TOGO KONEˆNOGO AWTOMATA NA QZYKE sI, PRIWEDENNYJ W [14]:
3.5. programmirowanie leksi˜eskogo
-
"
#%$& '( )!* +
.
$& ',( )!* "
"
+
39
!
- ' . "
/
analiza
/
$& ',( )!*
#$& ' ( &!*
102 rIS. 3.17:
........ case ’i’: if (cp[0]==’f’ &&!(map[cp] & (DIGIT | LETTER))) {cp++; return IF;} if (cp[0]==’n’ && cp==’t’ &&!(map[cp] & (DIGIT | LETTER))) {cp+=2; return INT;} { OBRABOTKA IDENTIFIKATORA } ........ zDESX cp – UKAZATELX TEKU]EGO SIMWOLA. w MASSIWE map KLASSY SIMWOLOW KODIRU@TSQ BITAMI. pOSKOLXKU la ANALIZIRUET KAVDYJ SIMWOL WHODNOGO POTOKA, EGO SKOROSTX SU]ESTWENNO ZAWISIT OT SKOROSTI WYBORKI OˆEREDNOGO SIMWOLA WHODNOGO POTOKA. w SWO@ OˆEREDX, “TA SKOROSTX WO MNOGOM OPREDELQETSQ SHEMOJ BUFERIZACII. rASSMOTRIM WOZMOVNYE “FFEKTIWNYE SHEMY BUFERIZACII. bUDEM ISPOLXZOWATX BUFER, SOSTOQ]IJ IZ DWUH ODINAKOWYH ˆASTEJ DLINY N (RIS. 3.18, A), GDE N – RAZMER BLOKA OBMENA (NAPRIMER, 1024, 2048 I T.D.). ˜TOBY NE ˆITATX KAVDYJ SIMWOL OTDELXNO, W KAVDU@ IZ POLOWIN BUFERA POOˆEREDNO ODNOJ KOMANDOJ ˆTENIQ SˆITYWAETSQ N SIMWOLOW. eSLI NA WHODE OSTALOSX MENX[E N SIMWOLOW, W BUFER POME]AETSQ SPECIALXNYJ SIMWOL (eof). nA BUFER UKAZYWA@T DWA UKAZATELQ: PRODWIVENIE I NAˆALO. mEVDU UKAZATELQMI RAZME]AETSQ TEKU]AQ LEKSEMA. wNAˆALE ONI OBA UKAZYWA@T NA PERWYJ SIMWOL WYDELQEMOJ LEKSEMY. oDIN IZ NIH, PRODWIVENIE, PRODWIGAETSQ WPERED, POKA NE BUDET WYDELENA LEKSEMA, I USTANAWLIWAETSQ NA EE KONEC. pOSLE OBRABOTKI LEKSEMY OBA UKAZATELQ USTANAWLIWA@TSQ NA
glawa 3. leksi˜eskij analiz
40
N
N
N
N eof eof
rIS. 3.18:
SIMWOL, SLEDU@]IJ ZA LEKSEMOJ. eSLI UKAZATELX PRODWIVENIE PEREHODIT SEREDINU BUFERA, PRAWAQ POLOWINA ZAPOLNQETSQ NOWYMI N SIMWOLAMI. eSLI UKAZATELX PRODWIVENIE PEREHODIT PRAWU@ GRANICU BUFERA, LEWAQ POLOWINA ZAPOLNQETSQ N SIMWOLAMI I UKAZATELX PRODWIVENIE USTANAWLIWAETSQ NA NAˆALO BUFERA. pRI KAVDOM PRODWIVENII UKAZATELQ NEOBHODIMO PROWERQTX, NE DOSTIGLI LI MY GRANICY ODNOJ IZ POLOWIN BUFERA. dLQ WSEH SIMWOLOW, KROME LEVA]IH W KONCE POLOWIN BUFERA, TREBU@TSQ DWE PROWERKI. ˜ISLO PROWEROK MOVNO SWESTI K ODNOJ, ESLI W KONCE KAVDOJ POLOWINY POMESTITX DOPOLNITELXNYJ “STOROVEWOJ” SIMWOL, W KAˆESTWE KOTOROGO LOGIˆNO WZQTX eof (RIS. 3.18, B). w “TOM SLUˆAE POˆTI DLQ WSEH SIMWOLOW DELAETSQ EDINSTWENNAQ PROWERKA NA SOWPADENIE S eof I TOLXKO W SLUˆAE SOWPADENIQ NUVNO DOPOLNITELXNO PROWERITX, DOSTIGLI LI MY SEREDINY ILI PRAWOGO KONCA.
3.6
kONSTRUKTOR LEKSIˆESKIH ANALIZATOROW LEX
dLQ AWTOMATIZACII RAZRABOTKI LEKSIˆESKIH ANALIZATOROW BYLO RAZRABOTANO DOWOLXNO MNOGO SREDSTW. kAK PRAWILO, WHODNYM QZYKOM DLQ NIH SLUVAT LIBO PRAWOLINEJNYE GRAMMATIKI, LIBO QZYK REGULQRNYH WYRAVENIJ. oDNOJ IZ NAIBOLEE RASPROSTRANENNYH SISTEM QWLQETSQ LEX, RABOTA@]IJ S RAS[IRENNYMI REGULQRNYMI WYRAVENIQMI. LEX-PROGRAMMA SOSTOIT IZ TREH ˆASTEJ: oB˙QWLENIQ %% pRAWILA TRANSLQCII %% wSPOMOGATELXNYE PODPROGRAMMY sEKCIQ OB˙QWLENIJ WKL@ˆAET OB˙QWLENIQ PEREMENNYH, KONSTANT I OPREDELENIQ REGULQRNYH WYRAVENIJ. pRI OPREDELENII REGULQRNYH WYRAVENIJ
3.6. konstruktor leksi˜eskih analizatorow LEX
41
MOGUT ISPOLXZOWATXSQ SLEDU@]IE KONSTRUKCII: [abc] – LIBO a, LIBO b, LIBO c; [a-z] – DIAPAZON SIMWOLOW; R* – 0 ILI BOLEE POWTORENIJ REGULQRNOGO WYRAVENIQ R; R+ – 1 ILI BOLEE POWTORENIJ REGULQRNOGO WYRAVENIQ R; R1/R2 – R1 , ESLI ZA NIM SLEDUET R2 ; R1|R2 – LIBO R1 , LIBO R2 ; R? – ESLI ESTX R, WYBRATX EGO; R$ – WYBRATX R, ESLI ONO POSLEDNEE W STROKE; ^R – WYBRATX R, ESLI ONO PERWOE W STROKE; [^R] – DOPOLNENIE K R; R{n,m} – POWTORENIE R OT n DO m RAZ; {IMQ} – IMENOWANNOE REGULQRNOE WYRAVENIE; (R) – GRUPPIROWKA. pRAWILA TRANSLQCII LEX PROGRAMM IME@T WID p_1 { DEJSTWIE_1 } p_2 { DEJSTWIE_2 } ................ p_n { DEJSTWIE_n } GDE KAVDOE p_i – REGULQRNOE WYRAVENIE, A KAVDOE DEJSTWIE_i – FRAGMENT PROGRAMMY, OPISYWA@]IJ, KAKOE DEJSTWIE DOLVEN SDELATX LEKSIˆESKIJ ANALIZATOR, KOGDA OBRAZEC p_i SOPOSTAWLQETSQ LEKSEME. w LEX DEJSTWIQ ZAPISYWA@TSQ NA sI. tRETXQ SEKCIQ SODERVIT WSPOMOGATELXNYE PROCEDURY, NEOBHODIMYE DLQ DEJSTWIJ. —TI PROCEDURY MOGUT TRANSLIROWATXSQ RAZDELXNO I ZAGRUVATXSQ S LEKSIˆESKIM ANALIZATOROM. lEKSIˆESKIJ ANALIZATOR, SGENERIROWANNYJ LEX, WZAIMODEJSTWUET S SINTAKSIˆESKIM ANALIZATOROM SLEDU@]IM OBRAZOM. pRI WYZOWE EGO SINTAKSIˆESKIM ANALIZATOROM LEKSIˆESKIJ ANALIZATOR POSIMWOLXNO ˆITAET OSTATOK WHODA, POKA NE NAHODIT SAMYJ DLINNYJ PREFIKS, KOTORYJ MOVET BYTX SOPOSTAWLEN ODNOMU IZ REGULQRNYH WYRAVENIJ p_i. zATEM ON WYPOLNQET DEJSTWIE_i. kAK PRAWILO, DEJSTWIE_i WOZWRA]AET UPRAWLENIE SINTAKSIˆESKOMU ANALIZATORU. eSLI “TO NE TAK, T.E. W SOOTWETSTWU@]EM DEJSTWII NET WOZWRATA, TO LEKSIˆESKIJ ANALIZATOR PRODOLVAET POISK LEKSEM DO TEH, POKA DEJSTWIE NE WERNET UPRAWLENIE SINTAKSIˆESKOMU ANALIZATORU. pOWTORNYJ POISK LEKSEM WPLOTX DO QWNOJ PEREDAˆI UPRAWLENIQ POZWOLQET LEKSIˆESKOMU ANALIZATORU PRAWILXNO OBRABATYWATX PROBELY I KOMMENTARII. sINTAKSIˆESKOMU ANALIZATORU LEKSIˆESKIJ ANALIZATOR WOZWRA]AET EDINSTWENNOE ZNAˆENIE – TIP LEKSEMY. dLQ PEREDAˆI INFORMACII O TIPE LEKSEMY ISPOLXZUETSQ GLOBALXNAQ PEREMENNAQ yylval. tEKSTOWOE PREDSTAWLENIE WYDELENNOJ LEKSEMY HRANITSQ W PEREMENNOJ yytext, A EE DLINA W PEREMENNOJ yylen. pRIMER 3.11. LEX-PROGRAMMA DLQ la, OBRABATYWA@]EGO IDENTIFIKATORY, ˆISLA, KL@ˆEWYE SLOWA if, then, else I ZNAKI LOGIˆESKIH OPERACIJ.
42
glawa 3. leksi˜eskij analiz %{ /*OPREDELENIQ KONSTANT LT,LE,EQ,NE,GT, GE,IF,THEN,ELSE,ID,NUMBER,RELOP, NAPRIMER, ˆEREZ DEFINE ILI SKALQRNYJ TIP*/ %} /*REGULQRNYE OPREDELENIQ*/ delim [ \t\n] ws {delim}+ letter [A-Za-z] digit [0-9] id {letter}({letter}|\{digit})* number {digit}+(\.\{digit}+)?(E[+\-]?{digit}+)? %% {ws} {/* DEJSTWIJ I WOZWRATA NET */} if {return(IF);} then {return(THEN);} else {return(ELSE);} {id} {yylval=install_id(); return(ID);} {number} {yylval=install_num(); return(NUMBER);} "=" {yylval=GE; return(RELOP);} %% install_id() {/*PODPROGRAMMA, KOTORAQ POME]AET LEKSEMU, NA PERWYJ SIMWOL KOTOROJ UKAZYWAET yytext, DLINA KOTOROJ RAWNA yyleng, W TABLICU SIMWOLOW I WOZWRA]AET UKAZATELX NA NEE*/ } install_num() {/*ANALOGIˆNAQ PODPROGRAMMA DLQ RAZME]ENIQ LEKSEMY ˆISLA*/ }
w RAZDELE OB˙QWLENIJ, ZAKL@ˆENNOM W SKOBKI %{ I %}, PEREˆISLENY KONSTANTY, ISPOLXZUEMYE PRAWILAMI TRANSLQCII. wSE, ˆTO ZAKL@ˆENO W “TI SKOBKI, NEPOSREDSTWENNO KOPIRUETSQ W PROGRAMMU LEKSIˆESKOGO ANALIZATORA lex.yy.c I NE RASSMATRIWAETSQ KAK ˆASTX REGULQRNYH OPREDELENIJ ILI PRAWIL TRANSLQCII. tO VE KASAETSQ I WSPOMOGATELXNYH PODPROGRAMM TRETXEJ SEKCII. w DANNOM PRIMERE “TO PODPROGRAMMY install_id I install_num. w SEKCI@ OPREDELENIJ WHODQT TAKVE NEKOTORYE REGULQRNYE OPREDELENIQ. kAVDOE TAKOE OPREDELENIE SOSTOIT IZ IMENI I REGULQRNOGO WYRAVENIQ, OBOZNAˆAEMOGO “TIM IMENEM. nAPRIMER, PERWOE OPREDELENNOE IMQ – “TO delim. oNO OBOZNAˆAET KLASS SIMWOLOW { \t\n\}, T.E. L@BOJ IZ TREH SIMWOLOW: PROBEL, TABULQCIQ ILI NOWAQ STROKA. wTOROE OPREDELENIE – RAZDELITELX, OBOZNAˆAEMYJ IMENEM ws. rAZDELITELX – “TO L@BAQ POSLEDOWATELXNOSTX ODNOGO ILI BOLEE SIMWOLOW-RAZDELITELEJ. sLOWO delim DOLVNO BYTX ZAKL@ˆENO W SKOBKI, ˆTOBY OTLIˆITX EGO OT OBRAZCA, SOSTOQ]EGO IZ PQTI SIMWOLOW delim.
3.6. konstruktor leksi˜eskih analizatorow LEX
43
w OPREDELENII letter ISPOLXZUETSQ KLASS SIMWOLOW. sOKRA]ENIE [A-Za-z] OZNAˆAET L@BU@ IZ PROPISNYH BUKW OT A DO Z ILI STROˆNYH BUKW OT a DO z. w PQTOM OPREDELENII DLQ id DLQ GRUPPIROWKI ISPOLXZU@TSQ SKOBKI, QWLQ@]IESQ METASIMWOLAMI LEX. aNALOGIˆNO, WERTIKALXNAQ ˆERTA – METASIMWOL LEX, OBOZNAˆA@]IJ OB˙EDINENIE. w POSLEDNEM REGULQRNOM OPREDELENII number SIMWOL “+” ISPOLXZUETSQ KAK METASIMWOL “ODNO ILI BOLEE WHOVDENIJ”, SIMWOL “?” KAK METASIMWOL “NOLX ILI ODNO WHOVDENIE”. oBRATNAQ ˆERTA ISPOLXZUETSQ DLQ TOGO, ˆTOBY PRIDATX OBYˆNYJ SMYSL SIMWOLU, ISPOLXZU@]EMUSQ W LEX KAK METASIMWOL. w ˆASTNOSTI, DESQTIˆNAQ TOˆKA W OPREDELENII number OBOZNAˆAETSQ KAK “\.”, POSKOLXKU TOˆKA SAMA PO SEBE PREDSTAWLQET KLASS, SOSTOQ]IJ IZ WSEH SIMWOLOW, ZA ISKL@ˆENIEM SIMWOLA NOWOJ STROKI. w KLASSe SIMWOLOW [+\] OBRATNAQ ˆERTA PERED MINUSOM STOIT POTOMU, ˆTO ZNAK MINUS ISPOLXZUETSQ KAK SIMWOL DIAPAZONA, KAK W [A-Z]. eSLI SIMWOL IMEET SMYSL METASIMWOLA, TO PRIDATX EMU OBYˆNYJ SMYSL MOVNO I PO-DRUGOMU, ZAKL@ˆIW EGO W KAWYˆKI. tAK, W SEKCII PRAWIL TRANSLQCII [ESTX OPERACIJ OTNO[ENIQ ZAKL@ˆENY W KAWYˆKI. rASSMOTRIM PRAWILA TRANSLQCII, SLEDU@]IE ZA PERWYM %%. sOGLASNO PERWOMU PRAWILU, ESLI OBNARUVENO ws, T.E. MAKSIMALXNAQ POSLEDOWATELXNOSTX PROBELOW, TABULQCIJ I NOWYH STROK, NIKAKIH DEJSTWIJ NE PROIZWODITSQ. w ˆASTNOSTI, NE OSU]ESTWLQETSQ WOZWRAT W SINTAKSIˆESKIJ ANALIZATOR. sOGLASNO WTOROMU PRAWILU, ESLI OBNARUVENA POSLEDOWATELXNOSTX BUKW “if”, NUVNO WERNUTX ZNAˆENIE IF, KOTOROE OPREDELENO KAK CELAQ KONSTANTA, PONIMAEMAQ SINTAKSIˆESKIM ANALIZATOROM KAK LEKSEMA “if”. aNALOGIˆNO OBRABATYWA@TSQ KL@ˆEWYE SLOWA “then” I “else” W DWUH SLEDU]IH PRAWILAH. w DEJSTWII, SWQZANNOM S PRAWILOM DLQ id, DWA OPERATORA. pEREMENNOJ yylval PRISWAIWAETSQ ZNAˆENIE, WOZWRA]AEMOE PROCEDUROJ install_id. pEREMENNAQ yylval OPREDELENA W PROGRAMME lex.yy.c, WYHODE LEX, I ONA DOSTUPNA SINTAKSIˆESKOMU ANALIZATORU. yylval HRANIT WOZWRA]AEMOE LEKSIˆESKOE ZNAˆENIE, POSKOLXKU WTOROJ OPERATOR W DEJSTWII, return(ID), MOVET TOLXKO WOZWRATITX KOD KLASSA LEKSEM. fUNKCIQ install_id ZANOSIT IDENTIFIKATORY W TABLICU SIMWOLOW. aNALOGIˆNO OBRABATYWA@TSQ ˆISLA W SLEDU@]EM PRAWILE. w POSLEDNIH [ESTI PRAWILAH yylval ISPOLXZUETSQ DLQ WOZWRATA KODA OPERACII OTNO[ENIQ, WOZWRA]AEMOE VE FUNKCIEJ ZNAˆENIE – “TO KOD LEKSEMY relop. eSLI, NAPRIMER, W TEKU]IJ MOMENT LEKSIˆESKIJ ANALIZATOR OBRABATYWAET LEKSEMU “if”, TO “TOJ LEKSEME SOOTWETSTWU@T DWA OBRAZCA: “if” I {id} I BOLEE DLINNOJ STROKI, SOOTWETSTWU@]EJ OBRAZCU, NET. pOSKOLXKU OBRAZEC “if” PRED[ESTWUET OBRAZCU DLQ IDENTIFIKATORA, KONFLIKT RAZRE[AETSQ W POLXZU KL@ˆEWOGO SLOWA. tAKAQ STRATEGIQ RAZRE[ENIQ KONFLIKTOW POZWOLQET LEGKO REZERWIROWATX KL@ˆEWYE SLOWA. eSLI NA WHODE WSTREˆAETSQ “ 1, TO [qZs] → a[rX1 s1 ][s1 X2 s2 ] ... [sk−1 Xk sk ] DLQ L@BOGO NABORA s1 , s2 , ... , sk SOSTOQNIJ IZ Q; 2. eSLI (r, e) ∈ D(q, a, Z), TO [qZr] → a ∈ P , a ∈ T ∪ {e}; 3. S → [q0 Z0 q] ∈ P DLQ WSEH q ∈ Q. nETERMINALY I PRAWILA WYWODA GRAMMATIKI OPREDELENY TAK, ˆTO RABOTE AWTOMATA M PRI OBRABOTKE CEPOˆKI w SOOTWETSTWUET LEWOSTORONNIJ WYWOD w W GRAMMATIKE G. iNDUKCIEJ PO ˆISLU [AGOW WYWODA W G ILI ˆISLU TAKTOW M NETRUDNO POKAZATX, ˆTO (q, w, A) `+ (p, e, e) TOGDA I TOLXKO TOGDA, KOGDA [qAp] ⇒+ w. tOGDA, ESLI w ∈ L(G), TO S ⇒ [q0 Z0 q] ⇒+ w DLQ NEKOTOROGO q ∈ Q. sLEDOWATELXNO, (q0 , w, Z0 ) `+ (q, e, e) I PO“TOMU w ∈ L. aNALOGIˆNO, ESLI w ∈ L, TO (q0 , w, Z0 ) `+ (q, e, e). zNAˆIT, S ⇒ [q0 Z0 q] ⇒+ w, I PO“TOMU w ∈ L(G). mp-AWTOMAT M = (Q, T, Γ, D, q0 , Z0 , F ) NAZYWAETSQ DETERMINIROWANNYM (dmp-AWTOMATOM), ESLI WYPOLNENY SLEDU@]IE DWA USLOWIQ: (1) mNOVESTWO D(q, a, Z) SODERVIT NE BOLEE ODNOGO “LEMENTA DLQ L@BYH q ∈ Q, a ∈ T ∪ {e}, Z ∈ Γ; (2) eSLI D(q, e, Z) 6= ∅, TO D(q, a, Z) = ∅ DLQ WSEH a ∈ T . qZYK, DOPUSKAEMYJ dmp-AWTOMATOM, NAZYWAETSQ DETERMINIROWANNYM ks-QZYKOM. tAK KAK FUNKCIQ PEREHODOW dmp-AWTOMATA SODERVIT NE BOLEE ODNOGO “LEMENTA DLQ L@BOJ TROJKI ARGUMENTOW, MY BUDEM POLXZOWATXSQ ZAPISX@ D(q, a, Z) = (p, u) DLQ OBOZNAˆENIQ D(q, a, Z) = {(p, u)}. pRIMER 4.2. rASSMOTRIM dmp-AWTOMAT M = ({q0 , q1 , q2 }, {a, b, c}, {Z, a, b}, D, q0 , Z, {q2 }), U KOTOROGO FUNKCIQ PEREHODOW OPREDELQETSQ SLEDU@]IM OBRAZOM: D(q0 , X, Y ) = (q0 , XY ), X ∈ {a, b}, Y ∈ {Z, a, b}, D(q0 , c, Y ) = (q1 , Y ), Y ∈ {a, b}, D(q1 , X, X) = (q1 , e), X ∈ {a, b}, D(q1 , e, Z) = (q2 , e). nETRUDNO POKAZATX, ˆTO “TOT DETERMINIROWANNYJ mp-AWTOMAT DOPUSKAET QZYK L = {wcw R |w ∈ {a, b}+ }.
glawa 4. sintaksi˜eskij analiz
50
k SOVALENI@, dmp-AWTOMATY IME@T MENX[U@ RASPOZNAWATELXNU@ SPOSOBNOSTX, ˆEM mp-AWTOMATY. dOKAZANO, W ˆASTNOSTI, ˆTO SU]ESTWU@T ksQZYKI, NE QWLQ@]IESQ DETERMINIROWANNYMI ks-QZYKAMI (TAKOWYM, NAPRIMER, QWLQETSQ QZYK IZ PRIMERA 4.1). rASSMOTRIM E]E ODNU WAVNU@ RAZNOWIDNOSTX mp-AWTOMATA. rAS[IRENNYM AWTOMATOM S MAGAZINNOJ PAMQTX@ NAZOWEM SEMERKU M = (Q, T, Γ, D, q0 , Z0 , F ), GDE SMYSL WSEH SIMWOLOW TOT VE, ˆTO I DLQ OBYˆNOGO mp-AWTOMATA, KROME D, PREDSTAWLQ@]EGO SOBOJ OTOBRAVENIE KONEˆNOGO PODMNOVESTWA MNOVESTWA Q × (T ∪ {e}) × Γ∗ WO MNOVESTWO KONEˆNYH PODMNOVESTW MNOVESTWA Q×Γ∗ . wSE OSTALXNYE OPREDELENIQ (KONFIGURACII, TAKTA, DOPUSTIMOSTI) DLQ RAS[IRENNOGO mp-AWTOMATA OSTA@TSQ TAKIMI VE, KAK DLQ OBYˆNOGO. tEOREMA 4.3. pUSTX M = (Q, T, Γ, D, q0 , Z0 , F ) – RAS[IRENNYJ mpAWTOMAT. tOGDA SU]ESTWUET TAKOJ mp-AWTOMAT M 0 , ˆTO L(M 0 ) = L(M ). rAS[IRENNYJ mp-AWTOMAT M = (Q, T, Γ, D, q0 , Z0 , F ) NAZYWAETSQ DETERMINIROWANNYM, ESLI WYPOLNENY SLEDU@]IE USLOWIQ: (1) mNOVESTWO D(q, a, u) SODERVIT NE BOLEE ODNOGO “LEMENTA DLQ L@BYH q ∈ Q, a ∈ T ∪ {e}, Z ∈ Γ∗ ; (2) eSLI D(q, a, u) 6= ∅, D(q, a, v) 6= ∅ I u 6= v, TO NE SU]ESTWUET CEPOˆKI x TAKOJ, ˆTO u = vx ILI v = ux; (3) eSLI D(q, a, u) 6= ∅, D(q, e, v) 6= ∅, TO NE SU]ESTWUET CEPOˆKI x TAKOJ, ˆTO u = vx ILI v = ux. tEOREMA 4.4. pUSTX M = (Q, T, Γ, D, q0 , Z0 , F ) – RAS[IRENNYJ dmpAWTOMAT. tOGDA SU]ESTWUET TAKOJ dmp-AWTOMAT M 0 , ˆTO L(M 0 ) = L(M ). dmp-AWTOMAT I RAS[IRENNYJ dmp-AWTOMAT LEVAT W OSNOWE RASSMATRIWAEMYH DALEE W “TOJ GLAWE, SOOTWETSTWENNO, LL I LR-ANALIZATOROW.
4.2
pREOBRAZOWANIQ ks-GRAMMATIK
rASSMOTRIM RQD PREOBRAZOWANIJ, POZWOLQ@]IH “ULUˆ[ITX” WID KONTEKSTNO-SWOBODNOJ GRAMMATIKI, BEZ IZMENENIQ POROVDAEMOGO E@ QZYKA. nAZOWEM SIMWOL X ∈ (N ∪ T ) NEDOSTIVIMYM W ks-GRAMMATIKE G = (N, T, P, S), ESLI X NE POQWLQETSQ NI W ODNOJ WYWODIMOJ CEPOˆKE “TOJ GRAMMATIKI. iNYMI SLOWAMI, SIMWOL X QWLQETSQ NEDOSTIVIMYM, ESLI W G NE SU]ESTWUET WYWODA S ⇒∗ αXβ NI DLQ KAKIH α, β ∈ (N ∪ T )∗ . aLGORITM 4.1. uSTRANENIE NEDOSTIVIMYH SIMWOLOW. wHOD. ks-GRAMMATIKA G = (N, T, P, S).
4.3. predskazywa‘˝ij razbor swerhu-wniz
51
wYHOD. ks-GRAMMATIKA G0 = (N 0 , T 0 , P 0 , S) BEZ NEDOSTIVIMYH SIMWOLOW, TAKAQ, ˆTO L(G0 ) = L(G). mETOD. wYPOLNITX [AGI 1–4: (1) pOLOVITX V0 = {S} I i = 1. (2) pOLOVITX Vi = {X | W P ESTX A → αXβ I A ∈ Vi−1 } ∪ Vi−1 . (3) eSLI Vi 6= Vi−1 , POLOVITX i = i + 1 I PEREJTI K [AGU 2. w PROTIWNOM SLUˆAE PEREJTI K [AGU 4. (4) pOLOVITX N 0 = Vi ∩ N , T 0 = Vi ∩ T . wKL@ˆITX W P 0 WSE PRAWILA IZ P , SODERVA]IE TOLXKO SIMWOLY IZ Vi . nAZOWEM SIMWOL X ∈ (N ∪T ) BESPOLEZNYM W ks-GRAMMATIKE G = (N, T, P, S), ESLI W NEJ NE SU]ESTWUET WYWODA WIDA S ⇒∗ xXy ⇒∗ xwy, GDE w, x, y PRINADLEVAT T ∗ . oˆEWIDNO, ˆTO KAVDYJ NEDOSTIVIMYJ SIMWOL QWLQETSQ BESPOLEZNYM. aLGORITM 4.2. uSTRANENIE BESPOLEZNYH SIMWOLOW. wHOD. ks-GRAMMATIKA G = (N, T, P, S). wYHOD. ks-GRAMMATIKA G0 = (N 0 , T 0 , P 0 , S) BEZ BESPOLEZNYH SIMWOLOW, TAKAQ, ˆTO L(G0 ) = L(G). mETOD. wYPOLNITX [AGI 1–5: (1) pOLOVITX N0 = ∅ I i = 1. (2) pOLOVITX Ni = {A|A → α ∈ P I α ∈ (Ni−1 ∪ T )∗ } ∪ Ni−1 . (3) eSLI Ni 6= Ni−1 , POLOVITX i = i + 1 I PEREJTI K [AGU 2. w PROTIWNOM SLUˆAE POLOVITX Ne = Ni I PEREJTI K [AGU 4. (4) pOLOVITX G1 = ((N ∩ Ne ) ∪ {S}, T, P1 , S), GDE P1 SOSTOIT IZ PRAWIL MNOVESTWA P , SODERVA]IH TOLXKO SIMWOLY IZ Ne ∪ T . (5) pRIMENIW K G1 ALGORITM 4.1, POLUˆITX G0 = (N 0 , T 0 , P 0 , S). ks-GRAMMATIKA BEZ BESPOLEZNYH SIMWOLOW NAZYWAETSQ PRIWEDENNOJ. lEGKO WIDETX, ˆTO DLQ L@BOJ ks-GRAMMATIKI SU]ESTWUET “KWIWALENTNAQ PRIWEDENNAQ. w DALXNEJ[EM BUDEM PREDPOLAGATX, ˆTO WSE RASSMATRIWAMYE GRAMMATIKI – PRIWEDENNYE.
4.3
pREDSKAZYWA@]IJ RAZBOR SWERHU-WNIZ
4.3.1 aLGORITM RAZBORA SWERHU-WNIZ pUSTX DANA ks-GRAMMATIKA G = (N, T, P, S). rASSMOTRIM PREDSKAZYWA@]IJ RAZBOR (ILI RAZBOR SWERHU-WNIZ) DLQ GRAMMATIKI G.
glawa 4. sintaksi˜eskij analiz
52
oSNOWNAQ ZADAˆA PREDSKAZYWA@]EGO RAZBORA – OPREDELENIE PRAWILA WYWODA, KOTOROE NUVNO PRIMENITX K NETERMINALU. pROCESS PREDSKAZYWA@]EGO RAZBORA S TOˆKI ZRENIQ POSTROENIQ DEREWA RAZBORA PROILL@STRIROWAN NA RIS. 4.1.
S
S
S
X 1 X2 • • •
X1 X 2 • • •
•••••••••••
•••••••••••
Y
Y
•••
•••
Z a •••
$
a ••••••••• $
a ••••••••• b ••••• $
rIS. 4.1: fRAGMENTY NEDOSTROENNOGO DEREWA SOOTWETSTWU@T SENTENCIALXNYM FORMAM. wNAˆALE DEREWO SOSTOIT TOLXKO IZ ODNOJ WER[INY, SOOTWETSTWU@]EJ AKSIOME S. w “TOT MOMENT PO PERWOMU SIMWOLU WHODNOJ CEPOˆKI PREDSKAZYWA@]IJ ANALIZATOR DOLVEN OPREDELITX PRAWILO S → X1 X2 ... , KOTOROE DOLVNO BYTX PRIMENENO K S. zATEM NEOBHODIMO OPREDELITX PRAWILO, KOTOROE DOLVNO BYTX PRIMENENO K X1 , I T.D., DO TEH POR, POKA W PROCESSE TAKOGO POSTROENIQ SENTENCIALXNOJ FORMY, SOOTWETSTWU@]EJ LEWOMU WYWODU, NE BUDET PRIMENENO PRAWILO Y → a ... . —TOT PROCESS ZATEM PRIMENQETSQ DLQ SLEDU@]EGO SAMOGO LEWOGO NETERMINALXNOGO SIMWOLA SENTENCIALXNOJ FORMY. nA RIS. 4.2 PRIWEDENA STRUKTURA PREDSKAZYWA@]EGO ANALIZATORA, KOTORYJ OPREDELQET OˆEREDNOE PRAWILO S POMO]X@ TABLICY. tAKU@ TABLICU MOVNO POSTROITX NEPOSREDSTWENNO PO GRAMMATIKE. tABLIˆNO-UPRAWLQEMYJ PREDSKAZYWA@]IJ ANALIZATOR IMEET WHODNU@ LENTU, UPRAWLQ@]EE USTROJSTWO (PROGRAMMU), TABLICU ANALIZA, MAGAZIN (STEK) I WYHODNU@ LENTU. wHODNAQ LENTA SODERVIT ANALIZIRUEMU@ STROKU, ZAKANˆIWA@]U@SQ SIMWOLOM $ – MARKEROM KONCA STROKI. wYHODNAQ LENTA SODERVIT POSLEDOWATELXNOSTX PRIMENENNYH PRAWIL WYWODA. tABLICA ANALIZA – “TO DWUMERNYJ MASSIW M [A, a], GDE A – NETERMINAL, I a – TERMINAL ILI SIMWOL $. zNAˆENIEM M [A, a] MOVET BYTX NEKOTOROE PRAWILO GRAMMATIKI ILI “LEMENT “O[IBKA”. mAGAZIN MOVET SODERVATX POSLEDOWATELXNOSTX SIMWOLOW GRAMMATIKI S
4.3. predskazywa‘˝ij razbor swerhu-wniz
0 1- ./ " X Y Z $
a
+
b
53
$
!"#$%
0 21-
&'(!)"* +!)"$,-# rIS. 4.2:
$ NA DNE. w NAˆALXNYJ MOMENT MAGAZIN SODERVIT TOLXKO NAˆALXNYJ SIMWOL GRAMMATIKI NA WERHU[KE I $ NA DNE. aNALIZATOR RABOTAET SLEDU@]IM OBRAZOM. wNAˆALE ANALIZATOR NAHODITSQ W KONFIGURACII, W KOTOROJ MAGAZIN SODERVIT S$, NA WHODNOJ LENTE w$ (w – ANALIZIRUEMAQ CEPOˆKA), WYHODNAQ LENTA PUSTA. nA KAVDOM TAKTE ANALIZATOR RASSMATRIWAET X – SIMWOL NA WERHU[KE MAGAZINA I a – TEKU]IJ WHODNOJ SIMWOL. —TI DWA SIMWOLA OPREDELQ@T DEJSTWIQ ANALIZATORA. iME@TSQ SLEDU@]IE WOZMOVNOSTI. 1. eSLI X = a = $, ANALIZATOR OSTANAWLIWAETSQ, SOOB]AET OB USPE[NOM OKONˆANII RAZBORA I WYDAET SODERVIMOE WYHODNOJ LENTY. 2. eSLI X = a 6= $, ANALIZATOR UDALQET X IZ MAGAZINA I PRODWIGAET UKAZATELX WHODA NA SLEDU@]IJ WHODNOJ SIMWOL. 3. eSLI X – TERMINAL, I X 6= a, TO ANALIZATOR OSTANAWLIWAETSQ I SOOB]AET O TOM, ˆTO WHODNAQ CEPOˆKA NE PRINADLEVIT QZYKU. 4. eSLI X – NETERMINAL, ANALIZATOR ZAGLQDYWAET W TABLICU M [X, a]. wOZMOVNY DWA SLUˆAQ: A) zNAˆENIEM M [X, a] QWLQETSQ PRAWILO DLQ X. w “TOM SLUˆAE ANALIZATOR ZAMENQET X NA WERHU[KE MAGAZINA NA PRAWU@ ˆASTX DANNOGO PRAWILA, A SAMO PRAWILO POME]AET NA WYHODNU@ LENTU. uKAZATELX WHODA NE PEREDWIGAETSQ. B) zNAˆENIEM M [X, a] QWLQETSQ “O[IBKA”. w “TOM SLUˆAE ANALIZATOR OSTANAWLIWAETSQ I SOOB]AET O TOM, ˆTO WHODNAQ CEPOˆKA NE PRINADLEVIT QZYKU. pRIMER 4.3. rASSMOTRIM GRAMMATIKU ARIFMETIˆESKIH G = ({E, E 0 , T, T 0 , F }, {id, +, ∗, (, )}, P, E) S PRAWILAMI: E → T E0 E 0 → +T E 0 E0 → e T → FT0
T 0 → ∗F T 0 T0 → e F → (E) F → id
WYRAVENIJ
glawa 4. sintaksi˜eskij analiz
54
tABLICA PREDSKAZYWA@]EGO ANALIZATORA DLQ “TOJ GRAMMATIKI PRIWEDENA NA RIS. 4.3. pUSTYE KLETKI TABLICY SOOTWETSTWU@T “LEMENTU “O[IBKA”.
nETERMINAL E E0 T T0 F
wHODNOJ SIMWOL * ( E → T E0
+
id E → T E0
E 0 → +T E 0 T → FT
$
E0 → e E0 → e
0
T → FT T0 → e
)
0
T 0 → ∗F T 0
F → id
T0 → e T0 → e F → (E)
rIS. 4.3:
pRI RAZBORE WHODNOJ CEPOˆKI id+id∗id$ ANALIZATOR SOWER[AET POSLEDOWATELXNOSTX [AGOW, IZOBRAVENNU@ NA RIS. 4.4. zAMETIM, ˆTO ANALIZATOR OSU]ESTWLQET W TOˆNOSTI LEWYJ WYWOD. eSLI ZA UVE PROSMOTRENNYMI WHODNYMI SIMWOLAMI POMESTITX SIMWOLY GRAMMATIKI W MAGAZINE, TO MOVNO POLUˆITX W TOˆNOSTI LEWYE SENTENCIALXNYE FORMY WYWODA. dEREWO RAZBORA DLQ “TOJ CEPOˆKI PRIWEDENO NA RIS. 4.5.
mAGAZIN E$ T E0$ F T 0E0$ id T 0 E 0 $ T 0E0$ E0$ +T E 0 $ T E0$ F T 0E0$ id T 0 E 0 $ T 0E0$ ∗F 0 T 0 E 0 $ F T 0E0$ id T 0 E 0 $ T 0E0$ E0$ $
wHOD id + id ∗ id$ id + id ∗ id$ id + id ∗ id$ id + id ∗ id$ +id ∗ id$ +id ∗ id$ +id ∗ id$ id ∗ id$ id ∗ id$ id ∗ id$ ∗id$ ∗id$ id$ id$ $ $ $ rIS. 4.4:
wYHOD E → T E0 T → FT0 F → id T0 → e E 0 → +T E T → FT0 F → id T 0 → ∗F T 0 F → id T0 → e E0 → e
4.3. predskazywa‘˝ij razbor swerhu-wniz
55
E T F
T'
id
e
E' +
T
F id
*
E' T'
e
F
T'
id
e
rIS. 4.5:
4.3.2 fUNKCII F IRST I F OLLOW pRI POSTROENII TABLICY PREDSKAZYWA@]EGO ANALIZATORA NAM POTREBU@TSQ DWE FUNKCII – F IRST I F OLLOW . pUSTX G = (N, T, P, S) – ks-GRAMMATIKA. dLQ α – PROIZWOLXNOJ CEPOˆKI, SOSTOQ]EJ IZ SIMWOLOW GRAMMATIKI, OPREDELIM F IRST (α) KAK MNOVESTWO TERMINALOW, S KOTORYH NAˆINA@TSQ STROKI, WYWODIMYE IZ α. eSLI α ⇒∗ e, TO e TAKVE PRINADLEVIT F IRST (α). oPREDELIM F OLLOW (A) DLQ NETERMINALA A KAK MNOVESTWO TERMINALOW a, KOTORYE MOGUT POQWITXSQ NEPOSREDSTWENNO SPRAWA OT A W NEKOTOROJ SENTENCIALXNOJ FORME GRAMMATIKI, T.E. MNOVESTWO TERMINALOW a TAKIH, ˆTO SU]ESTWUET WYWOD WIDA S ⇒∗ αAaβ DLQ NEKOTORYH α, β ∈ (N ∪ T )∗ . zAMETIM, ˆTO MEVDU A I a W PROCESSE WYWODA MOGUT NAHODITXSQ NETERMINALXNYE SIMWOLY, IZ KOTORYH WYWODITSQ e. eSLI A MOVET BYTX SAMYM PRAWYM SIMWOLOM NEKOTOROJ SENTENCIALXNOJ FORMY, TO $ TAKVE PRINADLEVIT F OLLOW (A). rASSMOTRIM ALGORITMY WYˆISLENIQ FUNKCII F IRST . aLGORITM 4.3. wYˆISLENIE F IRST DLQ SIMWOLOW GRAMMATIKI. wHOD. ks-GRAMMATIKA G = (N, T, P, S). wYHOD. mNOVESTWO F IRST (X) DLQ KAVDOGO SIMWOLA X ∈ (N ∪ T ). mETOD. wYPOLNITX [AGI 1–3: (1) eSLI X – TERMINAL, TO POLOVITX F IRST (X) = {X}; ESLI X – NETERMINAL, POLOVITX F IRST (X) = ∅. (2) eSLI W P IMEETSQ PRAWILO X → e, TO DOBAWITX e K F IRST (X). (3) pOKA NI K KAKOMU MNOVESTWU F IRST (X) NELXZQ UVE BUDET DOBAWITX NOWYE “LEMENTY, WYPOLNQTX:
56
glawa 4. sintaksi˜eskij analiz ESLI X – NETERMINAL I IMEETSQ PRAWILO WYWODA X → Y1 Y2 ... Yk , TO WKL@ˆITX a W F IRST (X), ESLI a ∈ F IRST (Yi ) DLQ NEKOTOROGO i, 1 6 i 6 k, I e PRINADLEVIT WSEM F IRST (Y1 ), ... , F IRST (Yi−1 ), TO ESTX Y1 ... Yi−1 ⇒∗ e. eSLI e PRINADLEVIT F IRST (Yj ) DLQ WSEH j = 1, 2, ... , k, TO DOBAWITX e K F IRST (X). aLGORITM 4.4. wYˆISLENIE F IRST DLQ CEPOˆKI. wHOD. ks-GRAMMATIKA G = (N, T, P, S). wYHOD. mNOVESTWO F IRST (X1 X2 ... Xn ), Xi ∈ (N ∪ T ). mETOD. wYPOLNITX [AGI 1–3:
(1) pRI POMO]I PREDYDU]EGO ALGORITMA WYˆISLITX F IRST (X) DLQ KAVDOGO X ∈ (N ∪ T ). (2) pOLOVITX F IRST (X1X2 ... Xn ) = ∅. (3) dOBAWITX K F IRST (X1X2 ... Xn ) WSE NE e-“LEMENTY IZ F IRST (X1 ). dOBAWITX K NEMU TAKVE WSE NE e-“LEMENTY IZ F IRST (X2 ), ESLI e ∈ F IRST (X1 ), NE e-“LEMENTY IZ F IRST (X3), ESLI e PRINADLEVIT KAK F IRST (X1 ), TAK I F IRST (X2), I T.D. nAKONEC, DOBAWITX CEPOˆKU e K F IRST (X1 X2 ... Xn ), ESLI e ∈ F IRST (Xi ) DLQ WSEH i. rASSMOTRIM ALGORITM WYˆISLENIQ FUNKCII F OLLOW . aLGORITM 4.5. wYˆISLENIE F OLLOW DLQ NETERMINALOW GRAMMATIKI. wHOD. ks-GRAMMATIKA G = (N, T, P, S). wYHOD. mNOVESTWO F OLLOW (X) DLQ KAVDOGO SIMWOLA X ∈ N . mETOD. wYPOLNITX [AGI 1–4: (1) pOLOVITX F OLLOW (X) = ∅ DLQ KAVDOGO SIMWOLA X ∈ N . (2) dOBAWITX $ K F OLLOW (S). (3) eSLI W P eSTX PRAWILO WYWODA A → αBβ, GDE α, β ∈ (N ∪ T )∗ TO WSE “LEMENTY IZ F IRST (β), ZA ISKL@ˆENIEM e, DOBAWITX K F OLLOW (B). (4) pOKA NIˆEGO NELXZQ BUDET DOBAWITX NI K KAKOMU MNOVESTWU F OLLOW (X), WYPOLNQTX: ESLI W P ESTX PRAWILO A → αB ILI A → αBβ, α, β ∈ (N ∪ T )∗ , GDE F IRST (β) SODERVIT e (T.E. β ⇒∗ e), TO WSE “LEMENTY IZ F OLLOW (A) DOBAWITX K F OLLOW (B). pRIMER 4.4. rASSMOTRIM GRAMMATIKU IZ PRIMERA 4.3. dLQ NEE
4.3. predskazywa‘˝ij razbor swerhu-wniz
57
F IRST (E) = F IRST (T ) = F IRST (F ) = {(, id} F IRST (E 0) = {+, e} F IRST (T 0) = {∗, e} F OLLOW (E) = F OLLOW (E 0 ) = { ), $} F OLLOW (T ) = F OLLOW (T 0 ) = {+, ), $} F OLLOW (F ) = {+, ∗, ), $} nAPRIMER, id I LEWAQ SKOBKA DOBAWLQ@TSQ K F IRST (F ) NA [AGE 3 PRI i = 1, POSKOLXKU F IRST (id) = {id} I F IRST (”(”) = {”(”} W SOOTWETSTWII S [AGOM 1. nA [AGE 3 PRI i = 1, W SOOTWETSTWII S PRAWILOM WYWODA T → F T 0 K F IRST (T ) DOBAWLQ@TSQ TAKVE id I LEWAQ SKOBKA. nA [AGE 2 W F IRST (E 0) WKL@ˆAETSQ e. pRI WYˆISLENII MNOVESTW F OLLOW NA [AGE 2 W F OLLOW (E) WKL@ˆAETSQ $. nA [AGE 3, NA OSNOWANII PRAWILA F → (E), K F OLLOW (E) DOBAWLQETSQ TAKVE PRAWAQ SKOBKA. nA [AGE 4, PRIMENENNOM K PRAWILU E → T E 0 , W F OLLOW (E 0 ) WKL@ˆA@TSQ $ I PRAWAQ SKOBKA. pOSKOLXKU E 0 ⇒∗ e, ONI TAKVE POPADA@T I WO MNOVESTWO F OLLOW (T ). w SOOTWETSTWII S PRAWILOM WYWODA E → T E 0 , NA [AGE 3 W F OLLOW (T ) WKL@ˆA@TSQ I WSE “LEMENTY IZ F IRST (E 0), OTLIˆNYE OT e.
4.3.3 kONSTRUIROWANIE TABLICY PREDSKAZYWA@]EGO ANALIZATORA dLQ KONSTRUIROWANIQ TABLICY PREDSKAZYWA@]EGO ANALIZATORA PO GRAMMATIKE G MOVET BYTX ISPOLXZOWAN ALGORITM, OSNOWANNYJ NA SLEDU@]EJ IDEE. pREDPOLOVIM, ˆTO A → α – PRAWILO WYWODA GRAMMATIKI I a ∈ F IRST (α). tOGDA ANALIZATOR DELAET RAZWERTKU A PO α, ESLI WHODNYM SIMWOLOM QWLQETSQ a. tRUDNOSTX WOZNIKAET, KOGDA α = e ILI α ⇒∗ e. w “TOM SLUˆAE NUVNO RAZWERNUTX A W α, ESLI TEKU]IJ WHODNOJ SIMWOL PRINADLEVIT F OLLOW (A) ILI ESLI DOSTIGNUT $ I $ ∈ F OLLOW (A). aLGORITM 4.6. pOSTROENIE TABLICY PREDSKAZYWA@]EGO ANALIZATORA. wHOD. ks-GRAMMATIKA G = (N, T, P, S). wYHOD. tABLICA M [A, a] PREDSKAZYWA@]EGO ANALIZATORA, A ∈ N , a ∈ T ∪ {$}. mETOD. dLQ KAVDOGO PRAWILA WYWODA A → α GRAMMATIKI WYPOLNITX [AGI 1 I 2. pOSLE “TOGO WYPOLNITX [AG 3. (1) dLQ KAVDOGO TERMINALA a IZ F IRST (α) DOBAWITX A → α K M [A, a]. (2) eSLI e ∈ F IRST (α), DOBAWITX A → α K M [A, b] DLQ KAVDOGO TERMINALA b IZ F OLLOW (A). kROME TOGO, ESLI e ∈ F IRST (α) I $ ∈ F OLLOW (A), DOBAWITX A → α K M [A, $]. (3) pOLOVITX WSE NEOPREDELENNYE WHODY RAWNYMI “O[IBKA”. pRIMER 4.5. pRIMENIM ALGORITM 4.6 K GRAMMATIKE IZ PRIMERA 4.3. pOSKOLXKU F IRST (T E 0) = F IRST (T ) = {(, id }, W SOOTWETSTWII S PRAWILOM WYWODA E → T E 0 WHODY M [E, ( ] I M [E, id ] STANOWQTSQ RAWNYMI E → T E 0 . w SOOTWETSTWII S PRAWILOM WYWODA E 0 → +T E 0 ZNAˆENIE M [E 0 , +] RAWNO E 0 → +T E 0 . w SOOTWETSTWII S PRAWILOM WYWODA E 0 → e ZNAˆENIQ M [E 0 , )] I M [E 0 , $] RAWNY E 0 → e, POSKOLXKU F OLLOW (E 0 ) = { ), $}.
58
glawa 4. sintaksi˜eskij analiz
tABLICA ANALIZA, POSTROENNAQ ALGORITMOM 4.6 DLQ “TOJ GRAMMATIKI, PRIWEDENA NA RIS. 4.3.
4.3.4
LL(1)-GRAMMATIKI
aLGORITM 4.6 DLQ POSTROENIQ TABLICY PREDSKAZYWA@]EGO ANALIZATORA MOVET BYTX PRIMENEN K L@BOJ ks-GRAMMATIKE. oDNAKO DLQ NEKOTORYH GRAMMATIK POSTROENNAQ TABLICA MOVET IMETX NEODNOZNAˆNO OPREDELENNYE WHODY. nETRUDNO DOKAZATX, NAPRIMER, ˆTO ESLI GRAMMATIKA LEWOREKURSIWNA ILI NEODNOZNAˆNA, TABLICA BUDET IMETX PO KRAJNEJ MERE ODIN NEODNOZNAˆNO OPREDELENNYJ WHOD. gRAMMATIKI, DLQ KOTORYH TABLICA PREDSKAZYWA@]EGO ANALIZATORA NE IMEET NEODNOZNAˆNO OPREDELENNYH WHODOW, NAZYWA@TSQ LL(1)-GRAMMATIKAMI. pREDSKAZYWA@]IJ ANALIZATOR, POSTROENNYJ DLQ LL(1)-GRAMMATIKI, NAZYWAETSQ LL(1)-ANALIZATOROM. pERWAQ BUKWA L W NAZWANII SWQZANO S TEM, ˆTO WHODNAQ CEPOˆKA ˆITAETSQ SLEWA NAPRAWO, WTORAQ L OZNAˆAET, ˆTO STROITSQ LEWYJ WYWOD WHODNOJ CEPOˆKI, 1 – ˆTO NA KAVDOM [AGE DLQ PRINQTIQ RE[ENIQ ISPOLXZUETSQ ODIN SIMWOL NEPROˆITANNOJ ˆASTI WHODNOJ CEPOˆKI. dOKAZANO, ˆTO ALGORITM 4.6 DLQ KAVDOJ LL(1)-GRAMMATIKI G STROIT TABLICU PREDSKAZYWA@]EGO ANALIZATORA, RASPOZNA@]EGO WSE CEPOˆKI IZ L(G) I TOLXKO “TI CEPOˆKI. nETRUDNO DOKAZATX TAKVE, ˆTO ESLI G – LL(1)GRAMMATIKA, TO L(G) – DETERMINIROWANNYJ ks-QZYK. sPRAWEDLIW TAKVE SLEDU@]IJ KRITERIJ LL(1)-GRAMMATIKI. gRAMMATIKA G = (N, T, P, S) QWLQETSQ LL(1)-GRAMMATIKOJ TOGDA I TOLXKO TOGDA, KOGDA DLQ KAVDOJ PARY PRAWIL A → α, A → β IZ P (T.E. PRAWIL S ODINAKOWOJ LEWOJ ˆASTX@) WYPOLNQ@TSQ SLEDU@]IE 2 USLOWIQ: (1) F IRST (α) ∩ F IRST (β) = ∅; (2) eSLI e ∈ F IRST (α), TO F IRST (β) ∩ F OLLOW (A) = ∅. qZYK, DLQ KOTOROGO SU]ESTWUET POROVDA@]AQ EGO LL(1)-GRAMMATIKA, NAZYWA@T LL(1)-QZYKOM. dOKAZANO, ˆTO PROBLEMA OPREDELENIQ TOGO, POROVDAET LI GRAMMATIKA LL-QZYK, QWLQETSQ ALGORITMIˆESKI NERAZRE[IMOJ. pRIMER 4.6. nEODNOZNAˆNAQ GRAMMATIKA NE QWLQETSQ LL(1). pRIMEROM MOVET SLUVITX SLEDU@]AQ GRAMMATIKA G = ({S, E}, {if, then, else, a, b}, P, S) S PRAWILAMI: S → if E then S | if E then S else S | a E→b —TA GRAMMATIKA QWLQETSQ NEODNOZNAˆNOJ, ˆTO ILL@STRIRUETSQ NA RIS. 4.6.
4.3.5
uDALENIE LEWOJ REKURSII
oSNOWNAQ TRUDNOSTX PRI ISPOLXZOWANII PREDSKAZYWA@]EGO ANALIZA – “TO NAHOVDENIE TAKOJ GRAMMATIKI DLQ WHODNOGO QZYKA, PO KOTOROJ MOVNO POSTROITX TABLICU ANALIZA S ODNOZNAˆNO OPREDELENNYMI WHODAMI. iNOGDA S
4.3. predskazywa‘˝ij razbor swerhu-wniz
S if
E b
59
S S
then
if
if E then S else b
a
S a
then
E
else S
a
b if
S
E
then S
b
a
rIS. 4.6:
POMO]X@ NEKOTORYH PROSTYH PREOBRAZOWANIJ GRAMMATIKU, NE QWLQ@]U@SQ LL(1), MOVNO PRIWESTI K “KWIWALENTNOJ LL(1)-GRAMMATIKE. sREDI “TIH PREOBRAZOWANIJ NAIBOLEE “FFEKTIWNYMI QWLQ@TSQ LEWAQ FAKTORIZACIQ I UDALENIE LEWOJ REKURSII. zDESX NEOBHODIMO SDELATX DWA ZAMEˆANIQ. wO-PERWYH, NE WSQKAQ GRAMMATIKA POSLE “TIH PREOBRAZOWANIJ STANOWITSQ LL(1), I, WOWTORYH, POSLE TAKIH PREOBRAZOWANIJ POLUˆA@]AQSQ GRAMMATIKA MOVET STATX MENEE PONIMAEMOJ. nEPOSREDSTWENNU@ LEWU@ REKURSI@, T.E. REKURSI@ WIDA A → Aα, MOVNO UDALITX SLEDU@]IM SPOSOBOM. sNAˆALA GRUPPIRUEM A-PRAWILA: A → Aα1 | Aα2 | ... | Aαm | β1 | β2 | ... | βn , GDE NIKAKAQ IZ STROK βi NE NAˆINAETSQ S A. zATEM ZAMENQEM “TOT NABOR PRAWIL NA A → β1 A0 | β2 A0 | ... | βn A0 A0 → α1 A0 | α2 A0 | ... | αm A0 | e GDE A0 – NOWYJ NETERMINAL. iZ NETERMINALA A MOVNO WYWESTI TE VE CEPOˆKI, ˆTO I RANX[E, NO TEPERX NET LEWOJ REKURSII. s POMO]X@ “TOJ PROCEDURY UDALQ@TSQ WSE NEPOSREDSTWENNYE LEWYE REKURSII, NO NE UDALQETSQ LEWAQ REKURSIQ, WKL@ˆA@]AQ DWA ILI BOLEE [AGA. pRIWEDENNYJ NIVE ALGORITM 4.7 POZWOLQET UDALITX WSE LEWYE REKURSII IZ GRAMMATIKI. aLGORITM 4.7. uDALENIE LEWOJ REKURSII. wHOD. ks-GRAMMATIKA G BEZ e-PRAWIL (PRAWIL WIDA A → e). wYHOD. ks-GRAMMATIKA G0 BEZ LEWOJ REKURSII, “KWIWALENTNAQ G. mETOD. wYPOLNITX [AGI 1 I 2. (1) uPORQDOˆITX NETERMINALY GRAMMATIKI G W PROIZWOLXNOM PORQDKE. (2) wYPOLNITX SLEDU@]U@ PROCEDURU: for (i=1;i i. zATEM, POSLE UDALENIQ NEPOSREDSTWENNOJ LEWOJ REKURSII DLQ Ai -PRAWIL, m STANOWITSQ BOLX[E i. aLGORITM 4.7 PRIMENIM, ESLI GRAMMATIKA NE IMEET e-PRAWIL (PRAWIL WIDA A → e). iME@]IESQ W GRAMMATIKE e-PRAWILA MOGUT BYTX UDALENY PREDWARITELXNO. pOLUˆA@]AQSQ GRAMMATIKA BEZ LEWOJ REKURSII MOVET IMETX e-PRAWILA.
4.3.6
lEWAQ FAKTORIZACIQ
OSNOWNAQ IDEQ LEWOJ FAKTORIZACII W TOM, ˆTO W TOM SLUˆAE, KOGDA NEQSNO, KAKU@ IZ DWUH ALXTERNATIW NADO ISPOLXZOWATX DLQ RAZWERTKI NETERMINALA A, NUVNO IZMENITX A-PRAWILA TAK, ˆTOBY OTLOVITX RE[ENIE DO TEH POR, POKA NE BUDET DOSTATOˆNO INFORMACII DLQ PRINQTIQ PRAWILXNOGO RE[ENIQ. eSLI A → αβ1 | αβ2 – DWA A-PRAWILA I WHODNAQ CEPOˆKA NAˆINAETSQ S NEPUSTOJ STROKI, WYWODIMOJ IZ α, MY NE ZNAEM, RAZWORAˆIWATX LI PO PERWOMU PRAWILU ILI PO WTOROMU. mOVNO OTLOVITX RE[ENIE, RAZWERNUW A → αA0 . tOGDA POSLE ANALIZA TOGO, ˆTO WYWODIMO IZ α, MOVNO RAZWERNUTX PO A0 → β1 ILI PO A0 → β2 . lEWOFAKTORIZOWANNYE PRAWILA PRINIMA@T WID A → αA0 A 0 → β 1 | β2 aLGORITM 4.8. lEWAQ FAKTORIZACIQ GRAMMATIKI. wHOD. ks-GRAMMATIKA G. wYHOD. lEWOFAKTORIZOWANNAQ ks-GRAMMATIKA G0 , “KWIWALENTNAQ G. mETOD. dLQ KAVDOGO NETERMINALA A I]EM SAMYJ DLINNYJ PREFIKS α, OB]IJ DLQ DWUH ILI BOLEE EGO ALXTERNATIW. eSLI α 6= e, T.E. SU]ESTWUET NETRIWIALXNYJ OB]IJ PREFIKS, ZAMENQEM WSE A-PRAWILA A → αβ1 | αβ2 | ... | αβn | z,
4.3. predskazywa‘˝ij razbor swerhu-wniz
61
GDE z OBOZNAˆAET WSE ALXTERNATIWY, NE NAˆINA@]IESQ S α, NA A → αA0 | z A0 → β1 | β2 | ... | βn GDE A0 – NOWYJ NETERMINAL. pOWTORNO PRIMENQEM “TO PREOBRAZOWANIE, POKA NIKAKIE DWE ALXTERNATIWY NE BUDUT IMETX OB]EGO PREFIKSA. pRIMER 4.7. rASSMOTRIM WNOWX GRAMMATIKU USLOWNYH OPERATOROW IZ PRIMERA 4.6: S → if E then S | if E then S else S | a E→b pOSLE LEWOJ FAKTORIZACII GRAMMATIKA PRINIMAET WID S → if E then SS 0 | a S 0 → else S | e E→b k SOVALENI@, GRAMMATIKA OSTAETSQ NEODNOZNAˆNOJ, A ZNAˆIT, I NE LL(1).
4.3.7 rEKURSIWNYJ SPUSK wY[E BYL RASSMOTREN TABLIˆNO-UPRAWLQEMYJ WARIANT PREDSKAZYWA@]EGO ANALIZA, KOGDA MAGAZIN QWNO ISPOLXZOWALSQ W PROCESSE RABOTY ANALIZATORA. mOVNO PREDLOVITX DRUGOJ WARIANT PREDSKAZYWA@]EGO ANALIZA, W KOTOROM KAVDOMU NETERMINALU SOPOSTAWLQETSQ PROCEDURA (WOOB]E GOWORQ, REKURSIWNAQ), I MAGAZIN OBRAZUETSQ NEQWNO PRI WYZOWAH TAKIH PROCEDUR. pROCEDURY REKURSIWNOGO SPUSKA MOGUT BYTX ZAPISANY, KAK POKAZANO NIVE. w PROCEDURE A DLQ SLUˆAQ, KOGDA IMEETSQ PRAWILO A → ui , TAKOE, ˆTO ui ⇒∗ e (NAPOMNIM, ˆTO NE MOVET BYTX BOLX[E ODNOGO PRAWILA, IZ KOTOROGO WYWODITSQ e), PRIWEDENY DWA WARIANTA 1.1 I 1.2. w WARIANTE 1.1 DELAETSQ PROWERKA, PRINADLEVIT LI SLEDU@]IJ WHODNOJ SIMWOL F OLLOW (A). eSLI NET – WYDAETSQ O[IBKA. wO WTOROM WARIANTE “TOGO NE DELAETSQ, TAK ˆTO ANALIZ O[IBKI OTKLADYWAETSQ NA PROCEDURU, WYZWAW[U@ A. void A(){ // A → u1 | u2 | ... | uk if (InSym ∈ F IRST (ui )) // TOLXKO ODNOMU! if (parse(ui)) result("A → ui "); else error(); else //wARIANT 1: if (IMEETSQ PRAWILO A → ui TAKOE, ˆTO ui ⇒∗ e) //wARIANT 1.1 if (InSym ∈ F OLLOW (A)) result("A → ui "); else error(); //kONEC WARIANTA 1.1 //wARIANT 1.2:
glawa 4. sintaksi˜eskij analiz
62
result("A → ui "); //kONEC WARIANTA 1.2 //kONEC WARIANTA 1 //wARIANT 2: if (NET PRAWILA A → ui TAKOGO, ˆTO u ⇒∗ e) error(); //kONEC WARIANTA 2 } boolean parse(u){ // IZ u NE WYWODITSQ e! v = u; while (v 6= e){ // v = Xz if (X - TERMINAL a) if (InSym 6= a) return(false); else InSym = getInsym(); else // X - NETERMINAL B B; v = z; } return(true); }
4.3.8
wOSSTANOWLENIE POSLE SINTAKSIˆESKIH O[IBOK
w PRIWEDENNYH PROGRAMMAH REKURSIWNOGO SPUSKA ISPOLXZOWALASX PROCEDURA REAKCII NA SINTAKSIˆESKIE O[IBKI error(). w PROSTEJ[EM SLUˆAE “TA PROCEDURA WYDAET DIAGNOSTIKU I ZAWER[AET RABOTU ANALIZATORA. nO MOVNO POPYTATXSQ NEKOTORYM RAZUMNYM OBRAZOM PRODOLVITX RABOTU. dLQ RAZBORA SWERHU WNIZ MOVNO PREDLOVITX SLEDU@]IJ PROSTOJ ALGORITM. eSLI W MOMENT OBNARUVENIQ O[IBKI NA WERHU[KE MAGAZINA OKAZALSQ NETERMINALXNYJ SIMWOL A I DLQ NEGO NET PRAWILA, SOOTWETSTWU@]EGO WHODNOMU SIMWOLU, TO SKANIRUEM WHOD DO TEH POR, POKA NE WSTRETIM SIMWOL LIBO IZ F IRST (A), LIBO IZ F OLLOW (A). w PERWOM SLUˆAE RAZWORAˆIWAEM A PO SOOTWETSTWU@]EMU PRAWILU, WO WTOROM – UDALQEM A IZ MAGAZINA. eSLI NA WERHU[KE MAGAZINA TERMINALXNYJ SIMWOL, TO MOVNO UDALITX WSE TERMINALXNYE SIMWOLY S WERHU[KI MAGAZINA WPLOTX DO PERWOGO (SWERHU) NETERMINALXNOGO SIMWOLA I PRODOLVATX TAK, KAK “TO BYLO OPISANO WY[E.
4.4. razbor snizu-wwerh tipa sdwig-swertka
4.4
63
rAZBOR SNIZU-WWERH TIPA SDWIG-SWERTKA
4.4.1 oSNOWA w PROCESSE RAZBORA SNIZU-WWERH TIPA SDWIG-SWERTKA STROITSQ DEREWO RAZBORA WHODNOJ CEPOˆKI, NAˆINAQ S LISTXEW (SNIZU) K KORN@ (WWERH). —TOT PROCESS MOVNO RASSMATRIWATX KAK “SWERTKU” CEPOˆKI w K NAˆALXNOMU SIMWOLU GRAMMATIKI. nA KAVDOM [AGE SWERTKI PODCEPOˆKA, KOTORU@ MOVNO SOPOSTAWITX PRAWOJ ˆASTI NEKOTOROGO PRAWILA WYWODA, ZAMENQETSQ SIMWOLOM LEWOJ ˆASTI “TOGO PRAWILA WYWODA, I ESLI NA KAVDOM [AGE WYBIRAETSQ PRAWILXNAQ PODCEPOˆKA, TO W OBRATNOM PORQDKE PROSLEVIWAETSQ PRAWOSTORONNIJ WYWOD (RIS. 4.7). zDESX KO WHODNOJ CEPOˆKE, TAK VE KAK I PRI ANALIZE LL(1)-GRAMMATIK, PRIPISAN KONCEWOJ MARKER $. S
S
S X1 X2 • • • •••••••••••
Y
Y
•••
•••
Z a •••
$
a ••••••••• $
a ••••••••• b ••••• $
rIS. 4.7: pODCEPOˆKA SENTENCIALXNOJ FORMY, KOTORAQ MOVET BYTX SOPOSTAWLENA PRAWOJ ˆASTI NEKOTOROGO PRAWILA WYWODA, SWERTKA PO KOTOROMU K LEWOJ ˆASTI PRAWILA SOOTWETSTWUET ODNOMU [AGU W OBRA]ENII PRAWOSTORONNEGO WYWODA, NAZYWAETSQ OSNOWOJ CEPOˆKI. sAMAQ LEWAQ PODCEPOˆKA, KOTORAQ SOPOSTAWLQETSQ PRAWOJ ˆASTI NEKOTOROGO PRAWILA WYWODA A → γ, NE OBQZATELXNO QWLQETSQ OSNOWOJ, POSKOLXKU SWERTKA PO PRAWILU A → γ MOVET DATX CEPOˆKU, KOTORAQ NE MOVET BYTX SWEDENA K AKSIOME. fORMALXNO, OSNOWA PRAWOJ SENTENCIALXNOJ FORMY z – “TO PRAWILO WYWODA A → γ I POZICIQ W z, W KOTOROJ MOVET BYTX NAJDENA CEPOˆKA γ TAKIE, ˆTO W REZULXTATE ZAMENY γ NA A POLUˆAETSQ PREDYDU]AQ SENTENCIALXNAQ FORMA W PRAWOSTORONNEM WYWODE z. tAKIM OBRAZOM, ESLI S ⇒∗r αAβ ⇒r αγβ, TO A → γ W POZICII, SLEDU@]EJ ZA α, “TO OSNOWA CEPOˆKI αγβ. pODCEPOˆKA β SPRAWA OT OSNOWY SODERVIT TOLXKO TERMINALXNYE SIMWOLY. wOOB]E GOWORQ, GRAMMATIKA MOVET BYTX NEODNOZNAˆNOJ, PO“TOMU NE EDINSTWENNYM MOVET BYTX PRAWOSTORONNIJ WYWOD αγβ I NE EDINSTWENNOJ MOVET
glawa 4. sintaksi˜eskij analiz
64
BYTX OSNOWA. eSLI GRAMMATIKA ODNOZNAˆNA, TO KAVDAQ PRAWAQ SENTENCIALXNAQ FORMA GRAMMATIKI IMEET W TOˆNOSTI ODNU OSNOWU. zAMENA OSNOWY W SENTENCIALXNOJ FORME NA NETERMINAL LEWOJ ˆASTI NAZYWAETSQ OTSEˆENIEM OSNOWY. oBRA]ENIE PRAWOSTORONNEGO WYWODA MOVET BYTX POLUˆENO S POMO]X@ POWTORNOGO PRIMENENIQ OTSEˆENIQ OSNOWY, NAˆINAQ S ISHODNOJ CEPOˆKI w. eSLI w – SLOWO W RASSMATRIWAEMOJ GRAMMATIKE, TO w = αn , GDE αn – n-Q PRAWAQ SENTENCIALXNAQ FORMA E]E NEIZWESTNOGO PRAWOGO WYWODA S = α0 ⇒r α1 ⇒r ... ⇒r αn−1 ⇒r αn = w. ˜TOBY WOSSTANOWITX “TOT WYWOD W OBRATNOM PORQDKE, WYDELQEM OSNOWU γn W αn I ZAMENQEM γn NA LEWU@ ˆASTX NEKOTOROGO PRAWILA WYWODA An → γn , POLUˆAQ (n − 1)-@ PRAWU@ SENTENCIALXNU@ FORMU αn−1 . zATEM POWTORQEM “TOT PROCESS, T.E. WYDELQEM OSNOWU γn−1 W αn−1 I SWORAˆIWAEM “TU OSNOWU, POLUˆAQ PRAWU@ SENTENCIALXNU@ FORMU αn−2 . eSLI, POWTORQQ “TOT PROCESS, MY POLUˆAEM PRAWU@ SENTENCIALXNU@ FORMU, SOSTOQ]U@ TOLXKO IZ NAˆALXNOGO SIMWOLA S, TO OSTANAWLIWAEMSQ I SOOB]AEM OB USPE[NOM ZAWER[ENII RAZBORA. oBRA]ENIE POSLEDOWATELXNOSTI PRAWIL, ISPOLXZOWANNYH W SWERTKAH, ESTX PRAWYJ WYWOD WHODNOJ STROKI. tAKIM OBRAZOM, GLAWNAQ ZADAˆA ANALIZATORA TIPA SDWIG-SWERTKA – “TO WYDELENIE I OTSEˆENIE OSNOWY.
4.4.2
LR(1)-ANALIZATORY
w NAZWANII LR(1) SIMWOL L UKAZYWAET NA TO, ˆTO WHODNAQ CEPOˆKA ˆITAETSQ SLEWA-NAPRAWO, R – NA TO, ˆTO STROITSQ PRAWYJ WYWOD, NAKONEC, 1 UKAZYWAET NA TO, ˆTO ANALIZATOR WIDIT ODIN SIMWOL NEPROˆITANNOJ ˆASTI WHODNOJ CEPOˆKI. LR(1)-ANALIZ PRIWLEKATELEN PO NESKOLXKIM PRIˆINAM: – LR(1)-ANALIZ – NAIBOLEE MO]NYJ METOD ANALIZA BEZ WOZWRATOW TIPA SDWIG-SWERTKA; – LR(1)-ANALIZ MOVET BYTX REALIZOWAN DOWOLXNO “FFEKTIWNO; – LR(1)-ANALIZATORY MOGUT BYTX POSTROENY DLQ PRAKTIˆESKI WSEH KONSTRUKCIJ QZYKOW PROGRAMMIROWANIQ; – KLASS GRAMMATIK, KOTORYE MOGUT BYTX PROANALIZIROWANY LR(1)-METODOM, STROGO WKL@ˆAET KLASS GRAMMATIK, KOTORYE MOGUT BYTX PROANALIZIROWANY PREDSKAZYWA@]IMI ANALIZATORAMI (SWERHUWNIZ TIPA LL(1)). sHEMATIˆESKI STRUKTURA LR(1)-ANALIZATORA IZOBRAVENA NA RIS. 4.8. aNALIZATOR SOSTOIT IZ WHODNOJ LENTY, WYHODNOJ LENTY, MAGAZINA, UPRAWLQ@]EJ PROGRAMMY I TABLICY ANALIZA (LR(1)-TABLICY), KOTORAQ IMEET DWE ˆASTI – FUNKCI@ DEJSTWIJ (Action) I FUNKCI@ PEREHODOW (Goto). uPRAWLQ@]AQ PROGRAMMA ODNA I TA VE DLQ WSEH LR(1)-ANALIZATOROW, RAZNYE ANALIZATORY OTLIˆA@TSQ TOLXKO TABLICAMI ANALIZA.
4.4. razbor snizu-wwerh tipa sdwig-swertka
65
pROGRAMMA ANALIZATORA ˆITAET SIMWOLY NA WHODNOJ LENTE PO ODNOMU ZA [AG. w PROCESSE ANALIZA ISPOLXZUETSQ MAGAZIN, W KOTOROM HRANQTSQ STROKI WIDA S0 X1 S1 X2 S2 ... Xm Sm (Sm – WERHU[KA MAGAZINA). kAVDYJ Xi – SIMWOL GRAMMATIKI (TERMINALXNYJ ILI NETERMINALXNYJ), A Si – SIMWOL SOSTOQNIQ. zAMETIM, ˆTO SIMWOLY GRAMMATIKI NE OBQZATELXNO DOLVNY RAZME]ATXSQ W MAGAZINE. oDNAKO, IH ISPOLXZOWANIE OBLEGˆAET PONIMANIE POWEDENIQ LR-ANALIZATORA.
a1 ... ai ... an $
LR
Sm
Xm Sm-1 Xm-1
... Action
S0
Goto
rIS. 4.8: —LEMENT FUNKCII DEJSTWIJ Action[Sm , ai ] DLQ SIMWOLA SOSTOQNIQ Sm I WHODA ai ∈ T ∪ {$}, MOVET IMETX ODNO IZ ˆETYREH ZNAˆENIJ: 1) shift S (SDWIG), GDE S – SIMWOL SOSTOQNIQ, 2) reduce A → γ (SWERTKA PO PRAWILU GRAMMATIKI A → γ), 3) accept (DOPUSK), 4) error (O[IBKA). —LEMENT FUNKCII PEREHODOW Goto[Sm , ai ] DLQ SIMWOLA SOSTOQNIQ Sm I WHODA ai ∈ N , MOVET IMETX ODNO IZ DWUH ZNAˆENIJ: 1) S, GDE S – SIMWOL SOSTOQNIQ, 2) error (O[IBKA). kONFIGURACIEJ LR(1)-ANALIZATORA NAZYWAETSQ PARA, PERWAQ KOMPONENTA KOTOROJ – SODERVIMOE MAGAZINA, A WTORAQ – NEPROSMOTRENNYJ WHOD: (S0 X1 S1 X2 S2 ... Xm Sm , ai ai+1 ... an $)
66
glawa 4. sintaksi˜eskij analiz —TA KONFIGURACIQ SOOTWETSTWUET PRAWOJ SENTENCIALXNOJ FORME X1 X2 ... Xm ai ai+1 ... an
pREFIKSY PRAWYH SENTENCIALXNYH FORM, KOTORYE MOGUT POQWITXSQ W MAGAZINE ANALIZATORA, NAZYWA@TSQ AKTIWNYMI PREFIKSAMI. oSNOWA SENTENCIALXNOJ FORMY WSEGDA RASPOLAGAETSQ NA WERHU[KE MAGAZINA. tAKIM OBRAZOM, AKTIWNYJ PREFIKS – “TO TAKOJ PREFIKS PRAWOJ SENTENCIALXNOJ FORMY, KOTORYJ NE PEREHODIT PRAWU@ GRANICU OSNOWY “TOJ FORMY. w NAˆALE RABOTY ANALIZATORA W MAGAZINE NAHODITSQ TOLXKO SIMWOL NAˆALXNOGO SOSTOQNIQ S0 , NA WHODNOJ LENTE – ANALIZIRUEMAQ CEPOˆKA S MARKEROM KONCA. oˆEREDNOJ [AG ANALIZATORA OPREDELQETSQ TEKU]IM WHODNYM SIMWOLOM ai I SIMWOLOM SOSTOQNIQ NA WERHU[KE MAGAZINA Sm SLEDU@]IM OBRAZOM. pUSTX LR(1)-ANALIZATOR NAHODITSQ W KONFIGURACII (S0 X1 S1 X2 S2 ... Xm Sm , ai ai+1 ... an $) aNALIZATOR MOVET PRODELATX ODIN IZ SLEDU@]IH [AGOW: 1. eSLI Action[Sm , ai ] = shift S, TO ANALIZATOR WYPOLNQET SDWIG, PEREHODQ W KONFIGURACI@ (S0 X1 S1 X2 S2 ... Xm Sm ai S, ai+1 ... an $) tAKIM OBRAZOM, W MAGAZIN POME]A@TSQ WHODNOJ SIMWOL ai I SIMWOL SOSTOQNIQ S, OPREDELQEMYJ Action[Sm , ai ]. tEKU]IM WHODNYM SIMWOLOM STANOWITSQ ai+1 . 2. eSLI Action[Sm , ai ] = reduce A → γ, TO ANALIZATOR WYPOLNQET SWERTKU, PEREHODQ W KONFIGURACI@ (S0 X1 S1 X2 S2 ... Xm−r Sm−r AS, ai ai+1 ... an $) GDE S = Goto[Sm−r , A] I r – DLINA γ, PRAWOJ ˆASTI PRAWILA WYWODA. aNALIZATOR SNAˆALA UDALQET IZ MAGAZINA 2r SIMWOLOW (r SIMWOLOW SOSTOQNIQ I r SIMWOLOW GRAMMATIKI), TAK ˆTO NA WERHU[KE OKAZYWAETSQ SOSTOQNIE Sm−r . zATEM ANALIZATOR POME]AET W MAGAZIN A – LEWU@ ˆASTX PRAWILA WYWODA, I S – SIMWOL SOSTOQNIQ, OPREDELQEMYJ Goto[Sm−r , A]. nA [AGE SWERTKI TEKU]IJ WHODNOJ SIMWOL NE MENQETSQ. dLQ LR(1)-ANALIZATOROW Xm−r+1 ... Xm – POSLEDOWATELXNOSTX SIMWOLOW GRAMMATIKI, UDALQEMYH IZ MAGAZINA, WSEGDA SOOTWETSTWUET γ – PRAWOJ ˆASTI PRAWILA WYWODA, PO KOTOROMU DELAETSQ SWERTKA. pOSLE OSU]ESTWLENIQ [AGA SWERTKI GENERIRUETSQ WYHOD LR(1)-ANALIZATORA, T.E. ISPOLNQ@TSQ SEMANTIˆESKIE DEJSTWIQ, SWQZANNYE S PRAWILOM, PO KOTOROMU DELAETSQ SWERTKA, NAPRIMER, PEˆATA@TSQ NOMERA PRAWIL, PO KOTORYM DELAETSQ SWERTKA.
4.4. razbor snizu-wwerh tipa sdwig-swertka
67
zAMETIM, ˆTO FUNKCIQ Goto TABLICY ANALIZA, POSTROENNAQ PO GRAMMATIKE G, FAKTIˆESKI PREDSTAWLQET SOBOJ FUNKCI@ PEREHODOW DETERMINIROWANNOGO KONEˆNOGO AWTOMATA, RASPOZNA@]EGO AKTIWNYE PREFIKSY G. 3. eSLI Action[Sm , ai ] = accept, TO RAZBOR USPE[NO ZAWER[EN. 4. eSLI Action[Sm , ai ] = error, TO ANALIZATOR OBNARUVIL O[IBKU, I WYPOLNQ@TSQ DEJSTWIQ PO DIAGNOSTIKE I WOSSTANOWLENI@. pRIMER 4.8. rASSMOTRIM GRAMMATIKU G = ({E, T, F }, {id, +, ∗}, P, E) S PRAWILAMI: (1) (2) (3) (4) (5)
ARIFMETIˆESKIH
WYRAVENIJ
E → E +T E→T T →T ∗F T →F F → id
nA RIS. 4.9 IZOBRAVENY FUNKCII Action I Goto, OBRAZU@]IE LR(1)-TABLICU DLQ “TOJ GRAMMATIKI. dLQ —LEMENT Si FUNKCII Action OZNAˆAET SDWIG I POME]ENIE W MAGAZIN SOSTOQNIQ S NOMEROM i, Rj – SWERTKU PO PRAWILU NOMER j, acc – DOPUSK, PUSTAQ KLETKA – O[IBKU. dLQ FUNKCII Goto SIMWOL i OZNAˆAET POME]ENIE W MAGAZIN SOSTOQNIQ S NOMEROM i, PUSTAQ KLETKA – O[IBKU. nA WHODE id + id ∗ id POSLEDOWATELXNOSTX SOSTOQNIJ MAGAZINA I WHODNOJ LENTY POKAZANY NA RIS. 4.10. nAPRIMER, W PERWOJ STROKE LR-ANALIZATOR NAHODITSQ W NULEWOM SOSTOQNII I “WIDIT” PERWYJ WHODNOJ SIMWOL id. dEJSTWIE S6 W NULEWOJ STROKE I STOLBCE id W POLE Action (RIS. 4.9) OZNAˆAET SDWIG I POME]ENIE SIMWOLA SOSTOQNIQ 6 NA WERHU[KU MAGAZINA. —TO I IZOBRAVENO WO WTOROJ STROKE: PERWYJ SIMWOL id I SIMWOL SOSTOQNIQ 6 POME]A@TSQ W MAGAZIN, A id UDALQETSQ SO WHODNOJ LENTY.
sOSTOQNIQ 0 1 2 3 4 5 6 7 8
id S6
Action + *
$
S4 R2 R4
S7 R4
acc R2 R4
R1 R5
S7 R5
R1 R5
R3
R3
R3
E 1
Goto T F 2 3
5
S6
3
8
S6 rIS. 4.9:
tEKU]IM WHODNYM SIMWOLOM STANOWITSQ +, I DEJSTWIEM W SOSTOQNII 6 NA WHOD + QWLQETSQ SWERTKA PO F → id. iZ MAGAZINA UDALQ@TSQ DWA SIMWOLA (ODIN SIMWOL SOSTOQNIQ I ODIN SIMWOL GRAMMATIKI). zATEM ANALIZIRUETSQ NULEWOE SOSTOQNIE.
glawa 4. sintaksi˜eskij analiz
68 aKTIWNYJ PREFIKS id F T E E+ E + id E +F E +T E + T∗ E + T ∗ id E +T ∗F E +T E
mAGAZIN
wHOD
dEJSTWIE
0 0 id 6 0F 3 0T 2 0E1 0E 1+4 0 E 1 + 4 id 6 0E 1+4F 3 0E 1+4T 5 0E 1+4T 5∗7 0 E 1 + 4 T 5 ∗ 7 id 6 0E 1+4T 5∗7F 8 0E 1+4T 5 0E1
id + id ∗ id$ +id ∗ id$ +id ∗ id$ +id ∗ id$ +id ∗ id$ id ∗ id$ ∗id$ ∗id$ id$ id$ $ $ $
SDWIG F → id T →F E→T SDWIG SDWIG F → id T →F SDWIG SDWIG F → id T →T ∗F E →E +T DOPUSK
rIS. 4.10:
pOSKOLXKU Goto W NULEWOM SOSTOQNII PO SIMWOLU F – “TO 3, F I 3 POME]A@TSQ W MAGAZIN. tEPERX IMEEM KONFIGURACI@, SOOTWETSTWU@]U@ TRETXEJ STROKE. oSTALXNYE [AGI OPREDELQ@TSQ ANALOGIˆNO.
4.4.3
kONSTRUIROWANIE LR(1)-TABLICY
rASSMOTRIM TEPERX ALGORITM KONSTRUIROWANIQ TABLICY, UPRAWLQ@]EJ LR(1)ANALIZATOROM. pUSTX G = (N, T, P, S) – ks-GRAMMATIKA. pOPOLNENNOJ GRAMMATIKOJ DLQ DANNOJ GRAMMATIKI G NAZYWAETSQ ks-GRAMMATIKA G0 = (N ∪ {S 0 }, T, P ∪ {S 0 → S}, S 0 ), T.E. “KWIWALENTNAQ GRAMMATIKA, W KOTOROJ WWEDEN NOWYJ NAˆALXNYJ SIMWOL S 0 I NOWOE PRAWILO WYWODA S 0 → S. —TO DOPOLNITELXNOE PRAWILO WWODITSQ DLQ TOGO, ˆTOBY OPREDELITX, KOGDA ANALIZATOR DOLVEN OSTANOWITX RAZBOR I ZAFIKSIROWATX DOPUSK WHODA. tAKIM OBRAZOM, DOPUSK IMEET MESTO TOGDA I TOLXKO TOGDA, KOGDA ANALIZATOR GOTOW OSU]ESTWITX SWERTKU PO PRAWILU S 0 → S. LR(1)-SITUACIEJ NAZYWAETSQ PARA [A → α.β, a], GDE A → αβ – PRAWILO GRAMMATIKI, a - TERMINAL ILI PRAWYJ KONCEWOJ MARKER $. wTORAQ KOMPONENTA SITUACII NAZYWAETSQ AWANCEPOˆKOJ. bUDEM GOWORITX, ˆTO LR(1)-SITUACIQ [A → α.β, a] DOPUSTIMA DLQ AKTIWNOGO PREFIKSA δ, ESLI SU]ESTWUET WYWOD S ⇒∗r γAw ⇒r γαβw, GDE δ = γα I LIBO a – PERWYJ SIMWOL w, LIBO w = e I a = $. bUDEM GOWORITX, ˆTO SITUACIQ DOPUSTIMA, ESLI ONA DOPUSTIMA DLQ KAKOGOLIBO AKTIWNOGO PREFIKSA.
4.4. razbor snizu-wwerh tipa sdwig-swertka
69
pRIMER 4.9. rASSMOTRIM GRAMMATIKU G = ({S, B}, {a, b}, P, S) S PRAWILAMI S → BB B → aB | b sU]ESTWUET PRAWOSTORONNIJ WYWOD S ⇒∗r aaBab ⇒r aaaBab. lEGKO WIDETX, ˆTO SITUACIQ [B → a.B, a] DOPUSTIMA DLQ AKTIWNOGO PREFIKSA δ = aaa, ESLI W OPREDELENII WY[E POLOVITX γ = aa, A = B, w = ab, α = a, β = B. sU]ESTWUET TAKVE PRAWOSTORONNIJ WYWOD S ⇒∗r BaB ⇒r BaaB. pO“TOMU DLQ AKTIWNOGO PREFIKSA Baa DOPUSTIMA SITUACIQ [B → a.B, $].
cENTRALXNAQ IDEQ METODA ZAKL@ˆAETSQ W TOM, ˆTO PO GRAMMATIKE STROITSQ DETERMINIROWANNYJ KONEˆNYJ AWTOMAT, RASPOZNA@]IJ AKTIWNYE PREFIKSY. dLQ “TOGO SITUACII GRUPPIRU@TSQ WO MNOVESTWA, KOTORYE I OBRAZU@T SOSTOQNIQ AWTOMATA. sITUACII MOVNO RASSMATRIWATX KAK SOSTOQNIQ NEDETERMINIROWANNOGO KONEˆNOGO AWTOMATA, RASPOZNA@]EGO AKTIWNYE PREFIKSY, A IH GRUPPIROWKA NA SAMOM DELE ESTX PROCESS POSTROENIQ DETERMINIROWANNOGO KONEˆNOGO AWTOMATA IZ NEDETERMINIROWANNOGO. aNALIZATOR, RABOTA@]IJ SLEWA-NAPRAWO PO TIPU SDWIG-SWERTKA, DOLVEN UMETX RASPOZNAWATX OSNOWY NA WERHU[KE MAGAZINA. wYDELENIE OSNOWY OSU]ESTWLQETSQ KONEˆNYM AWTOMATOM, ˆITA@]IM SODERVIMOE MAGAZINA OT DNA K WERHU[KE. sOSTOQNIE AWTOMATA POSLE PROˆTENIQ SODERVIMOGO MAGAZINA I TEKU]IJ WHODNOJ SIMWOL OPREDELQ@T OˆEREDNOE DEJSTWIE AWTOMATA. fUNKCIEJ PEREHODOW “TOGO KONEˆNOGO AWTOMATA QWLQETSQ FUNKCIQ PEREHODOW LRANALIZATORA. ˜TOBY NE PROSMATRIWATX MAGAZIN NA KAVDOM [AGE ANALIZA, NA WERHU[KE MAGAZINA WSEGDA HRANITSQ TO SOSTOQNIE, W KOTOROM DOLVEN OKAZATXSQ “TOT KONEˆNYJ AWTOMAT POSLE TOGO, KAK ON PROˆITAL SIMWOLY GRAMMATIKI W MAGAZINE OT DNA K WERHU[KE. rASSMOTRIM SITUACI@ WIDA [A → α.Bβ, a] IZ MNOVESTWA SITUACIJ, DOPUSTIMYH DLQ NEKOTOROGO AKTIWNOGO PREFIKSA z. tOGDA SU]ESTWUET PRAWOSTORONNIJ WYWOD S ⇒∗r yAax ⇒r yαBβax, GDE z = yα. pREDPOLOVIM, ˆTO IZ βax WYWODITSQ TERMINALXNAQ STROKA bw. tOGDA DLQ NEKOTOROGO PRAWILA WYWODA WIDA B → q IMEETSQ WYWOD S ⇒∗r zBbw ⇒r zqbw. tAKIM OBRAZOM [B → .q, b] TAKVE DOPUSTIMA DLQ z I SITUACIQ [A → αB.β, a] DOPUSTIMA DLQ AKTIWNOGO PREFIKSA zB. zDESX LIBO b MOVET BYTX PERWYM TERMINALOM, WYWODIMYM IZ β, LIBO IZ β WYWODITSQ e W WYWODE βax ⇒∗r bw I TOGDA b RAWNO a. t.E. b PRINADLEVIT F IRST (βax). pOSTROENIE WSEH TAKIH SITUACIJ DLQ DANNOGO MNOVESTWA SITUACIJ, T.E. EGO ZAMYKANIE, DELAET PRIWEDENNAQ NIVE FUNKCIQ closure. sISTEMA MNOVESTW DOPUSTIMYH LR(1)-SITUACIJ DLQ WSEWOZMOVNYH AKTIWNYH PREFIKSOW POPOLNENNOJ GRAMMATIKI NAZYWAETSQ KANONIˆESKOJ SISTEMOJ MNOVESTW DOPUSTIMYH LR(1)-SITUACIJ. aLGORITM POSTROENIQ KANONIˆESKOJ SISTEMY MNOVESTW PRIWEDEN NIVE. aLGORITM 4.9. kONSTRUIROWANIE KANONIˆESKOJ SISTEMY MNOVESTW DOPUSTIMYH LR(1)-SITUACIJ. wHOD. ks-GRAMMATIKA G = (N, T, P, S). wYHOD. kANONIˆESKAQ SISTEMA C MNOVESTW DOPUSTIMYH LR(1)-SITUACIJ DLQ GRAMMATIKI G.
70
glawa 4. sintaksi˜eskij analiz
mETOD. zAKL@ˆAETSQ W WYPOLNENII DLQ POPOLNENNOJ GRAMMATIKI G0 PROCEDURY items, KOTORAQ ISPOLXZUET FUNKCII closure I goto. function closure(I){ /* I - MNOVESTWO SITUACIJ */ do{ for (KAVDOJ SITUACII [A → α.Bβ, a] IZ I, KAVDOGO PRAWILA WYWODA B → γ IZ G0 , KAVDOGO TERMINALA b IZ F IRST (βa), TAKOGO, ˆTO [B → .γ, b] NET W I) DOBAWITX [B → .γ, b] K I; } while (K I MOVNO DOBAWITX NOWU@ SITUACI@); return I; } function goto(I,X){ /* I - MNOVESTWO SITUACIJ; X - SIMWOL GRAMMATIKI */ pUSTX J = {[A → αX.β, a] | [A → α.Xβ, a] ∈ I}; return closure(J); } procedure items(G0){ /* G0 - POPOLNENNAQ GRAMMATIKA */ do{ I0 = closure({[S 0 → .S, $]}); C = {I0 }; for (KAVDOGO MNOVESTWA SITUACIJ I IZ SISTEMY C, KAVDOGO SIMWOLA GRAMMATIKI X TAKOGO, ˆTO goto(I, X) NE PUSTO I NE PRINADLEVIT C) DOBAWITX goto(I, X) K SISTEME C; } while (K C MOVNO DOBAWITX NOWOE MNOVESTWO SITUACIJ); } eSLI I – MNOVESTWO SITUACIJ, DOPUSTIMYH DLQ NEKOTOROGO AKTIWNOGO PREFIKSA δ, TO goto(I, X) – MNOVESTWO SITUACIJ, DOPUSTIMYH DLQ AKTIWNOGO PREFIKSA δX. rABOTA ALGORITMA POSTROENIQ SISTEMY C MNOVESTW DOPUSTIMYH LR(1)SITUACIJ NAˆINAETSQ S TOGO, ˆTO W C POME]AETSQ NAˆALXNOE MNOVESTWO SITUACIJ I0 = closure({[S 0 → .S, $]}). zATEM S POMO]X@ FUNKCII goto WYˆISLQ@TSQ NOWYE MNOVESTWA SITUACIJ I WKL@ˆA@TSQ W C. pO-SU]ESTWU, goto(I, X) – PEREHOD KONEˆNOGO AWTOMATA IZ SOSTOQNIQ I PO SIMWOLU X. rASSMOTRIM TEPERX, KAK PO SISTEME MNOVESTW LR(1)-SITUACIJ STROITSQ LR(1)-TABLICA, T.E. FUNKCII DEJSTWIJ I PEREHODOW LR(1)-ANALIZATORA. aLGORITM 4.10. pOSTROENIE LR(1)-TABLICY.
4.4. razbor snizu-wwerh tipa sdwig-swertka
71
wHOD. kANONIˆESKAQ SISTEMA C = {I0 , I1 , ... , In } MNOVESTW DOPUSTIMYH LR(1)-SITUACIJ DLQ GRAMMATIKI G. wYHOD. fUNKCII Action I Goto, SOSTAWLQ@]IE LR(1)-TABLICU DLQ GRAMMATIKI G. mETOD. dLQ KAVDOGO SOSTOQNIQ i FUNKCII Action[i, a] I Goto[i, X] STROQTSQ PO MNOVESTWU SITUACIJ Ii : (1) zNAˆENIQ FUNKCII DEJSTWIQ (Action) DLQ SOSTOQNIQ i OPREDELQ@TSQ SLEDU@]IM OBRAZOM: A) ESLI [A → α.aβ, b] ∈ Ii (a – TERMINAL) I goto(Ii , a) = Ij , TO POLAGAEM Action[i, a] = shift j; B) ESLI [A → α., a] ∈ Ii , PRIˆEM A 6= S 0 , TO POLAGAEM Action[i, a] = reduce A → α; W) ESLI [S 0 → S., $] ∈ Ii , TO POLAGAEM Action[i, $] = accept. (3) zNAˆENIQ FUNKCII PEREHODOW DLQ SOSTOQNIQ i OPREDELQ@TSQ SLEDU@]IM OBRAZOM: ESLI goto(Ii , A) = Ij , TO Goto[i, A] = j (ZDESX A – NETERMINAL). (4) wSE WHODY W Action I Goto, NE OPREDELENNYE [AGAMI 2 I 3, POLAGAEM RAWNYMI error. (5) nAˆALXNOE SOSTOQNIE ANALIZATORA STROITSQ IZ MNOVESTWA, SODERVA]EGO SITUACI@ [S 0 → .S, $]. tABLICA NA OSNOWE FUNKCIJ Action I Goto, POLUˆENNYH W REZULXTATE RABOTY ALGORITMA 4.10, NAZYWAETSQ KANONIˆESKOJ LR(1)-TABLICEJ. LR(1)ANALIZATOR, RABOTA@]IJ S “TOJ TABLICEJ, NAZYWAETSQ KANONIˆESKIM LR(1)ANALIZATOROM. pRIMER 4.10. rASSMOTRIM SLEDU@]U@ GRAMMATIKU, QWLQ@]U@SQ POPOLNENNOJ DLQ GRAMMATIKI IZ PRIMERA 4.8: (0) (1) (2) (3) (4) (5)
E0 → E E → E +T E→T T →T ∗F T →F F → id
mNOVESTWA SITUACIJ I PEREHODY PO goto DLQ “TOJ GRAMMATIKI PRIWEDENY NA RIS. 4.11. LR(1)-TABLICA DLQ “TOJ GRAMMATIKI PRIWEDENA NA RIS. 4.9.
glawa 4. sintaksi˜eskij analiz
72 I0 [E' → .E, $] [E → .E+T, $] [E → .T, $] [T → .T*F, $] [T → .F, $] [F → .id, $] [E → .E+T, +] [E → .T, +] [T → .T*F, +] [T → .F, +] [T → .T*F, *] [T → .F, *] [F → .id, *] [F → .id, +] id
I1 [E' → E., $] [E → E.+T, $] [E → E.+T, +]
E
+
I2 [E → T., $] [T → T.*F, $] [E → T., +] [T → T.*F, +] [T → T.*F, *]
T
F
I4 [E → E+.T, $] [E → E+.T, +] [T → .T*F, $] [T → .F, $] [T → .T*F, +] [T → .F, +] [F → .id, $] [F → .id, +] [T → .T*F, *] [T → .F, *] [F → .id, *]
F
*
T
I7 [T → T*.F, $] [T → T*.F, +] [T → T*.F, *] [F → .id, $] [F → .id, +] [F → .id, *]
I3 [T → F., $] [T → F., +] [T → F., *]
id
I5 [E → E+T., $] [E → E+T., +] [T → T.*F, $] [T → T.*F, +] [T → T.*F, *]
* id
F I8 [T → T*F., $] [T → T*F., +] [T → T*F., *]
I6 [F → id., +] [F → id., *] [F → id., $]
rIS. 4.11:
4.4.4
LR(1)-GRAMMATIKI
eSLI DLQ ks-GRAMMATIKI G FUNKCIQ Action, POLUˆENNAQ W REZULXTATE RABOTY ALGORITMA 4.10, NE SODERVIT NEODNOZNAˆNO OPREDELENNYH WHODOW, TO GRAMMATIKA NAZYWAETSQ LR(1)-GRAMMATIKOJ.
4.4. razbor snizu-wwerh tipa sdwig-swertka
73
qZYK L NAZYWAETSQ LR(1)-QZYKOM, ESLI ON MOVET BYTX POROVDEN NEKOTOROJ LR(1)-GRAMMATIKOJ. iNOGDA ISPOLXZUETSQ DRUGOE OPREDELENIE LR(1)-GRAMMATIKI. gRAMMATIKA NAZYWAETSQ LR(1), ESLI IZ USLOWIJ 1. S 0 ⇒∗r uAw ⇒r uvw, 2. S 0 ⇒∗r zBx ⇒r uvy, 3. F IRST (w) = F IRST (y) SLEDUET, ˆTO uAy = zBx (T.E. u = z, A = B I x = y). sOGLASNO “TOMU OPREDELENI@, ESLI uvw I uvy – PRAWOWYWODIMYE CEPOˆKI POPOLNENNOJ GRAMMATIKI, U KOTORYH F IRST (w) = F IRST (y) I A → v – POSLEDNEE PRAWILO, ISPOLXZOWANNOE W PRAWOM WYWODE CEPOˆKI uvw, TO PRAWILO A → v DOLVNO PRIMENQTXSQ I W PRAWOM RAZBORE PRI SWERTKE uvy K uAy. tAK KAK A DAET v NEZAWISIMO OT w, TO LR(1)-USLOWIE OZNAˆAET, ˆTO W F IRST (w) SODERVITSQ INFORMACIQ, DOSTATOˆNAQ DLQ OPREDELENIQ TOGO, ˆTO uv ZA ODIN [AG WYWODITSQ IZ uA. pO“TOMU NIKOGDA NE MOVET WOZNIKNUTX SOMNENIJ OTNOSITELXNO TOGO, KAK SWERNUTX OˆEREDNU@ PRAWOWYWODIMU@ CEPOˆKU POPOLNENNOJ GRAMMATIKI. mOVNO DOKAZATX, ˆTO “TI DWA OPREDELENIQ “KWIWALENTNY. eSLI GRAMMATIKA NE QWLQETSQ LR(1), TO ANALIZATOR TIPA SDWIG-SWERTKA PRI ANALIZE NEKOTOROJ CEPOˆKI MOVET DOSTIGNUTX KONFIGURACII, W KOTOROJ ON, ZNAQ SODERVIMOE MAGAZINA I SLEDU@]IJ WHODNOJ SIMWOL, NE MOVET RE[ITX, DELATX LI SDWIG ILI SWERTKU (KONFLIKT SDWIG/SWERTKA), ILI NE MOVET RE[ITX, KAKU@ IZ NESKOLXKIH SWERTOK PRIMENITX (KONFLIKT SWERTKA/SWERTKA). w ˆASTNOSTI, NEODNOZNAˆNAQ GRAMMATIKA NE MOVET BYTX LR(1). dLQ DOKAZATELXSTWA RASSMOTRIM DWA RAZLIˆNYH PRAWYH WYWODA (1) S ⇒r u1 ⇒r ... ⇒r un ⇒r w, I (2) S ⇒r v1 ⇒r ... ⇒r vm ⇒r w. nETRUDNO ZAMETITX, ˆTO LR(1)-USLOWIE (SOGLASNO WTOROMU OPREDELENI@ LR(1)GRAMMATIKI) NARU[AETSQ DLQ NAIMENX[EGO IZ ˆISEL i, DLQ KOTORYH un−i 6= vm−i . pRIMER 4.11. rASSMOTRIM WNOWX GRAMMATIKU USLOWNYH OPERATOROW: S → if E then S | if E then S else S | a E→b eSLI ANALIZATOR TIPA SDWIG-SWERTKA NAHODITSQ W KONFIGURACII, TAKOJ ˆTO NEOBRABOTANNAQ ˆASTX WHODNOJ CEPOˆKI IMEET WID else ... $, A W MAGAZINE NAHODITSQ ... if E then S, TO NELXZQ OPREDELITX, QWLQETSQ LI if E then S OSNOWOJ, WNE ZAWISIMOSTI OT TOGO, ˆTO LEVIT W MAGAZINE NIVE. —TO KONFLIKT SDWIG/SWERTKA. w ZAWISIMOSTI OT TOGO, ˆTO SLEDUET NA WHODE ZA else, PRAWILXNOJ MOVET BYTX SWERTKA PO S → if E then S ILI SDWIG else, A ZATEM RAZBOR DRUGOGO S I ZAWER[ENIE OSNOWY if E then S else S. tAKIM OBRAZOM NELXZQ SKAZATX, NUVNO LI W “TOM SLUˆAE DELATX SDWIG ILI SWERTKU, TAK ˆTO GRAMMATIKA NE QWLQETSQ LR(1). —TA GRAMMATIKA MOVET BYTX PREOBRAZOWANA K LR(1)-WIDU SLEDU@]IM OBRAZOM:
glawa 4. sintaksi˜eskij analiz
74
S→M |U M → if E then M else M | a U → if E then S | if E then M else U E→b
oSNOWNAQ RAZNICA MEVDU LL(1)- I LR(1)-GRAMMATIKAMI ZAKL@ˆAETSQ W SLEDU@]EM. ˜TOBY GRAMMATIKA BYLA LR(1), NEOBHODIMO RASPOZNAWATX WHOVDENIE PRAWOJ ˆASTI PRAWILA WYWODA, PROSMOTREW WSE, ˆTO WYWEDENO IZ “TOJ PRAWOJ ˆASTI I TEKU]IJ SIMWOL WHODNOJ CEPOˆKI. —TO TREBOWANIE SU]ESTWENNO MENEE STROGOE, ˆEM TREBOWANIE DLQ LL(1)-GRAMMATIKI, KOGDA NEOBHODIMO OPREDELITX PRIMENIMOE PRAWILO, WIDQ TOLXKO PERWYJ SIMWOL, WYWODIMYJ IZ EGO PRAWOJ ˆASTI. tAKIM OBRAZOM, KLASS LL(1)-GRAMMATIK QWLQETSQ SOBSTWENNYM PODKLASSOM KLASSA LR(1)-GRAMMATIK. sPRAWEDLIWY TAKVE SLEDU@]IE UTWERVDENIQ [2]. tEOREMA 4.5. kAVDYJ LR(1)-QZYK QWLQETSQ DETERMINIROWANNYM ksQZYKOM. tEOREMA 4.6. eSLI L – DETERMINIROWANNYJ ks-QZYK, TO SU]ESTWUET LR(1)-GRAMMATIKA, POROVDA@]AQ L.
4.4.5
wOSSTANOWLENIE POSLE SINTAKSIˆESKIH O[IBOK
oDNIM IZ PROSTEJ[IH METODOW WOSSTANOWLENIQ POSLE O[IBKI PRI LR(1)ANALIZE QWLQETSQ SLEDU@]IJ. pRI SINTAKSIˆESKOJ O[IBKE PROSMATRIWAEM MAGAZIN OT WERHU[KI, POKA NE NAJDEM SOSTOQNIE s S PEREHODOM NA WYDELENNYJ NETERMINAL A. zATEM SKANIRU@TSQ WHODNYE SIMWOLY, POKA NE BUDET NAJDEN TAKOJ, KOTORYJ DOPUSTIM POSLE A. w “TOM SLUˆAE NA WERHU[KU MAGAZINA POME]AETSQ SOSTOQNIE Goto[s, A] I RAZBOR PRODOLVAETSQ. dLQ NETERMINALA A MOVET IMETXSQ NESKOLXKO TAKIH WARIANTOW. oBYˆNO A – “TO NETERMINAL, PREDSTAWLQ@]IJ ODNU IZ OSNOWNYH KONSTRUKCIJ QZYKA, NAPRIMER OPERATOR. pRI BOLEE DETALXNOJ PRORABOTKE REAKCII NA O[IBKI MOVNO W KAVDOJ PUSTOJ KLETKE ANALIZATORA POSTAWITX OBRA]ENIE K SWOEJ PODPROGRAMME. tAKAQ PODPROGRAMMA MOVET WSTAWLQTX ILI UDALQTX WHODNYE SIMWOLY ILI SIMWOLY MAGAZINA, MENQTX PORQDOK WHODNYH SIMWOLOW.
4.4.6
wARIANTY LR-ANALIZATOROW
˜ASTO POSTROENNYE TABLICY DLQ LR(1)-ANALIZATORA OKAZYWA@TSQ DOWOLXNO BOLX[IMI. pO“TOMU PRI PRAKTIˆESKOJ REALIZACII ISPOLXZU@TSQ RAZLIˆNYE METODY IH SVATIQ. s DRUGOJ STORONY, ˆASTO OKAZYWAETSQ, ˆTO PRI POSTROENII DLQ QZYKA SINTAKSIˆESKOGO ANALIZATORA TIPA “SDWIG-SWERTKA” DOSTATOˆNO BOLEE PROSTYH METODOW. nEKOTORYE IZ “TIH METODOW BAZIRU@TSQ NA OSNOWE LR(1)-ANALIZATOROW. oDNIM IZ SPOSOBOW TAKOGO UPRO]ENIQ QWLQETSQ LR(0)-ANALIZ – ˆASTNYJ SLUˆAQ LR-ANALIZA, KOGDA NI PRI POSTROENII TABLIC, NI PRI ANALIZE NE UˆITYWAETSQ AWANCEPOˆKA.
4.4. razbor snizu-wwerh tipa sdwig-swertka
75
e]E ODNIM WARIANTOM LR-ANALIZA QWLQ@TSQ TAK NAZYWAEMYE SLR(1)ANALIZATORY (Simple LR(1)). oNI STROQTSQ SLEDU@]IM OBRAZOM. pUSTX C = {I0 , I1 , ... , In } – NABOR MNOVESTW DOPUSTIMYH LR(0)-SITUACIJ. sOSTOQNIQ ANALIZATORA SOOTWETSTWU@T Ii . fUNKCII DEJSTWIJ I PEREHODOW ANALIZATORA OPREDELQ@TSQ SLEDU@]IM OBRAZOM. 1. eSLI [A → u.av] ∈ Ii I goto(Ii , a) = Ij , TO OPREDELIM Action[i, a] = shift j. 2. eSLI [A → u.] ∈ Ii , TO OPREDELIM Action[i, a] = reduce A → u DLQ WSEH a ∈ F OLLOW (A), A 6= S 0 . 3. eSLI [S 0 → S.] ∈ Ii , TO OPREDELIM Action[i, $] = accept. 4. eSLI goto(Ii , A) = Ij , GDE A ∈ N , TO OPREDELIM Goto[i, A] = j. 5. oSTALXNYE WHODY DLQ FUNKCIJ Action I Goto OPREDELIM KAK error. 6. nAˆALXNOE SOSTOQNIE SOOTWETSTWUET MNOVESTWU SITUACIJ, SODERVA]EMU SITUACI@ [S 0 → .S]. rASPROSTRANENNYM WARIANTOM LR(1)-ANALIZA QWLQETSQ TAKVE LALR(1)ANALIZ. oN OSNOWAN NA OB˙EDINENII (SLIQNII) NEKOTORYH TABLIC. nAZOWEM QDROM MNOVESTWA LR(1)-SITUACIJ MNOVESTWO IH PERWYH KOMPONENT (T.E. WO MNOVESTWE SITUACIJ NE UˆITYWA@TSQ AWANCEPOˆKI). oB˙EDINIM WSE MNOVESTWA SITUACIJ S ODINAKOWYMI QDRAMI, A W KAˆESTWE AWANCEPOˆEK WOZXMEM OB˙EDINENIE AWANCEPOˆEK. fUNKCII Action I Goto STROQTSQ OˆEWIDNYM OBRAZOM. eSLI FUNKCIQ Action TAKIM OBRAZOM POSTROENNOGO ANALIZATORA NE IMEET KONFLIKTOW, TO ON NAZYWAETSQ LALR(1)-ANALIZATOROM (LookAhead LR(1)).
76
glawa 4. sintaksi˜eskij analiz
gLAWA 5
—LEMENTY TEORII PEREWODA dO SIH POR MY RASSMATRIWALI PROCESS SINTAKSIˆESKOGO ANALIZA TOLXKO KAK PROCESS ANALIZA DOPUSTIMOSTI WHODNOJ CEPOˆKI. oDNAKO, W KOMPILQTORE SINTAKSIˆESKIJ ANALIZ SLUVIT OSNOWOJ E]E ODNOGO WAVNOGO [AGA – POSTROENIQ DEREWA SINTAKSIˆESKOGO ANALIZA. w PRIMERAH 4.3 I 4.8 PREDYDU]EJ GLAWY W PROCESSE SINTAKSIˆESKOGO ANALIZA W KAˆESTWE WYHODA WYDAWALASX POSLEDOWATELXNOSTX PRIMENENNYH PRAWIL, NA OSNOWE KOTOROJ I MOVET BYTX POSTROENO DEREWO. pOSTROENIE DEREWA SINTAKSIˆESKOGO ANALIZA QWLQETSQ PROSTEJ[IM ˆASTNYM SLUˆAEM PEREWODA – PROCESSA PREOBRAZOWANIQ NEKOTOROJ WHODNOJ CEPOˆKI W NEKOTORU@ WYHODNU@. oPREDELENIE. pUSTX T – WHODNOJ ALFAWIT, A Π – WYHODNOJ ALFAWIT. pEREWODOM (ILI TRANSLQCIEJ) S QZYKA L1 ⊆ T ∗ NA QZYK L2 ⊆ Π∗ NAZYWAETSQ OTOBRAVENIE τ : L1 → L2 . eSLI y = τ (x), TO CEPOˆKA y NAZYWAETSQ WYHODOM DLQ CEPOˆKI x. mY RASSMOTRIM NESKOLXKO FORMALIZMOW DLQ OPREDELENIQ PEREWODOW: PREOBRAZOWATELI S MAGAZINNOJ PAMQTX@, SHEMY SINTAKSIˆESKI UPRAWLQEMOGO PEREWODA I ATRIBUTNYE GRAMMATIKI.
5.1
pREOBRAZOWATELI S MAGAZINNOJ PAMQTX@
rASSMOTRIM WAVNYJ KLASS ABSTRAKTNYH USTROJSTW, NAZYWAEMYH PREOBRAZOWATELQMI S MAGAZINNOJ PAMQTX@. —TI PREOBRAZOWATELI POLUˆA@TSQ IZ AWTOMATOW S MAGAZINNOJ PAMQTX@, ESLI K NIM DOBAWITX WYHOD I POZWOLITX NA KAVDOM [AGE WYDAWATX WYHODNU@ CEPOˆKU. pREOBRAZOWATELEM S MAGAZINNOJ PAMQTX@ (mp-PREOBRAZOWATELEM) NAZYWAETSQ WOSXMERKA P = (Q, T, Γ, Π, D, q0 , Z0 , F ), GDE WSE SIMWOLY IME@T 77
glawa 5. —lementy teorii perewoda
78
TOT VE SMYSL, ˆTO I W OPREDELENII mp-AWTOMATA, ZA ISKL@ˆENIEM TOGO, ˆTO Π – KONEˆNYJ WYHODNOJ ALFAWIT, A D – OTOBRAVENIE MNOVESTWA Q×(T ∪{e})×Γ W MNOVESTWO KONEˆNYH PODMNOVESTW MNOVESTWA Q×Γ ∗ ×Π∗ . oPREDELIM KONFIGURACI@ PREOBRAZOWATELQ P KAK ˆETWERKU (q, x, u, y), GDE q ∈ Q – SOSTOQNIE, x ∈ T ∗ – CEPOˆKA NA WHODNOJ LENTE, u ∈ Γ∗ – SODERVIMOE MAGAZINA, y ∈ Π∗ – CEPOˆKA NA WYHODNOJ LENTE, WYDANNAQ WPLOTX DO NASTOQ]EGO MOMENTA. eSLI MNOVESTWO D(q, a, Z) SODERVIT “LEMENT (r, u, z), TO BUDEM PISATX (q, ax, Zw, y) ` (r, x, uw, yz) DLQ L@BYH x ∈ T ∗ , w ∈ Γ∗ I y ∈ Π∗ . rEFLEKSIWNOTRANZITIWNOE ZAMYKANIE OTNO[ENIQ ` BUDEM OBOZNAˆATX `∗ . cEPOˆKU y NAZOWEM WYHODOM DLQ x, ESLI (q0 , x, Z0 , e) `∗ (q, e, u, y) DLQ NEKOTORYH q ∈ F I u ∈ Γ∗ . pEREWODOM (ILI TRANSLQCIEJ), OPREDELQEMYM mp-PREOBRAZOWATELEM P (OBOZNAˆAETSQ τ (P )), NAZOWEM MNOVESTWO {(x, y) | (q0 , x, Z0 , e) `∗ (q, e, u, y) DLQ NEKOTORYH q ∈ F I u ∈ Γ∗ } bUDEM GOWORITX, ˆTO mp-PREOBRAZOWATELX P QWLQETSQ DETERMINIROWANNYM (dmp-PREOBRAZOWATELEM), ESLI WYPOLNQ@TSQ SLEDU@]IE USLOWIQ: 1) DLQ WSEH q ∈ Q, a ∈ T ∪ {e} I Z ∈ Γ MNOVESTWO D(q, a, Z) SODERVIT NE BOLEE ODNOGO “LEMENTA, 2) ESLI D(q, e, Z) 6= ∅, TO D(q, a, Z) = ∅ DLQ WSEH a ∈ T . pRIMER 5.1. rASSMOTRIM PEREWOD τ , OTOBRAVA@]IJ KAVDU@ CEPOˆKU x ∈ {a, b}∗ $, W KOTOROJ ˆISLO WHOVDENIJ SIMWOLA a RAWNO ˆISLU WHOVDENIJ SIMWOLA b, W CEPOˆKU y = (ab)n , GDE n – ˆISLO WHOVDENIJ a ILI b W CEPOˆKU x. nAPRIMER, τ (abbaab$) = ababab. —TOT PEREWOD MOVET BYTX REALIZOWAN dmp-PREOBRAZOWATELEM P = ({q0 , qf }, {a, b, $}, {Z, a, b}, {a, b}, D, q0 , Z, {qf }) c FUNKCIEJ PEREHODOW: D(q0 , X, Z) = {(q0 , XZ, e)}, X ∈ {a, b}, D(q0 , $, Z) = {(qf , Z, e)}, D(q0 , X, X) = {(q0 , XX, e)}, X ∈ {a, b}, D(q0 , X, Y ) = {(q0 , e, ab)}, X ∈ {a, b}, Y ∈ {a, b}, X 6= Y .
5.2
sINTAKSIˆESKI UPRAWLQEMYJ PEREWOD
dRUGIM FORMALIZMOM, ISPOLXZUEMYM DLQ OPREDELENIQ PEREWODOW, QWLQETSQ SHEMA SINTAKSIˆESKI UPRAWLQEMOGO PEREWODA. fAKTIˆESKI, TAKAQ SHEMA PREDSTAWLQET SOBOJ ks-GRAMMATIKU, W KOTOROJ K KAVDOMU PRAWILU DOBAWLEN “LEMENT PEREWODA. wSQKIJ RAZ, KOGDA PRAWILO UˆASTWUET W WYWODE WHODNOJ CEPOˆKI, S POMO]X@ “LEMENTA PEREWODA WYˆISLQETSQ ˆASTX WYHODNOJ CEPOˆKI, SOOTWETSTWU@]AQ ˆASTI WHODNOJ CEPOˆKI, POROVDENNOJ “TIM PRAWILOM.
5.2. sintaksi˜eski uprawlqemyj perewod
79
5.2.1 sHEMY SINTAKSIˆESKI UPRAWLQEMOGO PEREWODA oPREDELENIE. CHEMOJ SINTAKSIˆESKI UPRAWLQEMOGO PEREWODA (ILI TRANSLQCII, SOKRA]ENNO: su-SHEMOJ) NAZYWAETSQ PQTERKA T r = (N, T, Π, R, S), GDE (1) N – KONEˆNOE MNOVESTWO NETERMINALXNYH SIMWOLOW; (2) T – KONEˆNYJ WHODNOJ ALFAWIT; (3) Π – KONEˆNYJ WYHODNOJ ALFAWIT; (4) R – KONEˆNOE MNOVESTWO PRAWIL PEREWODA WIDA A → u, v GDE u ∈ (N ∪ T )∗ , v ∈ (N ∪ Π)∗ I WHOVDENIQ NETERMINALOW W CEPOˆKU v OBRAZU@T PERESTANOWKU WHOVDENIJ NETERMINALOW W CEPOˆKU u, TAK ˆTO KAVDOMU WHOVDENI@ NETERMINALA B W CEPOˆKU u SOOTWETSTWUET NEKOTOROE WHOVDENIE “TOGO VE NETERMINALA W CEPOˆKU v; ESLI NETERMINAL B WSTREˆAETSQ BOLEE ODNOGO RAZA, DLQ UKAZANIQ SOOTWETSTWIQ ISPOLXZU@TSQ WERHNIE CELOˆISLENNYE INDEKSY; (5) S – NAˆALXNYJ SIMWOL, WYDELENNYJ NETERMINAL IZ N . oPREDELIM WYWODIMU@ PARU W SHEME T r SLEDU@]IM OBRAZOM: (1) (S, S) – WYWODIMAQ PARA, W KOTOROJ SIMWOLY S SOOTWETSTWU@T DRUG DRUGU; (2) ESLI (xAy, x0 Ay 0 ) – WYWODIMAQ PARA, W CEPOˆKAH KOTOROJ WHOVDENIQ A SOOTWETSTWU@T DRUG DRUGU, I A → u, v – PRAWILO IZ R, TO (xuy, x0 vy 0 ) – WYWODIMAQ PARA. dLQ OBOZNAˆENIQ TAKOGO WYWODA ODNOJ PARY IZ DRUGOJ BUDEM POLXZOWATXSQ OBOZNAˆENIEM ⇒: (xAy, x0 Ay 0 ) ⇒ (xuy, x0 vy 0 ). rEFLEKSIWNO-TRANZITIWNOE ZAMYKANIE OTNO[ENIE ⇒ OBOZNAˆIM ⇒∗ . pEREWODOM τ (T r), OPREDELQEMYM su-SHEMOJ T r, NAZOWEM MNOVESTWO PAR {(x, y) | (S, S) ⇒∗ (x, y), x ∈ T ∗ , y ∈ Π∗ } eSLI ˆEREZ P OBOZNAˆITX MNOVESTWO WHODNYH PRAWIL WYWODA WSEH PRAWIL PEREWODA, TO G = (N, T, P, S) BUDET WHODNOJ GRAMMATIKOJ DLQ T r. su-SHEMA T r = (N, T, Π, R, S) NAZYWAETSQ PROSTOJ, ESLI DLQ KAVDOGO PRAWILA A → u, v IZ R SOOTWETSTWU@]IE DRUG DRUGU WHOVDENIQ NETERMINALOW WSTREˆA@TSQ W u I v W ODNOM I TOM VE PORQDKE. pEREWOD, OPREDELQEMYJ PROSTOJ su-SHEMOJ, NAZYWAETSQ PROSTYM SINTAKSIˆESKI UPRAWLQEMYM PEREWODOM (PROSTYM su-PEREWODOM).
glawa 5. —lementy teorii perewoda
80
pRIMER 5.2. pEREWOD ARIFMETIˆESKIH WYRAVENIJ W poliz (POLXSKU@ INWERSNU@ ZAPISX) MOVNO OSU]ESTWITX PROSTOJ su-SHEMOJ S PRAWILAMI E → E + T, E → T, T → T ∗ F, T → F, F → id, F → (E),
ET + T TF+ F id E
nAJDEM WYHOD SHEMY DLQ WHODA id ∗ (id + id). nETRUDNO WIDETX, ˆTO SU]ESTWUET POSLEDOWATELXNOSTX [AGOW WYWODA (E, E) ⇒ (T, T ) ⇒ (T ∗ F, T F ∗) ⇒ (F ∗ F, F F ∗) ⇒ (id ∗ F, id F ∗) ⇒ (id ∗ (E), id E∗) ⇒ (id ∗ (E + T ), id E T + ∗) ⇒ (id ∗ (T + T ), id T T + ∗) ⇒ (id ∗ (F + T ), id F T + ∗) ⇒ (id ∗ (id + T ), id id T + ∗) ⇒ (id ∗ (id + F ), id id F + ∗ ) ⇒ (id ∗ (id + id), id id id + ∗), PEREWODQ]AQ “TU CEPOˆKU W CEPOˆKU id id id + ∗.
rASSMOTRIM SWQZX MEVDU PEREWODAMI, OPREDELQEMYMI su-SHEMAMI I OSU]ESTWLQEMYMI mp-PREOBRAZOWATELQMI [2]. tEOREMA 5.1. pUSTX P – mp-PREOBRAZOWATELX. sU]ESTWUET TAKAQ PROSTAQ su-SHEMA T r, ˆTO τ (T r) = τ (P ). tEOREMA 5.2. pUSTX T r – PROSTAQ su-SHEMA. sU]ESTWUET TAKOJ mpPREOBRAZOWATELX P, ˆTO τ (P ) = τ (T r). tAKIM OBRAZOM, KLASS PEREWODOW, OPREDELQEMYH MAGAZINNYMI PREOBRAZOWATELQMI, SOWPADAET S KLASSOM PROSTYH su-PEREWODOW. rASSMOTRIM TEPERX SWQZX MEVDU su-PEREWODAMI I DETERMINIROWANNYMI mp-PREOBRAZOWATELQMI, WYPOLNQ@]IMI NISHODQ]IJ ILI WOSHODQ]IJ RAZBOR [2]. tEOREMA 5.3. pUSTX T r = (N, T, Π, R, S) – PROSTAQ su-SHEMA, WHODNOJ GRAMMATIKOJ KOTOROJ SLUVIT LL(1)-GRAMMATIKA. tOGDA PEREWOD {x$, y)|(x, y) ∈ τ (T r)} MOVNO OSU]ESTWITX DETERMINIROWANNYM mpPREOBRAZOWATELEM. sU]ESTWU@T PROSTYE su-SHEMY, IME@]IE W KAˆESTWE WHODNYH GRAMMATIK LR(1)-GRAMMATIKI I NE REALIZUEMYE NI NA KAKOM dmp-PREOBRAZOWATELE. pRIMER 5.3. rASSMOTRIM PROSTU@ su-SHEMU S PRAWILAMI S → Sa, S → Sb, S → e,
aSa bSb e
wHODNAQ GRAMMATIKA QWLQETSQ LR(1)-GRAMMATIKOJ, NO NE SU]ESTWUET dmpPREOBRAZOWATELQ, OPREDELQ@]EGO PEREWOD {(x$, y)|(x, y) ∈ τ (T r)}.
5.2. sintaksi˜eski uprawlqemyj perewod
81
nAZOWEM su-SHEMU T r = (N, T, Π, R, S) POSTFIKSNOJ, ESLI KAVDOE PRAWILO IZ R IMEET WID A → u, v, GDE v ∈ N ∗ Π∗ . iNYMI SLOWAMI, KAVDYJ “LEMENT PEREWODA PREDSTAWLQET SOBOJ CEPOˆKU IZ NETERMINALOW, ZA KOTORYMI SLEDUET CEPOˆKA WYHODNYH SIMWOLOW. tEOREMA 5.4. pUSTX T r – PROSTAQ POSTFIKSNAQ su-SHEMA, WHODNAQ GRAMMATIKA DLQ KOTOROJ QWLQETSQ LR(1). tOGDA PEREWOD {(x$, y)|(x, y) ∈ τ (T r)} MOVNO OSU]ESTWITX DETERMINIROWANNYM mp-PREOBRAZOWATELEM.
5.2.2 oBOB]ENNYE SHEMY SINTAKSIˆESKI UPRAWLQEMOGO PEREWODA rAS[IRIM OPREDELENIE su-SHEMY, S TEM ˆTOBY WYPOLNQTX BOLEE [IROKIJ KLASS PEREWODOW. wO-PERWYH, POZWOLIM IMETX W KAVDOJ WER[INE DEREWA RAZBORA NESKOLXKO PEREWODOW. kAK I W OBYˆNOJ su-SHEME, KAVDYJ PEREWOD ZAWISIT OT PRQMYH POTOMKOW SOOTWETSTWU@]EJ WER[INY DEREWA. wO-WTORYH, POZWOLIM “LEMENTAM PEREWODA BYTX PROIZWOLXNYMI CEPOˆKAMI WYHODNYH SIMWOLOW I SIMWOLOW, PREDSTAWLQ@]IH PEREWODY W POTOMKAH. tAKIM OBRAZOM, SIMWOLY PEREWODA MOGUT POWTORQTXSQ ILI WOOB]E OTSUTSTWOWATX. oPREDELENIE. oBOB]ENNOJ SHEMOJ SINTAKSIˆESKI UPRAWLQEMOGO PEREWODA (ILI TRANSLQCII, SOKRA]ENNO: Osu-SHEMOJ) NAZYWAETSQ [ESTERKA T r = (N, T, Π, Γ, R, S), GDE WSE SIMWOLY IME@T TOT VE SMYSL, ˆTO I DLQ su-SHEMY, ZA ISKL@ˆENIEM TOGO, ˆTO (1) Γ – KONEˆNOE MNOVESTWO SIMWOLOW PEREWODA WIDA Ai , GDE A ∈ N I i – CELOE ˆISLO; (2) R – KONEˆNOE MNOVESTWO PRAWIL PEREWODA WIDA A → u, A1 = v1 , ... , Am = vm , UDOWLETWORQ@]IH SLEDU@]IM USLOWIQM: (A) Aj ∈ Γ DLQ 1 6 j 6 m, (B) KAVDYJ SIMWOL, WHODQ]IJ W v1 , . . . , vm , LIBO PRINADLEVIT Π, LIBO QWLQETSQ Bk ∈ Γ, GDE B WHODIT W u, (W) ESLI u IMEET BOLEE ODNOGO WHOVDENIQ SIMWOLA B, TO KAVDYJ SIMWOL Bk WO WSEH v SOOTNESEN (WERHNIM INDEKSOM) S KONKRETNYM WHOVDENIEM B. A → u NAZYWA@T WHODNYM PRAWILOM WYWODA, Ai – PEREWODOM NETERMINALA A, Ai = vi – “LEMENTOM PEREWODA, SWQZANNYM S “TIM PRAWILOM PEREWODA. eSLI W osu-SHEME NET DWUH PRAWIL PEREWODA S ODINAKOWYM WHODNYM PRAWILOM WYWODA, TO EE NAZYWA@T SEMANTIˆESKI ODNOZNAˆNOJ.
82
glawa 5. —lementy teorii perewoda
wYHOD osu-SHEMY OPREDELIM SNIZU WWERH. s KAVDOJ WNUTRENNEJ WER[INOJ n DEREWA RAZBORA (WO WHODNOJ GRAMMATIKE), POMEˆENNOJ A, SWQVEM ODNU CEPOˆKU DLQ KAVDOGO Ai . —TA CEPOˆKA NAZYWAETSQ ZNAˆENIEM (ILI PEREWODOM) SIMWOLA Ai W WER[INE n. kAVDOE ZNAˆENIE WYˆISLQETSQ PODSTANOWKOJ ZNAˆENIJ SIMWOLOW PEREWODA DANNOGO “LEMENTA PEREWODA Ai = vi , OPREDELENNYH W PRQMYH POTOMKAH WER[INY n. pEREWODOM τ (T r), OPREDELQEMYM osu-SHEMOJ T r, NAZOWEM MNOVESTWO {(x, y) | x IMEET DEREWO RAZBORA WO WHODNOJ GRAMMATIKE DLQ T r I y – ZNAˆENIE WYDELENNOGO SIMWOLA PEREWODA Sk W KORNE “TOGO DEREWA}.
pRIMER 5.4. rASSMOTRIM FORMALXNOE DIFFERENCIROWANIE WYRAVENIJ, WKL@ˆA@]IH KONSTANTY 0 I 1, PEREMENNU@ x, FUNKCII sin I cos , A TAKVE OPERACII ∗ I +. tAKIE WYRAVENIQ POROVDAET GRAMMATIKA
E →E+T |T T →T ∗F |F F → (E) | sin (E) | cos (E) | x | 0 | 1
sWQVEM S KAVDYM IZ E, T I F DWA PEREWODA, OBOZNAˆENNYH INDEKSOM 1 I 2. iNDEKS 1 UKAZYWAET NA TO, ˆTO WYRAVENIE NE DIFFERENCIROWANO, 2 – ˆTO WYRAVENIE PRODIFFERENCIROWANO. fORMALXNAQ PROIZWODNAQ – “TO E2 . zAKONY DIFFERENCIROWANIQ TAKOWY: d(f (x) + g(x)) = df (x) + dg(x) d(f (x) ∗ g(x)) = f (x) ∗ dg(x) + g(x) ∗ df (x) d sin (f (x)) = cos (f (x)) ∗ df (x) d cos (f (x)) = − sin (f (x))df (x) dx = 1 d0 = 0 d1 = 0 —TI ZAKONY MOVNO REALIZOWATX SLEDU@]EJ osu-SHEMOJ:
5.3. atributnye grammatiki E → E +T
E 1 = E 1 + T1 E2 = E 2 + T 2
E→T
E 1 = T1 E2 = T 2
T →T ∗F
T 1 = T1 ∗ F1 T2 = T 1 ∗ F 2 + T 2 ∗ F 1
T →F
T1 = F1 T2 = F 2
F → (E)
F1 = (E1 ) F2 = (E2 )
F → sin (E)
F1 = sin (E1 ) F2 = cos (E1 ) ∗ (E2 )
F → cos (E)
F1 = cos (E1 ) F2 = − sin (E1 ) ∗ (E2 )
F →x
F1 = x F2 = 1
F →0
F1 = 0 F2 = 0
F →1
F1 = 1 F2 = 0
83
dEREWO WYWODA DLQ sin (cos (x)) + x PRIWEDENO NA RIS. 5.1.
5.3
aTRIBUTNYE GRAMMATIKI
sREDI WSEH FORMALXNYH METODOW OPISANIQ QZYKOW PROGRAMMIROWANIQ ATRIBUTNYE GRAMMATIKI (WWEDENNYE kNUTOM [6]) POLUˆILI, PO-WIDIMOMU, NAIBOLX[U@ IZWESTNOSTX I RASPROSTRANENIE. pRIˆINOJ “TOGO QWLQETSQ TO, ˆTO FORMALIZM ATRIBUTNYH GRAMMATIK OSNOWYWAETSQ NA DEREWE RAZBORA PROGRAMMY W ks-GRAMMATIKE, ˆTO SBLIVAET EGO S HORO[O RAZRABOTANNOJ TEORIEJ I PRAKTIKOJ POSTROENIQ TRANSLQTOROW.
5.3.1 oPREDELENIE ATRIBUTNYH GRAMMATIK aTRIBUTNOJ GRAMMATIKOJ NAZYWAETSQ ˆETWERKA AG = (G, A S , AI , R), GDE (1) G = (N, T, P, S) – PRIWEDENNAQ ks-GRAMMATIKA; (2) AS – KONEˆNOE MNOVESTWO SINTEZIRUEMYH ATRIBUTOW;
glawa 5. —lementy teorii perewoda
84
E1= sin(cos(x)) + x E2= cos(cos(x))*(-sin(x)*(1)) +1
E E1= sin(cos(x)) E2= cos(cos(x))*(-sin(x)*(1)) E
T
T1= x T2= 1
T1= sin(cos(x)) T2= cos(cos(x))*(-sin(x)*(1)) T
F
F1= x F2= 1
F1= sin(cos(x)) F2= cos(cos(x))*(-sin(x)*(1)) F
x
sin
(
cos (
+
E
E1= cos(x) E2= -sin(x)*(1)
)
T
T1= cos(x) T2= -sin(x)*(1)
F
F1= cos(x) F2= -sin(x)*(1)
E
)
T
T1= x T2= 1
F
F1= x F2= 1
x
rIS. 5.1:
E1= x E2= 1
5.3. atributnye grammatiki
85
(3) AI – KONEˆNOE MNOVESTWO NASLEDUEMYH ATRIBUTOW, AS ∩ AI = ∅;
(4) R – KONEˆNOE MNOVESTWO SEMANTIˆESKIH PRAWIL.
aTRIBUTNAQ GRAMMATIKA AG SOPOSTAWLQET KAVDOMU SIMWOLU X IZ N ∪ T MNOVESTWO AS (X) SINTEZIRUEMYH ATRIBUTOW I MNOVESTWO AI (X) NASLEDUEMYH ATRIBUTOW. mNOVESTWO WSEH SINTEZIRUEMYH ATRIBUTOW WSEH SIMWOLOW IZ N ∪ T OBOZNAˆAETSQ AS , NASLEDUEMYH – AI . aTRIBUTY RAZNYH SIMWOLOW QWLQ@TSQ RAZLIˆNYMI ATRIBUTAMI. bUDEM OBOZNAˆATX ATRIBUT a SIMWOLA X KAK a(X). zNAˆENIQ ATRIBUTOW MOGUT BYTX PROIZWOLXNYH TIPOW, NAPRIMER, PREDSTAWLQTX SOBOJ ˆISLA, STROKI, ADRESA PAMQTI I T.D. pUSTX PRAWILO p IZ P IMEET WID X0 → X1 X2 ... Xn . aTRIBUTNAQ GRAMMATIKA AG SOPOSTAWLQET KAVDOMU PRAWILU p IZ P KONEˆNOE MNOVESTWO R(p) SEMANTIˆESKIH PRAWIL WIDA a(Xi ) = f (b(Xj ), c(Xk ), ... , d(Xm ))
GDE 0 6 j, k, ... , m 6 n, PRIˆEM i = 0, ESLI a(Xi ) ∈ AI (Xi ) (T.E. a(Xi ) – NASLEDUEMYJ ATRIBUT), I 1 6 i 6 n, ESLI a(Xi ) ∈ AI (Xi ) (T.E. a(Xi ) – SINTEZIRUEMYJ ATRIBUT). tAKIM OBRAZOM, SEMANTIˆESKOE PRAWILO OPREDELQET ZNAˆENIE ATRIBUTA a SIMWOLA Xi NA OSNOWE ZNAˆENIJ ATRIBUTOW b, c, . . . , d SIMWOLOW Xj , Xk , . . . , Xm SOOTWETSTWENNO. w ˆASTNOM SLUˆAE DLINA n PRAWOJ ˆASTI PRAWILA MOVET BYTX RAWNA NUL@, TOGDA BUDEM GOWORITX, ˆTO ATRIBUT a SIMWOLA Xi “POLUˆAET W KAˆESTWE ZNAˆENIQ KONSTANTU”. w DALXNEJ[EM BUDEM SˆITATX, ˆTO ATRIBUTNAQ GRAMMATIKA NE SODERVIT SEMANTIˆESKIH PRAWIL DLQ WYˆISLENIQ ATRIBUTOW TERMINALXNYH SIMWOLOW. pREDPOLAGAETSQ, ˆTO ATRIBUTY TERMINALXNYH SIMWOLOW – LIBO PREDOPREDELENNYE KONSTANTY, LIBO DOSTUPNY KAK REZULXTAT RABOTY LEKSIˆESKOGO ANALIZATORA.
pRIMER 5.5. rASSMOTRIM ATRIBUTNU@ GRAMMATIKU, POZWOLQ@]U@ WYˆISLITX ZNAˆENIE WE]ESTWENNOGO ˆISLA, PREDSTAWLENNOGO W DESQTIˆNOJ ZAPISI. zDESX N = {N um, Int, F rac}, T = {digit, .}, S = N um, A PRAWILA WYWODA I SEMANTIˆESKIE PRAWILA OPREDELQ@TSQ SLEDU@]IM OBRAZOM (WERHNIE INDEKSY ISPOLXZU@TSQ DLQ SSYLKI NA RAZNYE WHOVDENIQ ODNOGO I TOGO VE NETERMINALA):
glawa 5. —lementy teorii perewoda
86 N um → Int . F rac
v(N um) = v(Int) + v(F rac) p(F rac) = 1
Int → e
v(Int) = 0 p(Int) = 0
Int1 → digit Int2
v(Int1 ) = v(digit) ∗ 10p(Int p(Int1 ) = p(Int2 ) + 1
F rac → e
v(F rac) = 0
F rac1 → digit F rac2
v(F rac1 ) = v(digit) ∗ 10−p(F rac p(F rac2 ) = p(F rac1 ) + 1
2
)
+ v(Int2 )
1
)
+ v(F rac2 )
dLQ “TOJ GRAMMATIKI AS (N um) = {v}, AS (Int) = {v, p}, AS (F rac) = {v},
AI (N um) = ∅, AI (Int) = ∅, AI (F rac) = {p}.
pUSTX DANA ATRIBUTNAQ GRAMMATIKA AG I CEPOˆKA, PRINADLEVA]AQ QZYKU, OPREDELQEMOMU SOOTWETSTWU@]EJ G = (N, T, P, S). sOPOSTAWIM “TOJ CEPOˆKE “ZNAˆENIE” SLEDU@]IM OBRAZOM. pOSTROIM DEREWO RAZBORA T “TOJ CEPOˆKI W GRAMMATIKE G. kAVDYJ WNUTRENNIJ UZEL “TOGO DEREWA POMEˆAETSQ NETERMINALOM X0 , SOOTWETSTWU@]IM PRIMENENI@ p-GO PRAWILA GRAMMATIKI; TAKIM OBRAZOM, U “TOGO UZLA BUDET n NEPOSREDSTWENNYH POTOMKOW (RIS. 5.2). X0
X1
X2 • • • Xn
rIS. 5.2: pUSTX TEPERX X – METKA NEKOTOROGO UZLA DEREWA I PUSTX a – ATRIBUT SIMWOLA X. eSLI a – SINTEZIRUEMYJ ATRIBUT, TO X = X0 DLQ NEKOTOROGO p ∈ P ; ESLI VE a – NASLEDUEMYJ ATRIBUT, TO X = Xj DLQ NEKOTORYH p ∈ P I 1 6 j 6 n. w OBOIH SLUˆAQH DEREWO “W RAJONE” “TOGO UZLA IMEET WID, PRIWEDENNYJ NA RIS. 5.2. pO OPREDELENI@, ATRIBUT a IMEET W “TOM UZLE ZNAˆENIE v, ESLI W SOOTWETSTWU@]EM SEMANTIˆESKOM PRAWILE a(Xi ) = f (b(Xj ), c(Xk ), ... , d(Xm )) WSE ATRIBUTY b, c, . . . , d UVE OPREDELENY I IME@T W UZLAH S METKAMI Xj , Xk , . . . , Xm ZNAˆENIQ vj , vk , . . . , vm SOOTWETSTWENNO, A v = f (v1 , v2 , ... , vm ). pROCESS WYˆISLENIQ ATRIBUTOW NA DEREWE PRODOLVAETSQ DO TEH POR, POKA NELXZQ
5.3. atributnye grammatiki
87
BUDET WYˆISLITX BOLX[E NI ODNOGO ATRIBUTA. wYˆISLENNYE W REZULXTATE ATRIBUTY KORNQ DEREWA PREDSTAWLQ@T SOBOJ “ZNAˆENIE”, SOOTWETSTWU@]EE DANNOMU DEREWU WYWODA. zAMETIM, ˆTO ZNAˆENIE SINTEZIRUEMOGO ATRIBUTA SIMWOLA W UZLE SINTAKSIˆESKOGO DEREWA WYˆISLQETSQ PO ATRIBUTAM SIMWOLOW W POTOMKAH “TOGO UZLA; ZNAˆENIE NASLEDUEMOGO ATRIBUTA WYˆISLQETSQ PO ATRIBUTAM “RODITELQ’ I “SOSEDEJ”. aTRIBUTY, SOPOSTAWLENNYE WHOVDENIQM SIMWOLOW W DEREWO RAZBORA, BUDEM NAZYWATX WHOVDENIQMI ATRIBUTOW W DEREWO RAZBORA, A DEREWO S SOPOSTAWLENNYMI KAVDOJ WER[INE ATRIBUTAMI – ATRIBUTIROWANNYM DEREWOM RAZBORA. pRIMER 5.6. aTRIBUTIROWANNOE DEREWO DLQ GRAMMATIKI IZ PREDYDU]EGO PRIMERA I CEPOˆKI w = 12.34 POKAZANO NA RIS. 5.3.
Num
Int digit
v = 12 p= 2
Int
v=1
digit
v = 12.34
Frac
• digit
v= 2 p= 1
Int
v=2
Frac
v=3 v= 0 p= 0
v = 0.34 p= 1
digit v=4
v = 0.04 p= 2
Frac
v= 0 p= 3
e
e rIS. 5.3:
bUDEM GOWORITX, ˆTO SEMANTIˆESKIE PRAWILA ZADANY KORREKTNO, ESLI ONI POZWOLQ@T WYˆISLITX WSE ATRIBUTY PROIZWOLXNOGO UZLA W L@BOM DEREWE WYWODA. mEVDU WHOVDENIQMI ATRIBUTOW W DEREWO RAZBORA SU]ESTWU@T ZAWISIMOSTI, OPREDELQEMYE SEMANTIˆESKIMI PRAWILAMI, SOOTWETSTWU@]IMI PRIMENENNYM SINTAKSIˆESKIM PRAWILAM. —TI ZAWISIMOSTI MOGUT BYTX PREDSTAWLENY W WIDE ORIENTIROWANNOGO GRAFA SLEDU@]IM OBRAZOM. pUSTX T – DEREWO RAZBORA. sOPOSTAWIM “TOMU DEREWU ORIENTIROWANNYJ GRAF D(T ), UZLAMI KOTOROGO QWLQ@TSQ PARY (n, a), GDE n – UZEL DEREWA T , a – ATRIBUT SIMWOLA, SLUVA]EGO METKOJ UZLA n. gRAF SODERVIT DUGU IZ (n1 , a1 ) W (n2 , a2 ) TOGDA I TOLXKO TOGDA, KOGDA SEMANTIˆESKOE PRAWILO, WYˆISLQ@]EE ATRIBUT a2 , NEPOSREDSTWENNO ISPOLXZUET ZNAˆENIE ATRIBUTA a1 . tAKIM
glawa 5. —lementy teorii perewoda
88
OBRAZOM, UZLAMI GRAFA D(T ) QWLQ@TSQ ATRIBUTY, KOTORYE NUVNO WYˆISLITX, A DUGI OPREDELQ@T ZAWISIMOSTI, PODRAZUMEWA@]IE, KAKIE ATRIBUTY WYˆISLQ@TSQ RANX[E, A KAKIE POZVE. pRIMER 5.7. gRAF ZAWISIMOSTEJ ATRIBUTOW DLQ DEREWA RAZBORA IZ PREDYDU]EGO PRIMERA POKAZAN NA RIS. 5.4.
v (Num) p (Num)
v (Int) p (Int)
v (digit)
v (Int) p (Int)
v (Int) p (Int)
v (digit)
v (digit) v (Int) p (Int)
v (Int) p (Int)
v (digit)
v (Int) p (Int)
rIS. 5.4: mOVNO POKAZATX, ˆTO SEMANTIˆESKIE PRAWILA QWLQ@TSQ KORREKTNYMI TOGDA I TOLXKO TOGDA, KOGDA DLQ L@BOGO DEREWA WYWODA T SOOTWETSTWU@]IJ GRAF D(T ) NE SODERVIT CIKLOW (T.E. QWLQETSQ ORIENTIROWANNYM ACIKLIˆESKIM GRAFOM).
5.3.2
kLASSY ATRIBUTNYH GRAMMATIK I IH REALIZACIQ
w OB]EM WIDE REALIZACIQ WYˆISLITELEJ DLQ ATRIBUTNYH GRAMMATIK WYZYWAET ZNAˆITELXNYE TRUDNOSTI. —TO SWQZANO S TEM, ˆTO MNOVESTWO ZNAˆENIJ ATRIBUTOW, SWQZANNYH S DANNYM DEREWOM, PRIHODITSQ WYˆISLQTX W SOOTWETSTWII S ZAWISIMOSTQMI ATRIBUTOW, KOTORYE OBRAZU@T ORIENTIROWANNYJ ACIKLIˆESKIJ GRAF. nA PRAKTIKE STARA@TSQ OSU]ESTWLQTX PROCESS WYˆISLENIQ ATRIBUTOW, PRIWQZYWAQ EGO K TOMU ILI INOMU SPOSOBU OBHODA DEREWA. rASSMATRIWA@T MNOGOWIZITNYE, MNOGOPROHODNYE I DRUGIE ATRIBUTNYE WYˆISLITELI. —TO, KAK PRAWILO, WEDET K OGRANIˆENI@ DOPUSTIMYH ZAWISIMOSTEJ MEVDU ATRIBUTAMI, PODDERVIWAEMYH WYˆISLITELEM. pROSTEJ[IMI PODKLASSAMI ATRIBUTNYH GRAMMATIK, WYˆISLENIQ WSEH ATRIBUTOW DLQ KOTORYH MOVET BYTX OSU]ESTWLENO ODNOWREMENNO S SINTAKSIˆESKIM ANALIZOM, QWLQ@TSQ S-ATRIBUTNYE I L-ATRIBUTNYE GRAMMATIKI.
5.3. atributnye grammatiki
89
oPREDELENIE. aTRIBUTNAQ GRAMMATIKA NAZYWAETSQ S-ATRIBUTNOJ, ESLI ONA SODERVIT TOLXKO SINTEZIRUEMYE ATRIBUTY. nETRUDNO WIDETX, ˆTO DLQ S-ATRIBUTNOJ GRAMMATIKI NA L@BOM DEREWE RAZBORA WSE ATRIBUTY MOGUT BYTX WYˆISLENY ZA ODIN OBHOD DEREWA SNIZU WWERH. tAKIM OBRAZOM, WYˆISLENIE ATRIBUTOW MOVNO DELATX PARALLELXNO S WOSHODQ]IM SINTAKSIˆESKIM ANALIZOM, NAPRIMER, LR(1)-ANALIZOM. pRIMER 5.8. rASSMOTRIM S-ATRIBUTNU@ GRAMMATIKU DLQ PEREWODA ARIFMETIˆESKIH WYRAVENIJ W poliz. zDESX ATRIBUT v IMEET STROKOWYJ TIP, k – OBOZNAˆAET OPERACI@ KONKATENACII. pRAWILA WYWODA I SEMANTIˆESKIE PRAWILA OPREDELQ@TSQ SLEDU@]IM OBRAZOM E1 → E2 + T
v(E 1 ) = v(E 2 ) k v(T ) k 0 +0
E→T
v(E) = v(T )
T →T ∗F
v(T 1 ) = v(T 2 ) k v(F ) k 0 ∗0
T →F
v(T ) = v(F )
F → id
v(F ) = v(id)
F → (E)
v(F ) = v(E)
oPREDELENIE. aTRIBUTNAQ GRAMMATIKA NAZYWAETSQ L-ATRIBUTNOJ, ESLI L@BOJ NASLEDUEMYJ ATRIBUT L@BOGO SIMWOLA Xj IZ PRAWOJ ˆASTI KAVDOGO PRAWILA X0 → X1 X2 ... Xn GRAMMATIKI ZAWISIT TOLXKO OT (1) ATRIBUTOW SIMWOLOW X1 , X2 , . . . , Xj−1 , NAHODQ]IHSQ W PRAWILE SLEWA OT Xj , I (2) NASLEDUEMYH ATRIBUTOW SIMWOLA X0 . zAMETIM, ˆTO KAVDAQ S-ATRIBUTNAQ GRAMMATIKA QWLQETSQ L-ATRIBUTNOJ. wSE ATRIBUTY NA L@BOM DEREWE DLQ L-ATRIBUTNOJ GRAMMATIKI MOGUT BYTX WYˆISLENY ZA ODIN OBHOD DEREWA SWERHU-WNIZ SLEWA-NAPRAWO. tAKIM OBRAZOM, WYˆISLENIE ATRIBUTOW MOVNO OSU]ESTWLQTX PARALLELXNO S NISHODQ]IM SINTAKSIˆESKIM ANALIZOM, NAPRIMER, LL(1)-ANALIZOM ILI REKURSIWNYM SPUSKOM. w SLUˆAE REKURSIWNOGO SPUSKA W KAVDOJ FUNKCII, SOOTWETSTWU@]EJ NETERMINALU, NADO OPREDELITX FORMALXNYE PARAMETRY, PEREDAWAEMYE PO ZNAˆENI@, DLQ NASLEDUEMYH ATRIBUTOW, I FORMALXNYE PARAMETRY, PEREDAWAEMYE PO SSYLKE, DLQ SINTEZIRUEMYH ATRIBUTOW. w KAˆESTWE PRIMERA RASSMOTRIM REALIZACI@ ATRIBUTNOJ GRAMMATIKI IZ PRIMERA 5.5 (NETRUDNO WIDETX, ˆTO GRAMMATIKA QWLQETSQ L-ATRIBUTNOJ). void int_part(float * V0, int * P0)
90
glawa 5. —lementy teorii perewoda
{if (Map[InSym]==Digit) { int I=InSym; InSym=getInSym(); float V2; int P2; int_part(&V2,&P2); *V0=I*exp(P2*ln(10))+V2; *P0=P2+1; else {*V0=0; *P0=0; } } void fract_part(float * V0, int P0) {if (Map[InSym]==Digit) { int I=InSym; InSym=getInSym(); float V2; int P2=P0+1; fract_part(&V2,P2); *V0=I*exp(-P0*ln(10))+V2; else {*V0=0; } } void number() { float V1,V3,V0; int P; int_part(&V1,&P); if (InSym!=’.’) error(); fract_part(&V3,1); V0=V1+V3; }
5.3.3
qZYK OPISANIQ ATRIBUTNYH GRAMMATIK
fORMALIZM ATRIBUTNYH GRAMMATIK OKAZALSQ OˆENX UDOBNYM SREDSTWOM DLQ OPISANIQ SEMANTIKI QZYKOW PROGRAMMIROWANIQ. wMESTE S TEM WYQSNILOSX, ˆTO REALIZACIQ WYˆISLITELEJ DLQ ATRIBUTNYH GRAMMATIK OB]EGO WIDA STALKIWAETSQ S BOLX[IMI TRUDNOSTQMI. w SWQZI S “TIM BYLO SDELANO MNOVESTWO POPYTOK RASSMATRIWATX TE ILI INYE KLASSY ATRIBUTNYH GRAMMATIK, OBLADA@]IH “HORO[IMI” SWOJSTWAMI. k ˆISLU TAKIH SWOJSTW OTNOSQTSQ PREVDE WSEGO PROSTOTA ALGORITMA PROWERKI ATRIBUTNOJ GRAMMATIKI NA ZACIKLENNOSTX I PROSTOTA ALGORITMA WYˆISLENIQ ATRIBUTOW DLQ ATRIBUTNYH GRAMMATIK DANNOGO KLASSA. aTRIBUTNYE GRAMMATIKI ISPOLXZOWALISX DLQ OPISANIQ SEMANTIKI QZYKOW PROGRAMMIROWANIQ I BYLO SOZDANO NESKOLXKO SISTEM AWTOMATIZACII RAZRABOTKI TRANSLQTOROW, OSNOWANNYH NA FORMALIZME ATRIBUTNYH GRAM-
5.3. atributnye grammatiki
91
MATIK. oPYT IH ISPOLXZOWANIQ POKAZAL, ˆTO “ˆISTYJ” ATRIBUTNYJ FORMALIZM MOVET BYTX USPE[NO PRIMENEN DLQ OPISANIQ SEMANTIKI QZYKA, NO EGO ISPOLXZOWANIE WYZYWAET TRUDNOSTI PRI SOZDANII TRANSLQTORA. —TI TRUDNOSTI SWQZANY KAK S SAMIM FORMALIZMOM, TAK I S NEKOTORYMI TEHNOLOGIˆESKIMI PROBLEMAMI. k TRUDNOSTQM PERWOGO RODA MOVNO OTNESTI NESOOTWETSTWIE ˆISTO FUNKCIONALXNOJ PRIRODY ATRIBUTNOGO WYˆISLITELQ I SWQZANNOJ S NEJ NEUPORQDOˆENNOSTX@ PROCESSA WYˆISLENIQ ATRIBUTOW (ˆTO W ZNAˆITELXNOJ STEPENI QWLQETSQ PREIMU]ESTWOM “TOGO FORMALIZMA) I UPORQDOˆENNOSTX@ “LEMENTOW PROGRAMMY. —TO NESOOTWETSTWIE WEDET K TOMU, ˆTO PRIHODITSQ IDTI NA ISKUSSTWENNYE PRIEMY DLQ IH SOˆETANIQ. tEHNOLOGIˆESKIE TRUDNOSTI SWQZANY S “FFEKTIWNOSTX@ TRANSLQTOROW, POLUˆENNYH S POMO]X@ ATRIBUTNYH SISTEM. kAK PRAWILO, KAˆESTWO TAKIH TRANSLQTOROW DOWOLXNO NIZKO IZ-ZA BOLX[IH RASHODOW PAMQTI, NE“FFEKTIWNOSTI ISKUSSTWENNYH PRIEMOW, O KOTORYH BYLO SKAZANO WY[E. uˆITYWAQ “TO, MY BUDEM WESTI DALXNEJ[EE IZLOVENIE NA QZYKE, SOˆETA@]EM OSOBENNOSTI ATRIBUTNOGO FORMALIZMA I OBYˆNOGO QZYKA PROGRAMMIROWANIQ, W KOTOROM PREDPOLAGAETSQ NALIˆIE OPERATOROW, A ZNAˆIT, I WOZMOVNOSTX UPRAWLENIQ PORQDKOM ISPOLNENIQ OPERATOROW. —TOT PORQDOK MOVET BYTX PRIWQZAN K OBHODU ATRIBUTIROWANNOGO DEREWA RAZBORA SWERHU WNIZ SLEWA NAPRAWO. ˜TO KASAETSQ GRAMMATIKI WHODNOGO QZYKA, TO MY NE BUDEM PREDPOLAGATX PRINADLEVNOSTX EE OPREDELENNOMU KLASSU (NAPRIMER, LL(1) ILI LR(1)). bUDEM SˆITATX, ˆTO DEREWO RAZBORA WHODNOJ PROGRAMMY UVE POSTROENO KAK REZULXTAT SINTAKSIˆESKOGO ANALIZA I ATRIBUTNYE WYˆISLENIQ OSU]ESTWLQ@TSQ W REZULXTATE OBHODA “TOGO DEREWA. tAKIM OBRAZOM, WHODNAQ GRAMMATIKA ATRIBUTNOGO WYˆISLITELQ MOVET BYTX DAVE NEODNOZNAˆNOJ, ˆTO NE WLIQET NA PROCESS ATRIBUTNYH WYˆISLENIJ. pRI ZAPISI SINTAKSISA MY BUDEM ISPOLXZOWATX RAS[IRENNU@ bnf. —LEMENT PRAWOJ ˆASTI SINTAKSIˆESKOGO PRAWILA, ZAKL@ˆENNYJ W SKOBKI [ ], MOVET OTSUTSTWOWATX. —LEMENT PRAWOJ ˆASTI SINTAKSIˆESKOGO PRAWILA, ZAKL@ˆENNYJ W SKOBKI ( ), OZNAˆAET WOZMOVNOSTX POWTORENIQ ODIN ILI BOLEE RAZ. —LEMENT PRAWOJ ˆASTI SINTAKSIˆESKOGO PRAWILA, ZAKL@ˆENNYJ W SKOBKI [()], OZNAˆAET WOZMOVNOSTX POWTORENIQ NOLX ILI BOLEE RAZ. w SKOBKAH [ ] ILI [()] MOVET UKAZYWATXSQ RAZDELITELX KONSTRUKCIJ. nIVE DAN SINTAKSIS QZYKA OPISANIQ ATRIBUTNYH GRAMMATIK. pRIWEDEN TOLXKO SINTAKSIS KONSTRUKCIJ, SOBSTWENNO OPISYWA@]IH ATRIBUTNYE WYˆISLENIQ. sINTAKSIS OBYˆNYH WYRAVENIJ I OPERATOROW NE PRIWODITSQ – ON OSNOWYWAETSQ NA sI. aTRIBUTNAQ GRAMMATIKA ::= ’ALPHABET’ ( oPISANIEnETERMINALA ) ( pRAWILO ) oPISANIEnETERMINALA ::= iMQnETERMINALA ’::’ [( oPISANIEaTRIBUTOW / ’;’)] ’.’ oPISANIEaTRIBUTOW ::= tIP ( iMQaTRIBUTA / ’,’) pRAWILO ::= ’RULE’ sINTAKSIS ’SEMANTICS’ sEMANTIKA ’.’ sINTAKSIS ::= iMQnETERMINALA ’::=’ pRAWAQ˜ASTX pRAWAQ˜ASTX ::= [( —LEMENTpRAWOJ˜ASTI )]
92
glawa 5. —lementy teorii perewoda
—LEMENTpRAWOJ˜ASTI ::= iMQnETERMINALA | tERMINAL | ’(’ nETERMINAL [ ’/’ tERMINAL ] ’)’ | ’[’ nETERMINAL ’]’ | ’[(’ nETERMINAL [ ’/’ tERMINAL ] ’)]’ sEMANTIKA ::= [(lOKALXNOEoB˙QWLENIE / ’;’)] [( sEMANTIˆESKOEdEJSTWIE / ’;’)] sEMANTIˆESKOEdEJSTWIE ::= pRISWAIWANIE | [ mETKA ] oPERATOR pRISWAIWANIE ::= pEREMENNAQ ’:=’ wYRAVENIE pEREMENNAQ ::= lOKALXNAQpEREMENNAQ | aTRIBUT aTRIBUT ::= lOKALXNYJaTRIBUT | gLOBALXNYJaTRIBUT lOKALXNYJaTRIBUT ::= iMQaTRIBUTA ’’ gLOBALXNYJaTRIBUT ::= iMQaTRIBUTA ’’ mETKA ::= cELOE ’:’ | cELOE ’e’ ’:’ | cELOE ’a’ ’:’ oPERATOR ::= uSLOWNYJ | oPERATORpROCEDURY | cIKLpOmNOVESTWU | pROSTOJcIKL | cIKLsuSLOWIEMoKONˆANIQ oPISANIE ATRIBUTNOJ GRAMMATIKI SOSTOIT IZ RAZDELA OPISANIQ ATRIBUTOW I RAZDELA PRAWIL. rAZDEL OPISANIQ ATRIBUTOW OPREDELQET SOSTAW ATRIBUTOW DLQ KAVDOGO SIMWOLA GRAMMATIKI I TIP KAVDOGO ATRIBUTA. pRAWILA SOSTOQT IZ SINTAKSIˆESKOJ I SEMANTIˆESKOJ ˆASTI. w SINTAKSIˆESKOJ ˆASTI ISPOLXZUETSQ RAS[IRENNAQ bnf. sEMANTIˆESKAQ ˆASTX PRAWILA SOSTOIT IZ LOKALXNYH OB˙QWLENIJ I SEMANTIˆESKIH DEJSTWIJ. w KAˆESTWE SEMANTIˆESKIH DEJSTWIJ DOPUSKA@TSQ KAK ATRIBUTNYE PRISWAIWANIQ, TAK I SOSTAWNYE OPERATORY. mETKA W SEMANTIˆESKOJ ˆASTI PRAWILA PRIWQZYWAET WYPOLNENIE OPERATORA K OBHODU DEREWA RAZBORA SWERHU-WNIZ SLEWA NAPRAWO. kONSTRUKCIQ i : OPERATOR OZNAˆAET, ˆTO OPERATOR DOLVEN BYTX WYPOLNEN SRAZU POSLE OBHODA i-J KOMPONENTY PRAWOJ ˆASTI. kONSTRUKCIQ i E : OPERATOR OZNAˆAET, ˆTO OPERATOR DOLVEN BYTX WYPOLNEN, TOLXKO ESLI POROVDENIE i-J KOMPONENTY PRAWOJ ˆASTI PUSTO. kONSTRUKCIQ i A : OPERATOR OZNAˆAET, ˆTO OPERATOR DOLVEN BYTX WYPOLNEN POSLE RAZBORA KAVDOGO POWTORENIQ i-J KOMPONENTY PRAWOJ ˆASTI (IMEETSQ W WIDU KONSTRUKCIQ POWTORENIQ). kAVDOE PRAWILO MOVET IMETX LOKALXNYE OPREDELENIQ (TIPOW I PEREMENNYH). w FORMULAH ISPOLXZU@TSQ KAK ATRIBUTY SIMWOLOW DANNOGO PRAWILA (LOKALXNYE ATRIBUTY) I W “TOM SLUˆAE SOOTWETSTWU@]IE SIMWOLY UKAZYWA@TSQ NOMERAMI W PRAWILE (0 – DLQ SIMWOLA LEWOJ ˆASTI, 1 – DLQ PERWOGO
5.3. atributnye grammatiki
93
SIMWOLA PRAWOJ ˆASTI, 2 – DLQ WTOROGO SIMWOLA PRAWOJ ˆASTI I T.D.), TAK I ATRIBUTY SIMWOLOW PREDKOW LEWOJ ˆASTI PRAWILA (GLOBALXNYE ATRIBUTY). w “TOM SLUˆAE SOOTWETSTWU@]IJ SIMWOL UKAZYWAETSQ IMENEM NETERMINALA. tAKIM OBRAZOM, NA DEREWE OBRAZU@TSQ OBLASTI WIDIMOSTI ATRIBUTOW: ATRIBUT SIMWOLA IMEET OBLASTX WIDIMOSTI, SOSTOQ]U@ IZ PRAWILA, W KOTOROE SIMWOL WHODIT W PRAWU@ ˆASTX, PL@S WSE PODDEREWO, KORNEM KOTOROGO QWLQETSQ SIMWOL, ZA ISKL@ˆENIEM PODDEREWXEW – POTOMKOW TOGO VE SIMWOLA W “TOM PODDEREWE. zNAˆENIE TERMINALXNOGO SIMWOLA DOSTUPNO ˆEREZ ATRIBUT VAL SOOTWETSTWU@]EGO TIPA. pRIMER 5.9. aTRIBUTNAQ GRAMMATIKA IZ PRIMERA 5.5 ZAPISYWAETSQ SLEDU@]IM OBRAZOM: ALPHABET Num :: float V. Int :: float V; int P. Frac :: float V; int P. digit :: int VAL. RULE Num ::= Int ’.’ Frac SEMANTICS V=V+V; P=1. RULE Int ::= e SEMANTICS V=0; P=0. RULE Int ::= digit Int SEMANTICS V=VAL*10**P+V; P=P+1. RULE Frac ::= e SEMANTICS V=0. RULE Frac ::= digit Frac SEMANTICS V=VAL*10**(-P)+V; P=P+1.
94
glawa 5. —lementy teorii perewoda
gLAWA 6
pROWERKA KONTEKSTNYH USLOWIJ 6.1
oPISANIE OBLASTEJ WIDIMOSTI I BLOˆNOJ STRUKTURY
zADAˆEJ KONTEKSTNOGO ANALIZA QWLQETSQ USTANOWLENIE SWOJSTW OB˙EKTOW I IH ISPOLXZOWANIQ. nAIBOLEE ˆASTO RE[AEMOJ ZADAˆEJ QWLQETSQ OPREDELENIE SU]ESTWOWANIQ OB˙EKTA I SOOTWETSTWIQ EGO ISPOLXZOWANIQ KONTEKSTU, ˆTO OSU]ESTWLQETSQ S POMO]X@ ANALIZA TIPA OB˙EKTA. pOD KONTEKSTOM ZDESX PONIMAETSQ WSQ SOWOKUPNOSTX SWOJSTW TEKU]EJ TOˆKI PROGRAMMY, NAPRIMER MNOVESTWO DOSTUPNYH OB˙EKTOW, TIP WYRAVENIQ I T.D. tAKIM OBRAZOM, NEOBHODIMO HRANITX OB˙EKTY I IH TIPY, UMETX NAHODITX “TI OB˙EKTY I OPREDELQTX IH TIPY, OPREDELQTX HARAKTERISTIKI KONTEKSTA. sOWOKUPNOSTX DOSTUPNYH W DANNOJ TOˆKE OB˙EKTOW BUDEM NAZYWATX SREDOJ. oBYˆNO SREDA PROGRAMMY SOSTOIT IZ ˆASTIˆNO UPORQDOˆENNOGO NABORA KOMPONENT E = {DS1 , DS2 , ... , DSn } kAVDAQ KOMPONENTA – “TO MNOVESTWO OB˙QWLENIJ, PREDSTAWLQ@]IH SOBOJ PARY (IMQ, TIP): DSi = {(IMQj , TIPj ) | 1 6 j 6 ki } GDE POD TIPOM BUDEM PODRAZUMEWATX POLNOE OPISANIE SWOJSTW OB˙EKTA (OB˙EKTOM, W ˆASTNOSTI, MOVET BYTX SAMO OPISANIE TIPA). kOMPONENTY OBRAZU@T DEREWO, SOOTWETSTWU@]EE “TOMU ˆASTIˆNOMU PORQDKU. ˜ASTIˆNYJ PORQDOK MEVDU KOMPONENTAMI OBYˆNO OPREDELQETSQ STATIˆESKOJ WLOVENNOSTX@ KOMPONENT W PROGRAMME. —TA WLOVENNOSTX MOVET SOOTWETSTWOWATX BLOKAM, PROCEDURAM ILI KLASSAM PROGRAMMY (RIS. 6.1). kOMPONENTY SREDY MOGUT BYTX IMENOWANY. pOISK W SREDE OBYˆNO WEDETSQ S 95
96
glawa 6. prowerka kontekstnyh uslowij
!""
rIS. 6.1:
UˆETOM UPORQDOˆENNOSTI KOMPONENT. sREDA MOVET WKL@ˆATX W SEBQ KAK KOMPONENTY, POLUˆENNYE PRI TRANSLQCII “TEKU]EGO” TEKSTA PROGRAMMY, TAK I “WNE[NIE” (NAPRIMER, RAZDELXNO KOMPILIROWANNYE) KOMPONENTY. dLQ OBOZNAˆENIQ UˆASTKOW PROGRAMMY, W KOTORYH DOSTUPNY TE ILI INYE OPISANIQ, ISPOLXZU@TSQ PONQTIQ OBLASTI DEJSTWIQ I OBLASTI WIDIMOSTI. oBLASTX@ DEJSTWIQ OPISANIQ QWLQETSQ PROCEDURA (BLOK), SODERVA]AQ OPISANIE, SO WSEMI WHODQ]IMI W NEE (PODˆINENNYMI PO DEREWU) PROCEDURAMI (BLOKAMI). oBLASTX@ WIDIMOSTI OPISANIQ NAZYWAETSQ ˆASTX OBLASTI DEJSTWIQ, IZ KOTOROJ ISKL@ˆENY TE PODOBLASTI, W KOTORYH PO TEM ILI INYM PRIˆINAM OPISANIE NEDOSTUPNO, NAPRIMER, ONO PEREKRYTO DRUGIM OPISANIEM. w RAZNYH QZYKAH PONQTIQ OBLASTI DEJSTWIQ I OBLASTI WIDIMOSTI UTOˆNQ@TSQ PO-RAZNOMU. oBYˆNYMI OPERACIQMI PRI RABOTE SO SREDOJ QWLQ@TSQ: – WKL@ˆITX OB˙EKT W KOMPONENTU SREDY; – NAJTI OB˙EKT W SREDE I POLUˆITX DOSTUP K EGO OPISANI@; – OBRAZOWATX W SREDE NOWU@ KOMPONENTU, OPREDELENNYM OBRAZOM SWQZANNU@ S OSTALXNYMI; – UDALITX KOMPONENTU IZ SREDY. sREDA SOSTOIT IZ OTDELXNYH OB˙EKTOW, REALIZUEMYH KAK ZAPISI (W DALXNEJ[EM OPISANII MY BUDEM ISPOLXZOWATX IMQ TElement DLQ IMENI TIPA “TOJ ZAPISI). sOSTAW POLEJ ZAPISI, WOOB]E GOWORQ, ZAWISIT OT OPISYWAEMOGO OB˙EKTA (TIP, PEREMENNAQ I T.D.), NO ESTX POLQ, WHODQ]IE W ZAPISX DLQ L@BOGO OB˙EKTA: TObject Object – KATEGORIQ OB˙EKTA (TIP, PEREMENNAQ, PROCEDURA I T.D.); TMode Mode – WID OB˙EKTA: CELYJ, MASSIW, ZAPISX I T.D.; TName Name – IMQ OB˙EKTA; TType Type – UKAZATELX NA OPISANIE TIPA.
6.2. zanesenie w sredu i poisk ob¨ektow
6.2
97
zANESENIE W SREDU I POISK OB˙EKTOW
rASSMOTRIM SHEMU REALIZACII PROSTOJ BLOˆNOJ STRUKTURY, ANALOGIˆNOJ PROCEDURAM W pASKALE ILI BLOKAM W sI. kAVDYJ BLOK MOVET IMETX SWOJ NABOR OPISANIJ. pROGRAMMA SOSTOIT IZ OSNOWNOGO IMENOWANNOGO BLOKA, W KOTOROM IME@TSQ OPISANIQ I OPERATORY. oPISANIQ SOSTOQT IZ OPISANIJ TIPOW I OB˙QWLENIJ PEREMENNYH. w KAˆESTWE TIPA MOVET ISPOLXZOWATXSQ CELOˆISLENNYJ TIP I TIP MASSIWA. dWA TIPA T1 I T2 SˆITA@TSQ “KWIWALENTNYMI, ESLI IMEETSQ OPISANIE T1=T2 (ILI T2=T1). oPERATORAMI SLUVAT OPERATORY PRISWAIWANIQ WIDA pEREMENNAQ1=pEREMENNAQ2 I BLOKI. pEREMENNAQ – “TO LIBO PROSTO IDENTIFIKATOR, LIBO WYBORKA IZ MASSIWA. oPERATOR PRISWAIWANIQ SˆITAETSQ PRAWILXNYM, ESLI TIPY PEREMENNYH LEWOJ I PRAWOJ ˆASTI “KWIWALENTNY. pRIMEROM PRAWILXNOJ PROGRAMMY MOVET SLUVITX program Example begin type T1=array 100 of array 200 of integer; T2=T1; var V1:T1; V2:T2; begin V1=V2; V2[1]=V1[2]; begin type T3=array 300 of T1; var V3:T3; V3[50]=V1; end end end. rASSMATRIWAEMOE PODMNOVESTWO QZYKA MOVET BYTX POROVDENO SLEDU@]EJ GRAMMATIKOJ (ZAPISX W RAS[IRENNOJ bnf): Prog ::= ’program’ Ident Block ’.’ Block ::= ’begin’ [( Declaration )] [ (Statement) ] ’end’ Declaration ::= ’type’ ( Type_Decl ) Type_Decl ::= Ident ’=’ Type_Defin Type_Defin ::= ’ARRAY’ Index ’OF’ Type_Defin Type_Defin ::= Type_Use Type_Use ::= Ident Declaration ::= ’var’ ( Var_Decl ) Var_Decl ::= Ident_List ’:’ Type_Use ’;’ Ident_List ::= ( Ident / ’,’ ) Statement ::= Block ’;’ Statement ::= Variable ’=’ Variable ’;’ Variable ::= Ident Access
98
glawa 6. prowerka kontekstnyh uslowij
Access ::= ’[’ Expression ’]’ Access Access ::= dLQ REALIZACII NEKOTORYH ATRIBUTOW (W ˆASTNOSTI SREDY, SPISKA IDENTIFIKATOROW I T.D.) W KAˆESTWE TIPOW DANNYH MY BUDEM ISPOLXZOWATX RAZLIˆNYE MNOVESTWA. mNOVESTWO MOVET BYTX UPORQDOˆENNYM ILI NEUPORQDOˆENNYM, KL@ˆEWYM ILI PROSTYM. —LEMENTOM KL@ˆEWOGO MNOVESTWA MOVET BYTX ZAPISX, ODNIM IZ POLEJ KOTOROJ QWLQETSQ KL@ˆ: SETOF T – PROSTOE NEUPORQDOˆENNOE MNOVESTWO OB˙EKTOW TIPA T; KEY K SETOF T – KL@ˆEWOE NEUPORQDOˆENNOE MNOVESTWO OB˙EKTOW TIPA T S KL@ˆOM TIPA K; LISTOF T – PROSTOE UPORQDOˆENNOE MNOVESTWO OB˙EKTOW TIPA T; KEY K LISTOF T – KL@ˆEWOE UPORQDOˆENNOE MNOVESTWO OB˙EKTOW TIPA T S KL@ˆOM TIPA K; nAD OB˙EKTAMI TIPA MNOVESTWA OPREDELENY SLEDU@]IE OPERACII: Init(S) – SOZDATX I PROINICIALIZIROWATX PEREMENNU@ S; Include(V,S) – WKL@ˆITX OB˙EKT V W MNOVESTWO S; ESLI MNOVESTWO UPORQDOˆENNOE, TO WKL@ˆENIE OSU]ESTWLQETSQ W KAˆESTWE POSLEDNEGO “LEMENTA; Find(K,S) – WYDATX UKAZATELX NA OB˙EKT S KL@ˆOM K WO MNOVESTWE S I NIL, ESLI OB˙EKT S TAKIM KL@ˆOM NE NAJDEN. iMEETSQ SPECIALXNYJ OPERATOR CIKLA, PROBEGA@]IJ “LEMENTY MNOVESTWA: for (V in S) oPERATOR; pEREMENNAQ V PROBEGAET WSE ZNAˆENIQ MNOVESTWA. eSLI MNOVESTWO UPORQDOˆENO, TO “LEMENTY PROBEGA@TSQ W “TOM PORQDKE, ESLI NET – W PROIZWOLXNOM PORQDKE. sREDA PREDSTAWLQET SOBOJ KL@ˆEWOE MNOVESTWO S KL@ˆOM – IMENEM OB˙EKTA. iDENTIFIKATORY IME@T TIP TName. oBOZNAˆENIE W POZICII TIPA – “TO UKAZATELX NA WER[INU TIPA nETERMINAL. oBOZNAˆENIE W WYRAVENII – “TO WZQTIE ZNAˆENIQ UKAZATELQ NA BLIVAJ[U@ WER[INU WWERH PO DEREWU RAZBORA, POMEˆENNU@ SOOTWETSTWU@]IM NETERMINALOM. dLQ REALIZACII SREDY KAVDYJ NETERMINAL Block IMEET ATRIBUT Env. dLQ OBESPEˆENIQ WOZMOVNOSTI PROSMATRIWATX KOMPONENTY SREDY W SOOTWETSTWII S WLOVENNOSTX@ BLOKOW KAVDYJ NETERMINAL Block IMEET ATRIBUT Pred – UKAZATELX NA OHWATYWA@]IJ BLOK. kROME TOGO, SREDA BLOKA KORNQ DEREWA (NETERMINAL Prog) SODERVIT WSE PREDOPREDELENNYE OPISANIQ (RIS. 6.2). —TO ZAPOLNENIE REALIZUETSQ PROCEDUROJ PreDefine. aTRIBUT Pred BLOKA KORNEWOJ KOMPONENTY IMEET ZNAˆENIE NULL. aTRIBUTNAQ REALIZACIQ WYGLQDIT SLEDU@]IM OBRAZOM.
6.2. zanesenie w sredu i poisk ob¨ektow
Env
Env
Env
Env
Env
Env
Env
rIS. 6.2:
// oPISANIE ATRIBUTOW ALPHABET Prog:: KEY TName SETOF TElement Env. // kORNEWAQ KOMPONENTA, SODERVA]AQ PREDOPREDELENNYE OPISANIQ. Block:: KEY TName SETOF TElement Env; Pred. Ident_List:: SETOF TName Ident_Set. // Ident_Set - SPISOK IDENTIFIKATOROW Type_Defin, Type_Use, Access, Expression:: TType ElementType. // ElementType - UKAZATELX NA OPISANIE TIPA Declaration, Var_Decl, Type_Decl::. Ident:: TName Val. Index:: int Val. // oPISANIE SINTAKSISIˆESKIH I SEMANTIˆESKIH PRAWIL RULE Prog ::= ’program’ Ident Block ’.’ SEMANTICS 0:{Init(Env); PreDefine(Env); Pred=NULL }. RULE Block ::= ’begin’ [( Declaration )] [ (Statement) ] ’end’
99
100
glawa 6. prowerka kontekstnyh uslowij
SEMANTICS 0: if (!=NULL){ Init(Env); Pred= }. RULE Declaration ::= ’type’ ( Type_Decl ). RULE Type_Decl ::= Ident ’=’ Type_Defin SEMANTICS TElement V; if (Find(Val,Env)!=NULL) Error("Identifier declared twice"); // iDENTIFIKATOR UVE OB˙QWLEN W BLOKE // w L@BOM SLUˆAE ZANOSITSQ NOWOE OPISANIE V.Name=Val; V.Object=TypeObject; V.Type=ElementType; Include(V,Env). RULE Type_Defin ::= ’ARRAY’ Index ’OF’ Type_Defin SEMANTICS ElementType=ArrayType(ElementType,Val). RULE Type_Defin ::= Type_Use SEMANTICS ElementType=ElementType. RULE Type_Use ::= Ident SEMANTICS TElement * PV; PV=FindObject(Val,,TypeObject,); ElementType=PV->Type. // w “TOM PRAWILE ANALIZIRUETSQ ISPOLXZU@]AQ POZICIQ // IDENTIFIKATORA TIPA. RULE Declaration ::= ’var’ ( Var_Decl ). RULE Var_Decl ::= Ident_List ’:’ Type_Use ’;’
6.2. zanesenie w sredu i poisk ob¨ektow SEMANTICS TElement V; TName N; for (N in Ident_Set){ // cIKL PO (NEUPORQDOˆENNOMU) SPISKU IDENTIFIKATOROW if (Find(N,Env)!=NULL) Error("Identifier declared twice"); // iDENTIFIKATOR UVE OB˙QWLEN W BLOKE // w L@BOM SLUˆAE ZANOSITSQ NOWOE OPISANIE V.Name=N; V.Object=VarObject; V.Type=ElementType; Include(V,Env) }. // N - RABOˆAQ PEREMENNAQ DLQ “LEMENTOW SPISKA. dLQ KAVDOGO // IDENTIFIKATORA IZ MNOVESTWA IDENTIFIKATOROW Ident_Set // SFORMIROWATX OB˙EKT-PEREMENNU@ W TEKU]EJ KOMPONENTE SREDY // S SOOTWETSTWU@]IMI HARAKTERISTIKAMI. RULE Ident_List ::= ( Ident /’,’ ) SEMANTICS 0:Init(Ident_Set); 1A:Include(Val,Ident_Set). RULE Statement ::= Block ’;’. RULE Statement ::= Variable ’=’ Variable ’;’ SEMANTICS if (ElementType!=NULL) && (ElementType!=NULL) && (ElementType!=ElementType) Error("Incompatible Expression Types"). RULE Variable ::= Ident Access SEMANTICS TElement * PV; PV=FindObject(Val,,VarObject,); if (PV==NULL){ Error("Identifier used is not declared"); ElementType=NULL } else ElementType=PV->Type.
101
102
glawa 6. prowerka kontekstnyh uslowij
RULE Access ::= ’[’ Expression ’]’ Access SEMANTICS ElementType=ArrayElementType(ElementType, ElementType). RULE Access ::= SEMANTICS ElementType=ElementType. pOISK W SREDE OSU]ESTWLQETSQ SLEDU@]EJ FUNKCIEJ: TElement * FindObject(TName Ident, BlockPointer, TObject Object, Prog) { TElement * ElementPointer; // pOLUˆITX UKAZATELX NA BLIVAJ[IJ OHWATYWA@]IJ BLOK do{ ElementPointer=Find(Ident, BlockPointer->Env); BlockPointer=BlockPointer->Pred; } while (ElementPointer==NULL)&&(BlockPointer!=NULL); // iSKATX DO MOMENTA, KOGDA LIBO NAJDEM NUVNYJ IDENTIFIKATOR, // LIBO DOJDEM DO KORNEWOJ KOMPONENTY if (ElementPointer==NULL)&&(BlockPointer==NULL) // dO[LI DO KORNEWOJ KOMPONENTY I E]E NE NA[LI IDENTIFIKATORA // nAJTI OB˙EKT SREDI PREDOPREDELENNYH ElementPointer=Find(Ident, Prog->Env); if (ElementPointer!=NULL) // nA[LI OB˙EKT S DANNYM IDENTIFIKATOROM // LIBO W OˆEREDNOM BLOKE, LIBO SREDI PREDOPREDELENNYH if (ElementPointer->Object!=Object){ // pROWERITX, IMEET LI NAJDENNYJ OB˙EKT // NUVNU@ KATEGORI@ Error("Object of specified category is not found"); ElementPointer=NULL; } else // oB˙EKT NE NAJDEN Error("Object is not found"); return ElementPointer; } pEREMENNAQ BlockPointer – UKAZATELX NA BLIVAJ[IJ OHWATYWA@]IJ BLOK. pEREHODQ OT BLOKA K BLOKU, I]EM OB˙EKT W EGO SREDE. eSLI NE NA[LI, TO PEREHODIM K OHWATYWA@]EMU BLOKU. eSLI DO[LI DO KORNEWOJ KOMPONEN-
6.2. zanesenie w sredu i poisk ob¨ektow
103
TY, PYTAEMSQ NAJTI OB˙EKT SREDI PREDOPREDELENNYH OB˙EKTOW. eSLI OB˙EKT NA[LI, NADO UBEDITXSQ, ˆTO ON IMEET NUVNU@ KATEGORI@. fUNKCIQ ArrayElementType(TType EntryType, TType ExprType) OSU]ESTWLQET PROWERKU DOPUSTIMOSTI PRIMENENIQ OPERACII WZQTIQ INDEKSA K PEREMENNOJ I WOZWRA]AET TIP “LEMENTA MASSIWA. fUNKCIQ ArrayType(TType EntryType, int Val) WOZWRA]AET OPISANIE TIPA – MASSIWA S TIPOM “LEMENTA EntryType I DIAPAZONOM INDEKSA Val.
104
glawa 6. prowerka kontekstnyh uslowij
gLAWA 7
oRGANIZACIQ TABLIC SIMWOLOW w PROCESSE RABOTY KOMPILQTOR HRANIT INFORMACI@ OB OB˙EKTAH PROGRAMMY W SPECIALXNYH TABLICAH SIMWOLOW. kAK PRAWILO, INFORMACIQ O KAVDOM OB˙EKTE SOSTOIT IZ DWUH OSNOWNYH “LEMENTOW: IMENI OB˙EKTA I OPISANIQ OB˙EKTA. iNFORMACIQ OB OB˙EKTAH PROGRAMMY DOLVNA BYTX ORGANIZOWANA TAKIM OBRAZOM, ˆTOBY POISK EE BYL PO WOZMOVNOSTI BYSTREE, A TREBUEMAQ PAMQTX PO WOZMOVNOSTI MENX[E. kROME TOGO, SO STORONY QZYKA PROGRAMMIROWANIQ MOGUT BYTX DOPOLNITELXNYE TREBOWANIQ K ORGANIZACII INFORMACII. iMENA MOGUT IMETX OPREDELENNU@ OBLASTX WIDIMOSTI. nAPRIMER, POLE ZAPISI DOLVNO BYTX UNIKALXNO W PREDELAH STRUKTURY (ILI UROWNQ STRUKTURY), NO MOVET SOWPADATX S IMENEM OB˙EKTA WNE ZAPISI (ILI DRUGOGO UROWNQ ZAPISI). w TO VE WREMQ IMQ POLQ MOVET OTKRYWATXSQ OPERATOROM PRISOEDINENIQ, I TOGDA MOVET WOZNIKNUTX KONFLIKT IMEN (ILI NEODNOZNAˆNOSTX W TRAKTOWKE IMENI). eSLI QZYK IMEET BLOˆNU@ STRUKTURU, TO NEOBHODIMO OBESPEˆITX TAKOJ SPOSOB HRANENIQ INFORMACII, ˆTOBY, WO-PERWYH, PODDERVIWATX BLOˆNYJ MEHANIZM WIDIMOSTI, A WO-WTORYH – “FFEKTIWNO OSWOBOVDATX PAMQTX PRI WYHODE IZ BLOKA. w NEKOTORYH QZYKAH (NAPRIMER, aDE) ODNOWREMENNO (W ODNOM BLOKE) MOGUT BYTX WIDIMY NESKOLXKO OB˙EKTOW S ODNIM IMENEM, W DRUGIH TAKAQ SITUACIQ NEDOPUSTIMA. mY RASSMOTRIM NEKOTORYE OSNOWNYE SPOSOBY ORGANIZACII TABLIC SIMWOLOW W KOMPILQTORE: TABLICY IDENTIFIKATOROW, TABLICY RASSTANOWKI, DWOIˆNYE DEREWXQ I REALIZACI@ BLOˆNOJ STRUKTURY.
7.1
tABLICY IDENTIFIKATOROW
kAK UVE BYLO SKAZANO, INFORMACI@ OB OB˙EKTE OBYˆNO MOVNO RAZDELITX NA DWE ˆASTI: IMQ (IDENTIFIKATOR) I OPISANIE. eSLI DLINA IDENTIFIKATORA OGRANIˆENA (ILI IMQ IDENTIFICIRUETSQ PO OGRANIˆENNOMU ˆISLU PERWYH 105
glawa 7. organizaciq tablic simwolow
106
SIMWOLOW IDENTIFIKATORA), TO TABLICA SIMWOLOW MOVET BYTX ORGANIZOWANA W WIDE PROSTOGO MASSIWA STROK FIKSIROWANNOJ DLINY, KAK “TO IZOBRAVENO NA RIS. 7.1. nEKOTORYE WHODY MOGUT BYTX ZANQTY, NEKOTORYE – SWOBODNY.
rIS. 7.1:
-./10243/5 671859: 2
!
"
#
$
%'& (
)
%'& (
#
*
)
+
%'& (
,
%'& (
•••
rIS. 7.2: qSNO, ˆTO, WO-PERWYH, RAZMER MASSIWA DOLVEN BYTX NE MENX[E ˆISLA IDENTIFIKATOROW, KOTORYE MOGUT REALXNO POQWITXSQ W PROGRAMME (W PROTIWNOM SLUˆAE WOZNIKAET PEREPOLNENIE TABLICY); WO-WTORYH, KAK PRAWILO, POTENCIALXNOE ˆISLO RAZLIˆNYH IDENTIFIKATOROW SU]ESTWENNO BOLX[E RAZMERA TABLICY.
7.2. tablicy rasstanowki
107
zAMETIM, ˆTO W BOLX[INSTWE QZYKOW PROGRAMMIROWANIQ SIMWOLXNOE PREDSTAWLENIE IDENTIFIKATORA MOVET IMETX PROIZWOLXNU@ DLINU. kROME TOGO, RAZLIˆNYE OB˙EKTY W ODNOJ ILI W RAZNYH OBLASTQH WIDIMOSTI MOGUT IMETX ODINAKOWYE IMENA, I NET BOLX[OGO SMYSLA ZANIMATX PAMQTX DLQ POWTORNOGO HRANENIQ IDENTIFIKATORA. tAKIM OBRAZOM, UDOBNO IMQ OB˙EKTA I EGO OPISANIE HRANITX PO OTDELXNOSTI. w “TOM SLUˆAE IDENTIFIKATORY HRANQTSQ W OTDELXNOJ TABLICE – TABLICE IDENTIFIKATOROW. w TABLICE SIMWOLOW VE HRANITSQ UKAZATELX NA SOOTWETSTWU@]IJ WHOD W TABLICU IDENTIFIKATOROW. tABLICU IDENTIFIKATOROW MOVNO ORGANIZOWATX, NAPRIMER, W WIDE SPLO[NOGO MASSIWA. iDENTIFIKATOR W MASSIWE ZAKANˆIWAETSQ KAKIM-LIBO SPECIALXNYM SIMWOLOM EOS (RIS. 7.2). wTOROJ WOZMOVNYJ WARIANT – W KAˆESTWE PERWOGO SIMWOLA IDENTIFIKATORA W MASSIW ZANOSITSQ EGO DLINA.
7.2
tABLICY RASSTANOWKI
oDNIM IZ “FFEKTIWNYH SPOSOBOW ORGANIZACII TABLICY SIMWOLOW QWLQETSQ TABLICA RASSTANOWKI (ILI HE[-TABLICA). pOISK W TAKOJ TABLICE MOVET BYTX ORGANIZOWAN METODOM POWTORNOJ RASSTANOWKI. sUTX EGO ZAKL@ˆAETSQ W SLEDU@]EM. tABLICA SIMWOLOW PREDSTAWLQET SOBOJ MASSIW FIKSIROWANNOGO RAZMERA N . iDENTIFIKATORY MOGUT HRANITXSQ KAK W SAMOJ TABLICE SIMWOLOW, TAK I W OTDELXNOJ TABLICE IDENTIFIKATOROW. oPREDELIM NEKOTORU@ FUNKCI@ h1 (PERWIˆNU@ FUNKCI@ RASSTANOWKI), OPREDELENNU@ NA MNOVESTWE IDENTIFIKATOROW I PRINIMA@]U@ ZNAˆENIQ OT 0 DO N − 1 (T.E. 0 6 h1 (id) 6 N − 1, GDE id – SIMWOLXNOE PREDSTAWLENIE IDENTIFIKATORA). tAKIM OBRAZOM, FUNKCIQ RASSTANOWKI SOPOSTAWLQET IDENTIFIKATORU NEKOTORYJ ADRES W TABLICE SIMWOLOW. pUSTX MY HOTIM NAJTI W TABLICE IDENTIFIKATOR id. eSLI “LEMENT TABLICY S NOMEROM h1 (id) NE ZAPOLNEN, TO “TO OZNAˆAET, ˆTO IDENTIFIKATORA W TABLICE NET. eSLI VE ZANQT, TO “TO E]E NE OZNAˆAET, ˆTO IDENTIFIKATOR id W TABLICU ZANESEN, POSKOLXKU (WOOB]E GOWORQ) MNOGO IDENTIFIKATOROW MOGUT IMETX ODNO I TO VE ZNAˆENIE FUNKCII RASSTANOWKI. dLQ TOGO ˆTOBY OPREDELITX, NA[LI LI MY NUVNYJ IDENTIFIKATOR, SRAWNIWAEM id S “LEMENTOM TABLICY h1 (id). eSLI ONI RAWNY – IDENTIFIKATOR NAJDEN, ESLI NET – NADO PRODOLVATX POISK DALX[E. dLQ “TOGO WYˆISLQETSQ WTORIˆNAQ FUNKCIQ RASSTANOWKI h 2 (h) (ZNAˆENIEM KOTOROJ OPQTX TAKI QWLQETSQ NEKOTORYJ ADRES W TABLICE SIMWOLOW). wOZMOVNY ˆETYRE WARIANTA: – “LEMENT TABLICY NE ZAPOLNEN (T.E. IDENTIFIKATORA W TABLICE NET), – IDENTIFIKATOR “LEMENTA TABLICY SOWPADAET S ISKOMYM (T.E. IDENTIFIKATOR NAJDEN), – ADRES “LEMENTA SOWPADAET S UVE PROSMOTRENNYM (T.E. TABLICA WSQ PROSMOTRENA I IDENTIFIKATORA NET)
108
glawa 7. organizaciq tablic simwolow
– PREDYDU]IE WARIANTY NE WYPOLNQ@TSQ, TAK ˆTO NEOBHODIMO PRODOLVATX POISK. dLQ PRODOLVENIQ POISKA PRIMENQETSQ SLEDU@]AQ FUNKCIQ RASSTANOWKI h3 (h2 ), h4 (h3 ) I T.D. kAK PRAWILO, hi = h2 DLQ i > 2. aRGUMENTOM FUNKCII h2 QWLQETSQ CELOE W DIAPAZONE [0, N − 1] I ONA MOVET BYTX BYTX USTROENA PO-RAZNOMU. pRIWEDEM TRI WARIANTA. 1) h2 (i) = (i + 1) mod N bERETSQ SLEDU@]IJ (CIKLIˆESKI) “LEMENT MASSIWA. —TOT WARIANT PLOH TEM, ˆTO ZANQTYE “LEMENTY “GRUPPIRU@TSQ”, OBRAZU@T POSLEDOWATELXNYE ZANQTYE UˆASTKI I W PREDELAH “TOGO UˆASTKA POISK STANOWITSQ PO-SU]ESTWU LINEJNYM. 2) h2 (i) = (i + k) mod N , GDE k I N WZAIMNO PROSTY. pO-SU]ESTWU “TO PREDYDU]IJ WARIANT, NO “LEMENTY NAKAPLIWA@TSQ NE W POSLEDOWATELXNYH “LEMENTAH, A “RAZNOSQTSQ”. 3) h2 (i) = (a ∗ i + c) mod N – “PSEWDOSLUˆAJNAQ POSLEDOWATELXNOSTX”. zDESX c I N DOLVNY BYTX WZAIMNO PROSTY, b = a−1 KRATNO p DLQ L@BOGO PROSTOGO p, QWLQ]EGOSQ DELITELEM N , b KRATNO 4, ESLI N KRATNO 4 [5]. pOISK W TABLICE RASSTANOWKI MOVNO OPISATX SLEDU@]EJ FUNKCIEJ: void Search(String Id,boolean * Yes,int * Point) {int H0=h1(Id), H=H0; while (1) {if (Empty(H)==NULL) {*Yes=false; *Point=H; return; } else if (IdComp(H,Id)==0) {*Yes=true; *Point=H; return; } else H=h2(H); if (H==H0) {*Yes=false; *Point=NULL; return; } } } fUNKCIQ IdComp(H,Id) SRAWNIWAET “LEMENT TABLICY NA WHODE H S IDENTIFIKATOROM I WYRABATYWAET 0, ESLI ONI RAWNY. fUNKCIQ Empty(H) WYRABATYWAET NULL, ESLI WHOD H PUST. fUNKCIQ Search PRISWAIWAET PARAMETRAM Yes I Pointer SOOTWETSTWENNO SLEDU@]IE ZNAˆENIQ : true, P – ESLI NA[LI TREBUEMYJ IDENTIFIKATOR, GDE P – UKAZATELX NA SOOTWETSTWU@]IJ “TOMU IDENTIFIKATORU WHOD W TABLICE,
7.3. tablicy rasstanowki so spiskami
109
false, NULL – ESLI ISKOMYJ IDENTIFIKATOR NE NAJDEN, PRIˆEM W TABLICE NET SWOBODNOGO MESTA, I false, P – ESLI ISKOMYJ IDENTIFIKATOR NE NAJDEN, NO W TABLICE ESTX SWOBODNYJ WHOD P. zANESENIE “LEMENTA W TABLICU MOVNO OSU]ESTWITX SLEDU@]EJ FUNKCIEJ: int Insert(String Id) {boolean Yes; int Point=-1; Search(Id,&Yes,&Point); if (!Yes && (Point!=NULL)) InsertId(Point,Id); return(Point); } zDESX FUNKCIQ InsertId(Point,Id) ZANOSIT IDENTIFIKATOR Id DLQ WHODA Point TABLICY.
7.3
tABLICY RASSTANOWKI SO SPISKAMI
tOLXKO ˆTO OPISANNAQ SHEMA STRADAET ODNIM NEDOSTATKOM – WOZMOVNOSTX@ PEREPOLNENIQ TABLICY. rASSMOTRIM EE MODIFIKACI@, KOGDA WSE “LEMENTY, IME@]IE ODINAKOWOE ZNAˆENIQ (PERWIˆNOJ) FUNKCII RASSTANOWKI, SWQZYWA@TSQ W SPISOK (PRI “TOM OTPADAET NEOBHODIMOSTX ISPOLXZOWANIQ FUNKCIJ hi DLQ i > 2). tABLICA RASSTANOWKI SO SPISKAMI – “TO MASSIW UKAZATELEJ NA SPISKI “LEMENTOW (RIS. 7.3). wNAˆALE TABLICA RASSTANOWKI PUSTA (WSE “LEMENTY IME@T ZNAˆENIE NULL). pRI POISKE IDENTIFIKATORA Id WYˆISLQETSQ FUNKCIQ RASSTANOWKI h(Id) I PROSMATRIWAETSQ SOOTWETSTWU@]IJ LINEJNYJ SPISOK. pOISK W TABLICE MOVET BYTX OPISAN SLEDU@]EJ FUNKCIEJ: struct Element {String IdentP; struct Element * Next; }; struct Element * T[N]; struct Element * Search(String Id) {struct Element * P; P=T[h(Id)]; while (1) {if (P==NULL) return(NULL); else if (IdComp(P->IdentP,Id)==0) return(P); else P=P->Next; } }
glawa 7. organizaciq tablic simwolow
110
0 • • • 9 • • •
id
id
20 • • •
id
• • •
id
32
id
id
N-1
rIS. 7.3:
rIS. 7.4: zANESENIE “LEMENTA W TABLICU MOVNO OSU]ESTWITX SLEDU@]EJ FUNKCIEJ:
7.4. funkcii rasstanowki
111
struct Element * Insert(String Id) {struct Element * P,H; P=Search(Id); if (P!=NULL) return(P); else {H=H(Id); P=alloc(sizeof(struct Element)); P->Next=T[H]; T[H]=P; P->IdentP=Include(Id); } return(P); } pROCEDURA Include ZANOSIT IDENTIFIKATOR W TABLICU IDENTIFIKATOROW. aLGORITM ILL@STRIRUETSQ RIS. 7.4.
7.4
fUNKCII RASSTANOWKI
mNOGO WNIMANIQ ISSLEDOWATELQMI BYLO UDELENO TOMU, KAKOJ DOLVNA BYTX (PERWIˆNAQ) FUNKCIQ RASSTANOWKI. oSNOWNYE TREBOWANIQ K NEJ OˆEWIDNY: ONA DOLVNA LEGKO WYˆISLQTXSQ I RASPREDELQTX RAWNOMERNO. oDIN IZ WOZMOVNYH PODHODOW ZDESX ZAKL@ˆAETSQ W SLEDU@]EM. 1. pO SIMWOLAM STROKI s OPREDELQEM POLOVITELXNOE CELOE H. pREOBRAZOWANIE ODINOˆNYH SIMWOLOW W CELYE OBYˆNO MOVNO SDELATX SREDSTWAMI QZYKA REALIZACII. w pASKALE DLQ “TOGO SLUVIT FUNKCIQ ord, W sI PRI WYPOLNENII ARIFMETIˆESKIH OPERACIJ SIMWOLXNYE ZNAˆENIQ TRAKTU@TSQ KAK CELYE. 2. pREOBRAZUEM H, WYˆISLENNOE WY[E, W NOMER “LEMENTA, T.E. CELOE MEVDU 0 I N − 1, GDE N – RAZMER TABLICY RASSTANOWKI, NAPRIMER, WZQTIEM OSTATKA PRI DELENII H NA N . fUNKCII RASSTANOWKI, UˆITYWA@]IE WSE SIMWOLY STROKI, RASPREDELQ@T LUˆ[E, ˆEM FUNKCII, UˆITYWA@]IE TOLXKO NESKOLXKO SIMWOLOW, NAPRIMER, W KONCE ILI SEREDINE STROKI. nO TAKIE FUNKCII TREBU@T BOLX[E WYˆISLENIJ. pROSTEJ[IJ SPOSOB WYˆISLENIQ H – SLOVENIE KODOW SIMWOLOW. pERED SLOVENIEM S OˆEREDNYM SIMWOLOM MOVNO UMNOVITX STAROE ZNAˆENIE H NA KONSTANTU q. t.E. POLAGAEM H0 = 0, Hi = q ∗ Hi−1 +ci DLQ 1 6 i 6 k, k – DLINA STROKI. pRI q = 1 POLUˆAEM PROSTOE SLOVENIE SIMWOLOW. wMESTO SLOVENIQ MOVNO WYPOLNQTX SLOVENIE ci I q ∗ Hj−1 PO MODUL@ 2. pEREPOLNENIE PRI WYPOLNENII ARIFMETIˆESKIH OPERACIJ MOVNO IGNORIROWATX. fUNKCIQ Hashpjw, PRIWEDENNAQ NIVE [10], WYˆISLQETSQ, NAˆINAQ S H = 0 (PREDPOLAGAETSQ, ˆTO ISPOLXZU@TSQ 32-BITOWYE CELYE). dLQ KAVDOGO SIMWOLA c SDWIGAEM BITY H NA 4 POZICII WLEWO I DOBAWLQEM OˆEREDNOJ SIMWOL. eSLI KAKOJ-NIBUDX IZ ˆETYREH STAR[IH BIT H RAWEN 1, SDWIGAEM “TI 4 BITA NA 24 RAZRQDA WPRAWO, ZATEM SKLADYWAEM PO MODUL@ 2 S H I USTANAWLIWAEM W 0 KAVDYJ IZ ˆETYREH STAR[IH BIT, RAWNYH 1.
glawa 7. organizaciq tablic simwolow
112
#define PRIME 211 #define EOS ’\0’ int Hashpjw(char *s) {char *p; unsigned H=0, g; for (p=s; *p!=EOS; p=p+1) {H=(H24); H=H^g; } } return H%PRIME; }
7.5
tABLICY NA DEREWXQH
rASSMOTRIM E]E ODIN SPOSOB ORGANIZACII TABLIC SIMWOLOW S ISPOLXZOWANIEM DWOIˆNYH DEREWXEW. oRIENTIROWANNOE DEREWO NAZYWAETSQ DWOIˆNYM, ESLI U NEGO W KAVDU@ WER[INU, KROME ODNOJ (KORNQ), WHODIT ODNA DUGA, I IZ KAVDOJ WER[INY WYHODIT NE BOLEE DWUH DUG. wETWX@ DEREWA NAZYWAETSQ PODDEREWO, SOSTOQ]EE IZ NEKOTOROJ DUGI DANNOGO DEREWA, EE NAˆALXNOJ I KONEˆNOJ WER[IN, A TAKVE WSEH WER[IN I DUG, LEVA]IH NA WSEH PUTQH, WYHODQ]IH IZ KONEˆNOJ WER[INY “TOJ DUGI. wYSOTOJ DEREWA NAZYWAETSQ MAKSIMALXNAQ DLINA PUTI W “TOM DEREWE OT KORNQ DO LISTA. pUSTX NA MNOVESTWE IDENTIFIKATOROW ZADAN NEKOTORYJ LINEJNYJ (NAPRIMER, LEKSIKOGRAFIˆESKIJ) PORQDOK ≺, T.E. NEKOTOROE TRANZITIWNOE, ANTISIMMETRIˆNOE I ANTIREFLEKSIWNOE OTNO[ENIE. tAKIM OBRAZOM, DLQ PROIZWOLXNOJ PARY IDENTIFIKATOROW id1 I id2 LIBO id1 ≺ id2 , LIBO id2 ≺ id1 , LIBO id1 SOWPADAET S id2 .
rIS. 7.5: kAVDOJ WER[INE DWOIˆNOGO DEREWA, PREDSTAWLQ@]EGO TABLICU SIMWOLOW, SOPOSTAWIM IDENTIFIKATOR. pRI “TOM, ESLI WER[INA (KOTOROJ SOPOSTAWLEN id) IMEET LEWOGO POTOMKA (KOTOROMU SOPOSTAWLEN idL ), TO idL ≺ id; ESLI IMEET PRAWOGO POTOMKA (idR ), TO id ≺ idR . —LEMENT TABLICY IZOBRAVEN NA RIS. 7.5. pOISK W TAKOJ TABLICE MOVET BYTX OPISAN SLEDU@]EJ FUNKCIEJ:
7.5. tablicy na derewxqh
113
struct TreeElement * SearchTree(String Id, struct TreeElement * TP) {int comp; if (TP==NULL) return NULL; comp=IdComp(Id,TP->IdentP); if (compLeft)); if (comp>0) return(SearchTree(Id,TP->Right)); return TP; } GDE STRUKTURA DLQ DLQ “LEMENTA DEREWA IMEET WID struct TreeElement {String IdentP; struct TreeElement * Left, * Right; }; zANESENIE W TABLICU OSU]ESTWLQETSQ FUNKCIEJ struct TreeElement * InsertTree(String Id, struct TreeElement * TP) {int comp=IdComp(Id,TP->IdentP); if (compLeft, &(TP->Left))); if (comp>0) return(Fill(Id,TP->Right, &(TP->Right))); return(TP); } struct TreeElement * Fill(String Id, struct TreeElement * P, struct TreeElement ** FP) { if (P==NULL) {P=alloc(sizeof(struct TreeElement)); P->IdentP=Include(Id); P->Left=NULL; P->Right=NULL; *FP=P; return(P); } else return(InsertTree(Id,P)); } kAK POKAZANO W RABOTE [8], SREDNEE WREMQ POISKA W TABLICE RAZMERA n, ORGANIZOWANNOJ W WIDE DWOIˆNOGO DEREWA, PRI RAWNOJ WEROQTNOSTI POQWLENIQ KAVDOGO OB˙EKTA RAWNO (2 ln 2) log 2 n + O(1). oDNAKO, NA PRAKTIKE SLUˆAJ RAWNOJ WEROQTNOSTI POQWLENIQ OB˙EKTOW WSTREˆAETSQ DOWOLXNO REDKO. pO“TOMU W DEREWE POQWLQ@TSQ BOLEE DLINNYE I BOLEE KOROTKIE WETWI, I SREDNEE WREMQ POISKA UWELIˆIWAETSQ. ˜TOBY UMENX[ITX SREDNEE WREMQ POISKA W DWOIˆNOM DEREWE, MOVNO W PROCESSE POSTROENIQ DEREWA SLEDITX ZA TEM, ˆTOBY ONO WSE WREMQ OSTAWALOSX SBALANSIROWANNYM. a IMENNO, NAZOWEM DEREWO SBALANSIROWANNYM, ESLI
glawa 7. organizaciq tablic simwolow
114
A (-2, n+3)
C (n)
B (-1, n+2)
D (n+1)
B (0, n+2)
E (n)
A (0, n+1)
D (n+1)
E (n)
C (n)
rIS. 7.6:
A (-2, n+3)
C (n)
B (1, n+2)
E (-1, n+1)
D (n)
F (n)
E (0, n+2)
A (1, n+1)
B (0, n+1)
D (n)
F (n)
G (n-1)
C (n)
G (n-1)
rIS. 7.7:
NI DLQ KAKOJ WER[INY WYSOTA WYHODQ]EJ IZ NEE PRAWOJ WETWI NE OTLIˆAETSQ OT WYSOTY LEWOJ BOLEE ˆEM NA 1. dLQ TOGO, ˆTOBY DOSTIˆX SBALANSIROWANNOSTI, W PROCESSE DOBAWLENIQ NOWYH WER[IN DEREWO MOVNO SLEGKA PERESTRAIWATX SLEDU@]IM OBRAZOM [1]. oPREDELIM DLQ KAVDOJ WER[INY DEREWA HARAKTERISTIKU, RAWNU@ RAZNOSTI WYSOT WYHODQ]IH IZ NEE PRAWOJ I LEWOJ WETWEJ. w SBALANSIROWANNOM DEREWE HARAKTERISTIKA WER[INY MOVET BYTX RAWNOJ −1, 0 I 1, DLQ LISTXEW ONA RAWNA 0. pUSTX MY OPREDELILI MESTO NOWOJ WER[INY W DEREWE. eE HARAKTERISTIKA RAWNA 0. nAZOWEM PUTX, WEDU]IJ OT KORNQ K NOWOJ WER[INE, WYDELENNYM.
7.5. tablicy na derewxqh
115
A (-2, n+3)
C (n)
B (1, n+2)
E (1, n+1)
D (n)
E (0, n+2)
F (n-1)
A (0, n+1)
B (-1, n+1)
D (n)
F (n-1)
G (n)
C (n)
G (n)
rIS. 7.8:
A (-2, 2)
E (0, 1)
B (1, 1) A (0, 0)
B (0, 0) E (0, 0)
rIS. 7.9:
pRI DOBAWLENII NOWOJ WER[INY MOGUT IZMENITXSQ HARAKTERISTIKI TOLXKO TEH WER[IN, KOTORYE LEVAT NA WYDELENNOM PUTI. rASSMOTRIM ZAKL@ˆITELXNYJ OTREZOK WYDELENNOGO PUTI, TAKOJ, ˆTO DO DOBAWLENIQ WER[INY HARAKTERISTIKI WSEH WER[IN NA NEM BYLI RAWNY 0. eSLI WERHNIM KONCOM “TOGO OTREZKA QWLQETSQ SAM KORENX, TO DEREWO PERESTRAIWATX NE NADO, DOSTATOˆNO LI[X IZMENITX HARAKTERISTIKI WER[IN NA “TOM PUTI NA 1 ILI −1, W ZAWISIMOSTI OT TOGO, WLEWO ILI WPRAWO PRISTROENA NOWAQ WER[INA. pUSTX WERHNIJ KONEC ZAKL@ˆITELXNOGO OTREZKA – NE KORENX. rASSMOTRIM WER[INU A – “RODITELQ” WERHNEGO KONCA ZAKL@ˆITELXNOGO OTREZKA. pERED
116
glawa 7. organizaciq tablic simwolow
DOBAWLENIEM NOWOJ WER[INY HARAKTERISTIKA A BYLA RAWNA ±1. eSLI A IMELA HARAKTERISTIKU 1 (−1) I NOWAQ WER[INA DOBAWLQETSQ W LEWU@ (PRAWU@) WETWX, TO HARAKTERISTIKA WER[INY A STANOWITSQ RAWNOJ 0, A WYSOTA PODDEREWA S KORNEM W A NE MENQETSQ. tAK ˆTO I W “TOM SLUˆAE DEREWO PERESTRAIWATX NE NADO. pUSTX TEPERX HARAKTERISTIKA A DO PERESTRAIWANIQ BYLA RAWNA −1 I NOWAQ WER[INA DOBAWLENA K LEWOJ WETWI A (ANALOGIˆNO – DLQ SLUˆAQ 1 I DOBAWLENIQ K PRAWOJ WETWI). rASSMOTRIM WER[INU B – LEWOGO POTOMKA A. wOZMOVNY SLEDU@]IE WARIANTY. eSLI HARAKTERISTIKA B POSLE DOBAWLENIQ NOWOJ WER[INY W D STALA RAWNA −1, TO DEREWO IMEET STRUKTURU, IZOBRAVENNU@ NA RIS. 7.6, A. pERESTROIW DEREWO TAK, KAK “TO IZOBRAVENO NA RIS. 7.6, B, MY DOBXEMSQ SBALANSIROWANNOSTI (W SKOBKAH UKAZANY HARAKTERISTIKI WER[IN, GDE “TO SU]ESTWENNO, I SOOTNO[ENIQ WYSOT POSLE DOBAWLENIQ). eSLI HARAKTERISTIKA WER[INY B POSLE DOBAWLENIQ NOWOJ WER[INY W E STALA RAWNA 1, TO NADO OTDELXNO RASSMOTRETX SLUˆAI, KOGDA HARAKTERISTIKA WER[INY E, SLEDU@]EJ ZA B NA WYDELENNOM PUTI, STALA RAWNA −1, 1 I 0 (W POSLEDNEM SLUˆAE WER[INA E – NOWAQ). wID DEREWA DO I POSLE PERESTROJKI DLQ “TIH SLUˆAEW POKAZAN SOOTWETSTWENNO NA RIS. 7.7, 7.8 I 7.9.
7.6
rEALIZACIQ BLOˆNOJ STRUKTURY
s TOˆKI ZRENIQ STRUKTURY PROGRAMMY BLOKI (I/ILI PROCEDURY) OBRAZU@T DEREWO. kAVDOJ WER[INE DEREWA “TOGO PREDSTAWLENIQ, SOOTWETSTWU@]EJ BLOKU, MOVNO SOPOSTAWITX SWO@ TABLICU SIMWOLOW (I, WOZMOVNO, ODNU OB]U@ TABLICU IDENTIFIKATOROW). rABOTU S TABLICAMI BLOKOW MOVNO ORGANIZOWATX W MAGAZINNOM REVIME: PRI WHODE W BLOK SOZDAWATX TABLICU SIMWOLOW, PRI WYHODE – UNIˆTOVATX. pRI “TOM SAMI TABLICY DOLVNY BYTX SWQZANY W UPORQDOˆENNYJ SPISOK, ˆTOBY MOVNO BYLO PROSMATRIWATX IH W PORQDKE WLOVENNOSTI. eSLI TABLICY ORGANIZOWANY S POMO]X@ FUNKCIJ RASSTANOWKI, “TO OZNAˆAET, ˆTO DLQ KAVDOJ TABLICY DOLVNA BYTX SOZDANA SWOQ TABLICA RASSTANOWKI.
7.7
sRAWNENIE METODOW REALIZACII TABLIC
rASSMOTRIM PREIMU]ESTWA I NEDOSTATKI RASSMOTRENNYH METODOW REALIZACII TABLIC S TOˆKI ZRENIQ TEHNIKI ISPOLXZOWANIQ PAMQTI. iSPOLXZOWANIE DINAMIˆESKOJ PAMQTI, KAK PRAWILO, DOWOLXNO DOROGAQ OPERACIQ, POSKOLXKU MEHANIZMY PODDERVANIQ RABOTY S DINAMIˆESKOJ PAMQTX@ MOGUT BYTX DOSTATOˆNO SLOVNY. nEOBHODIMO PODDERVIWATX SPISKI SWOBODNOJ I ZANQTOJ PAMQTI, WYBIRATX NAIBOLEE PODHODQ]IJ KUSOK PAMQTI PRI ZAPROSE, WKL@ˆATX OSWOBODIW[IJSQ KUSOK W SPISOK SWOBODNOJ PAMQTI I, WOZMOVNO, SKLEIWATX KUSKI SWOBODNOJ PAMQTI W SPISKE. s DRUGOJ STORONY, ISPOLXZOWANIE MASSIWA TREBUET OTWEDENIQ ZARANEE
7.7. srawnenie metodow realizacii tablic
117
DOWOLXNO BOLX[OJ PAMQTI, A “TO OZNAˆAET, ˆTO ZNAˆITELXNAQ PAMQTX WOOB]E NE BUDET ISPOLXZOWATXSQ. kROME TOGO, ˆASTO PRIHODITSQ ZAPOLNQTX NE WSE “LEMENTY MASSIWA (NAPRIMER, W TABLICE IDENTIFIKATOROW ILI W TEH SLUˆAQH, KOGDA W MASSIWE FAKTIˆESKI HRANQTSQ ZAPISI PEREMENNOJ DLINY, NAPRIMER, ESLI W TABLICE SIMWOLOW ZAPISI DLQ RAZLIˆNYH OB˙EKTOW IME@T RAZLIˆNYJ SOSTAW POLEJ). oBRA]ENIE K “LEMENTAM MASSIWA MOVET OZNAˆATX ISPOLXZOWANIE OPERACII UMNOVENIQ PRI WYˆISLENII INDEKSOW, ˆTO MOVET ZAMEDLITX ISPOLNENIE. nAILUˆ[IM, PO-WIDIMOMU, QWLQETSQ MEHANIZM DOSTUPA PO UKAZATELQM I ISPOLXZOWANIE FAKTA MAGAZINNOJ ORGANIZACII PAMQTI W KOMPILQTORE. dLQ “TOGO PROCEDURA WYDELENIQ PAMQTI WYDAET NEOBHODIMYJ KUSOK IZ PODRQD IDU]EJ PAMQTI, A PRI WYHODE IZ PROCEDURY WSQ PAMQTX, SWQZANNAQ S “TOJ PROCEDUROJ, OSWOBOVDAETSQ PROSTOJ PERESTANOWKOJ UKAZATELQ SWOBODNOJ PAMQTI W SOSTOQNIE PERED NAˆALOM OBRABOTKI PROCEDURY. w ˆISTOM WIDE “TO NE WSEGDA, ODNAKO, WOZMOVNO. nAPRIMER, LOKALXNYJ MODULX W mODULE-2 MOVET “KSPORTIROWATX NEKOTORYE OB˙EKTY NARUVU. pRI “TOM SHEMU REALIZACII PRIHODITSQ “PODGONQTX” POD MEHANIZM RASPREDELENIQ PAMQTI. w DANNOM SLUˆAE, NAPRIMER, NEOBHODIMO “KSPORTIROWANNYE OB˙EKTY WYNESTI W SREDU OHWATYWA@]EGO BLOKA I SWERNUTX BLOK LOKALXNOGO MODULQ.
118
glawa 7. organizaciq tablic simwolow
gLAWA 8
pROMEVUTOˆNOE PREDSTAWLENIE PROGRAMMY w PROCESSE TRANSLQCII KOMPILQTOR ˆASTO ISPOLXZU@T PROMEVUTOˆNOE PREDSTAWLENIE (pp) ISHODNOJ PROGRAMMY, PREDNAZNAˆENNOE PREVDE WSEGO DLQ UDOBSTWA GENERACII KODA I/ILI PROWEDENIQ RAZLIˆNYH OPTIMIZACIJ. sAMA FORMA pp ZAWISIT OT CELEJ EGO ISPOLXZOWANIQ. nAIBOLEE ˆASTO ISPOLXZUEMYMI FORMAMI pp QWLQETSQ ORIENTIROWANNYJ GRAF (W ˆASTNOSTI, ABSTRAKTNOE SINTAKSIˆESKOE DEREWO, W TOM ˆISLE ATRIBUTIROWANNOE), TREHADRESNYJ KOD (W WIDE TROEK ILI ˆETWEROK), PREFIKSNAQ I POSTFIKSNAQ ZAPISX.
8.1
pREDSTAWLENIE W WIDE ORIENTIROWANNOGO GRAFA
pROSTEJ[EJ FORMOJ PROMEVUTOˆNOGO PREDSTAWLENIQ QWLQETSQ SINTAKSIˆESKOE DEREWO PROGRAMMY. tU VE SAMU@ INFORMACI@ O WHODNOJ PROGRAMME, NO W BOLEE KOMPAKTNOJ FORME DAET ORIENTIROWANNYJ ACIKLIˆESKIJ GRAF (oag), W KOTOROM W ODNU WER[INU OB˙EDINENY WER[INY SINTAKSIˆESKOGO DEREWA, PREDSTAWLQ@]IE OB]IE PODWYRAVENIQ. sINTAKSIˆESKOE DEREWO I oag DLQ OPERATORA PRISWAIWANIQ a := b ∗ −c + b ∗ −c PRIWEDENY NA RIS. 8.1. nA RIS. 8.2 PRIWEDENY DWA PREDSTAWLENIQ W PAMQTI SINTAKSIˆESKOGO DEREWA NA RIS. 8.1, A. kAVDAQ WER[INA KODIRUETSQ ZAPISX@ S POLEM DLQ OPERACII I POLQMI DLQ UKAZATELEJ NA POTOMKOW. nA RIS. 8.2, B, WER[INY RAZME]ENY W MASSIWE ZAPISEJ I INDEKS (ILI WHOD) WER[INY SLUVIT UKAZATELEM NA NEE. 119
120 glawa 8. promevuto˜noe predstawlenie programmy
a
a
+
*
*
b
+
*
b
c
b
c
c
rIS. 8.1:
*
*
*
*
+
rIS. 8.2:
8.2
tREHADRESNYJ KOD
tREHADRESNYJ KOD – “TO POSLEDOWATELXNOSTX OPERATOROW WIDA x := y op z, GDE x, y I z – IMENA, KONSTANTY ILI SGENERIROWANNYE KOMPILQTOROM WREMENNYE OB˙EKTY. zDESX op – DWUMESTNAQ OPERACIQ, NAPRIMER OPERACIQ PLAWA@-
8.2. trehadresnyj kod
121
]EJ ILI FIKSIROWANNOJ ARIFMETIKI, LOGIˆESKAQ ILI POBITOWAQ. w PRAWU@ ˆASTX MOVET WHODITX TOLXKO ODIN ZNAK OPERACII. sOSTAWNYE WYRAVENIQ DOLVNY BYTX RAZBITY NA PODWYRAVENIQ, PRI “TOM MOGUT POQWITXSQ WREMENNYE IMENA (PEREMENNYE). sMYSL TERMINA “TREHADRESNYJ KOD” W TOM, ˆTO KAVDYJ OPERATOR OBYˆNO IMEET TRI ADRESA: DWA DLQ OPERANDOW I ODIN DLQ REZULXTATA. tREHADRESNYJ KOD – “TO LINEARIZOWANNOE PREDSTAWLENIE SINTAKSIˆESKOGO DEREWA ILI oag, W KOTOROM WREMENNYE IMENA SOOTWETSTWU@T WNUTRENNIM WER[INAM DEREWA ILI GRAFA. nAPRIMER, WYRAVENIE x + y ∗ z MOVET BYTX PROTRANSLIROWANO W POSLEDOWATELXNOSTX OPERATOROW t1 := y * z t2 := x + t1 GDE t1 I t2 – IMENA, SGENERIROWANNYE KOMPILQTOROM. w WIDE TREHADRESNOGO KODA PREDSTAWLQ@TSQ NE TOLXKO DWUMESTNYE OPERACII, WHODQ]IE W WYRAVENIQ. w TAKOM VE WIDE PREDSTAWLQ@TSQ OPERATORY UPRAWLENIQ PROGRAMMY I ODNOMESTNYE OPERACII. w “TOM SLUˆAE NEKOTORYE IZ KOMPONENT TREHADRESNOGO KODA MOGUT NE ISPOLXZOWATXSQ. nAPRIMER, USLOWNYJ OPERATOR if A > B then S1 else S2 MOVET BYTX PREDSTAWLEN SLEDU@]IM KODOM: t := A - B JGT t, S2 ... zDESX JGT – DWUMESTNAQ OPERACIQ USLOWNOGO PEREHODA, NE WYRABATYWA@]AQ REZULXTATA. rAZBIENIE ARIFMETIˆESKIH WYRAVENIJ I OPERATOROW UPRAWLENIQ DELAET TREHADRESNYJ KOD UDOBNYM PRI GENERACII MA[INNOGO KODA I OPTIMIZACII. iSPOLXZOWANIE IMEN PROMEVUTOˆNYH ZNAˆENIJ, WYˆISLQEMYH W PROGRAMME, POZWOLQET LEGKO PEREUPORQDOˆIWATX TREHADRESNYJ KOD. t1 t2 t3 t4 t5 a
:= := := := := := A
-c b * t1 -c b * t3 t2 + t4 t5
t1 t2 t5 a
:= := := :=
-c b * t1 t2 + t2 t5
B rIS. 8.3:
pREDSTAWLENIQ SINTAKSIˆESKOGO DEREWA I GRAFA RIS. 8.1 W WIDE TREHADRESNOGO KODA DANO NA RIS. 8.3, A, I 8.3, B, SOOTWETSTWENNO.
122 glawa 8. promevuto˜noe predstawlenie programmy tREHADRESNYJ KOD – “TO ABSTRAKTNAQ FORMA PROMEVUTOˆNOGO KODA. w REALIZACII TREHADRESNYJ KOD MOVET BYTX PREDSTAWLEN ZAPISQMI S POLQMI DLQ OPERACII I OPERANDOW. rASSMOTRIM TRI SPOSOBA REALIZACII TREHADRESNOGO KODA: ˆETWERKI, TROJKI I KOSWENNYE TROJKI. ˜ETWERKA – “TO ZAPISX S ˆETYRXMQ POLQMI, KOTORYE BUDEM NAZYWATX op, arg1, arg2 I result. pOLE op SODERVIT KOD OPERACII. w OPERATORAH S UNARNYMI OPERACIQMI TIPA x := −y ILI x := y POLE arg2 NE ISPOLXZUETSQ. w NEKOTORYH OPERACIQH (TIPA “PEREDATX PARAMETR”) MOGUT NE ISPOLXZOWATXSQ NI arg2, NI result. uSLOWNYE I BEZUSLOWNYE PEREHODY POME]A@T W result METKU PEREHODA. nA RIS. 8.4, A, PRIWEDENY ˆETWERKI DLQ OPERATORA PRISWAIWANIQ a := b∗−c+b∗−c. oNI POLUˆENY IZ TREHADRESNOGO KODA NA RIS. 8.3, A.
(0) (1) (2) (3) (4) (5)
op * * + :=
arg1 c b c b t2 t5
arg2 t1 t3 t4
result t1 t2 t3 t4 t5 a
A) ˆETWERKI
(0) (1) (2) (3) (4) (5)
op * * + :=
arg1 c b c b (1) a
arg2 (0) (2) (3) (4)
B ) TROJKI rIS. 8.4:
oBYˆNO SODERVIMOE POLEJ arg1, arg2 I result – “TO UKAZATELI NA WHODY TABLICY SIMWOLOW DLQ IMEN, PREDSTAWLQEMYH “TIMI POLQMI. wREMENNYE IMENA WNOSQTSQ W TABLICU SIMWOLOW PO MERE IH GENERACII. ˜TOBY IZBEVATX WNESENIQ NOWYH IMEN W TABLICU SIMWOLOW, NA WREMENNOE ZNAˆENIE MOVNO SSYLATXSQ, ISPOLXZUQ POZICI@ WYˆISLQ@]EGO EGO OPERATORA. w “TOM SLUˆAE TREHADRESNYE OPERATORY MOGUT BYTX PREDSTAWLENY ZAPISQMI TOLXKO S TREMQ POLQMI: op, arg1 I arg2, KAK “TO POKAZANO NA RIS. 8.3, B. pOLQ arg1 I arg2 – “TO LIBO UKAZATELI NA TABLICU SIMWOLOW (DLQ IMEN, OPREDELENNYH PROGRAMMISTOM, ILI KONSTANT), LIBO UKAZATELI NA TROJKI (DLQ WREMENNYH ZNAˆENIJ). tAKOJ SPOSOB PREDSTAWLENIQ TREHADRESNOGO KODA NAZYWA@T TROJKAMI. tROJKI SOOTWETSTWU@T PREDSTAWLENI@ SINTAKSIˆESKOGO DEREWA ILI oag S POMO]X@ MASSIWA WER[IN. ˜ISLA W SKOBKAH – “TO UKAZATELI NA TROJKI, A IMENA – “TO UKAZATELI NA TABLICU SIMWOLOW. nA PRAKTIKE INFORMACIQ, NEOBHODIMAQ DLQ INTERPRETACII RAZLIˆNOGO TIPA WHODOW W POLQ arg1 I arg2, KODIRUETSQ W POLE op ILI DOPOLNITELXNYH POLQH. tROJKI RIS. 8.4, B, SOOTWETSTWU@T ˆETWERKAM RIS. 8.4, A. dLQ PREDSTAWLENIQ TROJKAMI TREHMESTNOJ OPERACII TIPA x[i] := y TREBUETSQ DWA WHODA, KAK “TO POKAZANO NA RIS. 8.5, A, PREDSTAWLENIE x := y[i] DWUMQ OPERACIQMI POKAZANO NA RIS. 8.5, B. tREHADRESNYJ KOD MOVET BYTX PREDSTAWLEN NE SPISKOM TROEK, A SPISKOM UKAZATELEJ NA NIH. tAKAQ REALIZACIQ OBYˆNO NAZYWAETSQ KOSWENNYMI
8.2. trehadresnyj kod
(0) (1)
op [ ]= :=
arg1 x (0)
123
arg2 i y
(0) (1)
A) x[i] := y
op =[ ] :=
arg1 y x
arg2 i (0)
B ) x := y[i] rIS. 8.5:
TROJKAMI. nAPRIMER, TROJKI RIS. 8.4, B, MOGUT BYTX REALIZOWANY TAK, KAK “TO IZOBRAVENO NA RIS. 8.6.
(0) (1) (2) (3) (4) (5)
OPERATOR (14) (15) (16) (17) (18) (19)
(14) (15) (16) (17) (18) (19)
op * * + :=
arg1 c b c b (15) a
arg2 (14) (16) (17) (18)
rIS. 8.6:
pRI GENERACII OB˙EKTNOGO KODA KAVDOJ PEREMENNOJ, KAK WREMENNOJ, TAK I OPREDELENNOJ W ISHODNOJ PROGRAMME, NAZNAˆAETSQ PAMQTX PERIODA ISPOLNENIQ, ADRES KOTOROJ OBYˆNO HRANITSQ W TABLICE GENERATORA KODA. pRI ISPOLXZOWANII ˆETWEROK “TOT ADRES LEGKO POLUˆITX ˆEREZ “TU TABLICU. bOLEE SU]ESTWENNO PREIMU]ESTWO ˆETWEROK PROQWLQETSQ W OPTIMIZIRU@]IH KOMPILQTORAH, KOGDA MOVET WOZNIKNUTX NEOBHODIMOSTX PEREME]ATX OPERATORY. eSLI PEREME]AETSQ OPERATOR, WYˆISLQ@]IJ x, NE TREBUETSQ IZMENENIJ W OPERATORE, ISPOLXZU@]EM x. w ZAPISI VE TROJKAMI PEREME]ENIE OPERATORA, OPREDELQ@]EGO WREMENNOE ZNAˆENIE, TREBUET IZMENENIQ WSEH SSYLOK NA “TOT OPERATOR W MASSIWAH arg1 I arg2. iZ-ZA “TOGO TROJKI TRUDNO ISPOLXZOWATX W OPTIMIZIRU@]IH KOMPILQTORAH. w SLUˆAE PRIMENENIQ KOSWENNYH TROEK OPERATOR MOVET BYTX PEREME]EN PEREUPORQDOˆIWANIEM SPISKA OPERATOROW. pRI “TOM NE NADO MENQTX UKAZATELI NA op, arg1 I arg2. —TIM KOSWENNYE TROJKI POHOVI NA ˆETWERKI. kROME TOGO, “TI DWA SPOSOBA TREBU@T PRIMERNO ODINAKOWOJ PAMQTI. kAK I W SLUˆAE PROSTYH TROEK, PRI ISPOLXZOWANII KOSWENNYH TROEK WYDELENIE PAMQTI DLQ WREMENNYH ZNAˆENIJ MOVET BYTX OTLOVENO NA “TAP GENERACII KODA. pO SRAWNENI@ S ˆETWERKAMI PRI ISPOLXZOWANIE KOSWENNYH TROEK MOVNO S“KONOMITX PAMQTX, ESLI ODNO I TO VE WREMENNOE ZNAˆENIE ISPOLXZUETSQ BOLEE ODNOGO RAZA. nAPRIMER, NA RIS. 8.6 MOVNO OB˙EDINITX STROKI (14) I (16), POSLE ˆEGO MOVNO OB˙EDINITX STROKI (15) I (17).
124 glawa 8. promevuto˜noe predstawlenie programmy
8.3
lINEARIZOWANNYE PREDSTAWLENIQ
w KAˆESTWE PROMEVUTOˆNYH PREDSTAWLENIJ WESXMA RASPROSTRANENY LINEARIZOWANNYE PREDSTAWLENIQ DEREWXEW. lINEARIZOWANNOE PREDSTAWLENIE POZWOLQET OTNOSITELXNO LEGKO HRANITX PROMEVUTOˆNOE PREDSTAWLENIE WO WNE[NEJ PAMQTI I OBRABATYWATX EGO. nAIBOLEE RASPROSTRANENNOJ FORMOJ LINEARIZOWANNOGO PREDSTAWLENIQ QWLQETSQ POLXSKAQ ZAPISX – PREFIKSNAQ (PRQMAQ) ILI POSTFIKSNAQ (OBRATNAQ). pOSTFIKSNAQ ZAPISX – “TO SPISOK WER[IN DEREWA, W KOTOROM KAVDAQ WER[INA SLEDUET (PRI OBHODE SNIZU-WWERH SLEWA-NAPRAWO) NEPOSREDSTWENNO ZA SWOIMI POTOMKAMI. dEREWO NA RIS. 8.1, A, W POSTFIKSNOJ ZAPISI MOVET BYTX PREDSTAWLENO SLEDU@]IM OBRAZOM: a b c - * b c - * + := w POSTFIKSNOJ ZAPISI WER[INY SINTAKSIˆESKOGO DEREWA QWNO NE PRISUTSTWU@T. oNI MOGUT BYTX WOSSTANOWLENY IZ PORQDKA, W KOTOROM SLEDU@T WER[INY I IZ ˆISLA OPERANDOW SOOTWETSTWU@]IH OPERACIJ. wOSSTANOWLENIE WER[IN ANALOGIˆNO WYˆISLENI@ WYRAVENIQ W POSTFIKSNOJ ZAPISI S ISPOLXZOWANIEM STEKA. w PREFIKSNOJ ZAPISI SNAˆALA UKAZYWAETSQ OPERACIQ, A ZATEM EE OPERANDY. nAPRIMER, DLQ PRIWEDENNOGO WY[E WYRAVENIQ IMEEM := a + * b - c * b - c rASSMOTRIM DETALXNEE ODNU IZ REALIZACIJ PREFIKSNOGO PREDSTAWLENIQ – lIDER [9]. lIDER – “TO ABBREWIATURA OT “liNEARIZOWANNOE derEWO”. —TO MA[INNO-NEZAWISIMAQ PREFIKSNAQ ZAPISX. w lIDERE SOHRANQ@TSQ WSE OB˙QWLENIQ I KAVDOMU IZ NIH PRISWAIWAETSQ SWOJ UNIKALXNYJ NOMER, KOTORYJ ISPOLXZUETSQ DLQ SSYLKI NA OB˙QWLENIE. rASSMOTRIM PRIMER. module M; var X,Y,Z: integer; procedure DIF(A,B:integer):integer; var R:integer; begin R:=A-B; return(R); end DIF; begin Z:=DIF(X,Y); end M. —TOT FRAGMENT IMEET SLEDU@]IJ OBRAZ W lIDERE. program ’M’ var int var int var int
8.3. linearizowannye predstawleniq procbody proc int int end int var int begin assign var 1 7 end int int mi par 1 5 end par 1 6 end result 0 int var 1 7 end return end begin assign var 0 3 end int icall 0 4 int var 0 1 end int var 0 2 end end end
rASSMOTRIM EGO BOLEE DETALXNO: program ’M’ var int var int var int procbody proc int int end int var int begin assign var 1 7 end int int mi par 1 5 end par 1 6 end result 0 int var 1 7 end return end begin assign var 0 3 end int icall 0 4 int var 0 1 end int var 0 2 end end end
iMQ MODULQ NUVNO DLQ REDAKTORA SWQZEJ. —TO OBRAZ PEREMENNYH X, Y, Z; PEREMENNYM X, Y, Z PRISWAIWA@TSQ NOMERA 1, 2, 3 NA UROWNE 0. oB˙QWLENIE PROCEDURY S DWUMQ CELYMI PARAMETRAMI, WOZWRA]A@]EJ CELOE. pROCEDURA POLUˆAET NOMER 4 NA UROWNE 0 I PARAMETRY IME@T NOMERA 5, 6 NA UROWNE 1. pEREMENNAQ R IMEET NOMER 7 NA UROWNE 1. nAˆALO TELA PROCEDURY. oPERATOR PRISWAIWANIQ. lEWAQ ˆASTX PRISWAIWANIQ (R). tIP PRISWAIWAEMOGO ZNAˆENIQ. cELOE WYˆITANIE. uMENX[AEMOE (A). wYˆITAEMOE (B). rEZULXTAT PROCEDURY UROWNQ 0. rEZULXTAT IMEET CELYJ TIP. rEZULXTAT – PEREMENNAQ R. oPERATOR WOZWRATA. kONEC TELA PROCEDURY. nAˆALO TELA MODULQ. oPERATOR PRISWAIWANIQ. lEWAQ ˆASTX – PEREMENNAQ Z. tIP PRISWAIWAEMOGO ZNAˆENIQ. wYZOW LOKALXNOJ PROCEDURY DIF. fAKTIˆESKIE PARAMETRY X I Y. kONEC WYZOWA. kONEC TELA MODULQ.
125
126 glawa 8. promevuto˜noe predstawlenie programmy
8.4
wIRTUALXNAQ MA[INA Java
pROGRAMMY NA QZYKE Java TRANSLIRU@TSQ W SPECIALXNOE PROMEVUTOˆNOE PREDSTAWLENIE, KOTOROE ZATEM INTERPRETIRUETSQ TAK NAZYWAEMOJ “WIRTUALXNOJ MA[INOJ Java”. wIRTUALXNAQ MA[INA Java PREDSTAWLQET SOBOJ STEKOWU@ MA[INU: ONA NE IMEET PAMQTI PRQMOGO DOSTUPA, WSE OPERACII WYPOLNQ@TSQ NAD OPERANDAMI, RASPOLOVENNYMI NA WERHU[KE STEKA. ˜TOBY, NAPRIMER, WYPOLNITX OPERACI@ S UˆASTIEM KONSTANTY ILI PEREMENNOJ, IH PREDWARITELXNO NEOBHODIMO ZAGRUZITX NA WERHU[KU STEKA. kOD OPERACII – WSEGDA ODIN BAJT. eSLI OPERACIQ IMEET OPERANDY, ONI RASPOLAGA@TSQ W SLEDU@]IH BAJTAH. k “LEMENTARNYM TIPAM DANNYH, S KOTORYMI RABOTAET MA[INA, OTNOSQTSQ short, integer, long, float, double (WSE ZNAKOWYE).
8.4.1
oRGANIZACIQ PAMQTI
mA[INA IMEET SLEDU@]IE REGISTRY: pc – SˆETˆIK KOMAND; optop – UKAZATELX WER[INY STEKA OPERACIJ; frame – UKAZATELX NA STEK-FREJM ISPOLNQEMOGO METODA; vars – UKAZATELX NA 0-@ PEREMENNU@ ISPOLNQEMOGO METODA. wSE REGISTRY 32-RAZRQDNYE. sTEK-FREJM IMEET TRI KOMPONENTY: LOKALXNYE PEREMENNYE, SREDU ISPOLNENIQ, STEK OPERANDOW. lOKALXNYE PEREMENNYE OTSˆITYWA@TSQ OT ADRESA W REGISTRE vars. sREDA ISPOLNENIQ SLUVIT DLQ PODDERVANIQ SAMOGO STEKA. oNA WKL@ˆAET UKAZATELX NA PREDYDU]IJ FREJM, UKAZATELX NA SOBSTWENNYE LOKALXNYE PEREMENNYE, NA BAZU STEKA OPERACIJ I NA WERHU[KU STEKA. kROME TOGO, ZDESX VE HRANITSQ NEKOTORAQ DOPOLNITELXNAQ INFORMACIQ, NAPRIMER, DLQ OTLADˆIKA. kUˆA SBORKI MUSORA SODERVIT “KZEMPLQRY OB˙EKTOW, KOTORYE SOZDA@TSQ I UNIˆTOVA@TSQ AWTOMATIˆESKI. oBLASTX METODOW SODERVIT KODY, TABLICY SIMWOLOW I T.D. s KAVDYM KLASSOM SWQZANA OBLASTX KONSTANT. oNA SODERVIT IMENA POLEJ, METODOW I DRUGU@ PODOBNU@ INFORMACI@, KOTORAQ ISPOLXZUETSQ METODAMI.
8.4.2
nABOR KOMAND WIRTUALXNOJ MA[INY
wIRTUALXNAQ Java-MA[INA IMEET SLEDU@]IE KOMANDY: POME]ENIE KONSTANT NA STEK, POME]ENIE LOKALXNYH PEREMENNYH NA STEK, ZAPOMINANIE ZNAˆENIJ IZ STEKA W LOKALXNYH PEREMENNYH, OBRABOTKA MASSIWOW, UPRAWLENIE STEKOM, ARIFMETIˆESKIE KOMANDY, LOGIˆESKIE KOMANDY,
8.4. wirtualxnaq ma–ina JAVA
127
PREOBRAZOWANIQ TIPOW, PEREDAˆA UPRAWLENIQ, WOZWRAT IZ FUNKCII, TABLIˆNYJ PEREHOD, OBRABOTKA POLEJ OB˙EKTOW, WYZOW METODA, OBRABOTKA ISKL@ˆITELXNYH SITUACIJ, PROˆIE OPERACII NAD OB˙EKTAMI, MONITORY, OTLADKA. rASSMOTRIM NEKOTORYE KOMANDY PODROBNEE. pOME]ENIE LOKALXNYH PEREMENNYH NA STEK kOMANDA iload – ZAGRUZITX CELOE IZ LOKALXNOJ PEREMENNOJ. oPERANDOM QWLQETSQ SME]ENIE PEREMENNOJ W OBLASTI LOKALXNYH PEREMENNYH. uKAZYWAEMOE ZNAˆENIE KOPIRUETSQ NA WERHU[KU STEKA OPERACIJ. iME@TSQ ANALOGIˆNYE KOMANDY DLQ POME]ENIQ PLAWA@]IH, DWOJNYH CELYH, DWOJNYH PLAWA@]IH I T.D. kOMANDA istore – SOHRANITX CELOE W LOKALXNOJ PEREMENNOJ. oPERANDOM OPERACII QWLQETSQ SME]ENIE PEREMENNOJ W OBLASTI LOKALXNYH PEREMENNYH. zNAˆENIE S WERHU[KI STEKA OPERACIJ KOPIRUETSQ W UKAZYWAEMU@ OBLASTX LOKALXNYH PEREMENNYH. iME@TSQ ANALOGIˆNYE KOMANDY DLQ POME]ENIQ PLAWA@]IH, DWOJNYH CELYH, DWOJNYH PLAWA@]IH I T.D. wYZOW METODA kOMANDA invokevirtual. pRI TRANSLQCII OB˙EKTNO-ORIENTIROWANNYH QZYKOW PROGRAMMIROWANIQ IZ-ZA WOZMOVNOSTI PEREKRYTIQ WIRTUALXNYH METODOW, WOOB]E GOWORQ, NELXZQ STATIˆESKI PROTRANSLIROWATX WYZOW METODA OB˙EKTA. —TO SWQZANO S TEM, ˆTO ESLI METOD PEREKRYT W PROIZWODNOM KLASSE, I WYZYWAETSQ METOD OB˙EKTAPEREMENNOJ, TO STATIˆESKI NEIZWESTNO, OB˙EKT KAKOGO KLASSA (BAZOWOGO ILI PROIZWODNOGO) HRANITSQ W PEREMENNOJ. pO“TOMU S KAVDYM OB˙EKTOM SWQZYWAETSQ TABLICA WSEH EGO WIRTUALXNYH METODOW: DLQ KAVDOGO METODA TAM POME]AETSQ UKAZATELX NA EGO REALIZACI@ W SOOTWETSTWII S PRINADLEVNOSTX@ SAMOGO OB˙EKTA KLASSU W IERARHII KLASSOW. w QZYKE Java RAZLIˆNYE KLASSY MOGUT REALIZOWYWATX ODIN I TOT VE INTERFEJS. eSLI OB˙QWLENA PEREMENNAQ ILI PARAMETR TIPA INTERFEJS, TO DINAMIˆESKI NELXZQ OPREDELITX OB˙EKT KAKOGO KLASSA PRISWOEN PEREMENNOJ: interface I; class C1 implements I; class C2 implements I; I O;
128 glawa 8. promevuto˜noe predstawlenie programmy C1 O1; C2 O2; ... O=O1; ... O=O2; ... w “TOJ TOˆKE PROGRAMMY, WOOB]E GOWORQ, NELXZQ SKAZATX, KAKOGO TIPA ZNAˆENIE HRANITSQ W PEREMENNOJ O. kROME TOGO, PRI RABOTE PROGRAMMY NA QZYKE Java IMEETSQ WOZMOVNOSTX ISPOLXZOWANIQ METODOW IZ DRUGIH PAKETOW. dLQ REALIZACII “TOGO MEHANIZMA W Java-MA[INE ISPOLXZUETSQ DINAMIˆESKOE SWQZYWANIE. pREDPOLAGAETSQ, ˆTO STEK OPERANDOW SODERVIT handle OB˙EKTA ILI MASSIWA I NEKOTOROE KOLIˆESTWO ARGUMENTOW. oPERAND OPERACII ISPOLXZUETSQ DLQ KONSTRUIROWANIQ INDEKSA W OBLASTI KONSTANT TEKU]EGO KLASSA. —LEMENT PO “TOMU INDEKSU W OBLASTI KONSTANT SODERVIT POLNU@ SIGNATURU METODA. sIGNATURA METODA OPISYWAET TIPY PARAMETROW I WOZWRA]AEMOGO ZNAˆENIQ. iZ handle OB˙EKTA IZWLEKAETSQ UKAZATELX NA TABLICU METODOW OB˙EKTA. pROSMATRIWAETSQ SIGNATURA METODA W TABLICE METODOW. rEZULXTATOM “TOGO PROSMOTRA QWLQETSQ INDEKS W TABLICU METODOW IMENOWANNOGO KLASSA, DLQ KOTOROGO NAJDEN UKAZATELX NA BLOK METODA. bLOK METODA UKAZYWAET TIP METODA (native, synchronized I T.D.) I ˆISLO ARGUMENTOW, OVIDAEMYH NA STEKE OPERANDOW. eSLI METOD POMEˆEN KAK synchronized, ZAPUSKAETSQ MONITOR, SWQZANNYJ S handle. bAZIS MASSIWA LOKALXNYH PEREMENNYH DLQ NOWOGO STEK-FREJMA USTANAWLIWAETSQ TAK, ˆTO ON UKAZYWAET NA handle NA STEKE. oPREDELQETSQ OB]EE ˆISLO LOKALXNYH PEREMENNYH, ISPOLXZUEMYH METODOM, I POSLE TOGO, KAK OTWEDENO NEOBHODIMOE MESTO DLQ LOKALXNYH PEREMENNYH, OKRUVENIE ISPOLNENIQ NOWOGO FREJMA POME]AETSQ NA STEK. bAZA STEKA OPERANDOW DLQ “TOGO WYZOWA METODA USTANAWLIWAETSQ NA PERWOE SLOWO POSLE OKRUVENIQ ISPOLNENIQ. zATEM ISPOLNENIE PRODOLVAETSQ S PERWOJ INSTRUKCII WYZWANNOGO METODA. oBRABOTKA ISKL@ˆITELXNYH SITUACIJ kOMANDA athrow – WOZBUDITX ISKL@ˆITELXNU@ SITUACI@. s KAVDYM METODOM SWQZAN SPISOK OPERATOROW catch. kAVDYJ OPERATOR catch OPISYWAET DIAPAZON INSTRUKCIJ, DLQ KOTORYH ON AKTIWEN, TIP ISKL@ˆENIQ, KOTORYJ ON OBRABATYWAET. kROME TOGO, S OPERATOROM SWQZAN NABOR INSTRUKCIJ, KOTORYE EGO REALIZU@T. pRI WOZNIKNOWENII ISKL@ˆITELXNOJ SITUACII PROSMATRIWAETSQ SPISOK OPERATOROW catch, ˆTOBY USTANOWITX SOOTWETSTWIE. iSKL@ˆITELXNAQ SITUACIQ SOOTWETSTWUET OPERATORU catch, ESLI INSTRUKCIQ, WYZWAW[AQ ISKL@ˆITELXNU@ SITUACI@, NAHODITSQ W SOOTWETSTWU@]EM DIAPAZONE I ISKL@ˆITELXNAQ SITUACIQ PRINADLEVIT PODTIPU TIPA SITUACII, KOTORYE OBRABATYWAET OPERATOR catch. eSLI SOOT-
8.5. organizaciq informacii
w generatore koda
129
WETSTWU@]IJ OPERATOR catch NAJDEN, UPRAWLENIE PEREDAETSQ OBRABOTˆIKU. eSLI NET, TEKU]IJ STEK-FREJM UDALQETSQ, I ISKL@ˆITELXNAQ SITUACIQ WOZBUVDAETSQ WNOWX. pORQDOK OPERATOROW catch W SPISKE WAVEN. iNTERPRETATOR PEREDAET UPRAWLENIE PERWOMU PODHODQ]EMU OPERATORU catch.
8.5
oRGANIZACIQ INFORMACII W GENERATORE KODA
sINTAKSIˆESKOE DEREWO W ˆISTOM WIDE NESET TOLXKO INFORMACI@ O STRUKTURE PROGRAMMY. nA SAMOM DELE W PROCESSE GENERACII KODA TREBUETSQ TAKVE INFORMACIQ O PEREMENNYH (NAPRIMER, IH ADRESA), PROCEDURAH (TAKVE ADRESA, UROWNI), METKAH I T.D. dLQ PREDSTAWLENIQ “TOJ INFORMACII WOZMOVNY RAZLIˆNYE RE[ENIQ. nAIBOLEE RASPROSTRANENY DWA: – INFORMACIQ HRANITSQ W TABLICAH GENERATORA KODA; – INFORMACIQ HRANITSQ W SOOTWETSTWU@]IH WER[INAH DEREWA. rASSMOTRIM, NAPRIMER, STRUKTURU TABLIC, KOTORYE MOGUT BYTX ISPOLXZOWANY W SOˆETANII S lIDER-PREDSTAWLENIEM. pOSKOLXKU lIDER-PREDSTAWLENIE NE SODERVIT INFORMACII OB ADRESAH PEREMENNYH, ZNAˆIT, “TU INFORMACI@ NUVNO FORMIROWATX W PROCESSE OBRABOTKI OB˙QWLENIJ I HRANITX W TABLICAH. —TO KASAETSQ I OPISANIJ MASSIWOW, ZAPISEJ I T.D. kROME TOGO, W TABLICAH TAKVE DOLVNA SODERVATXSQ INFORMACIQ O PROCEDURAH (ADRESA, UROWNI, MODULI, W KOTORYH PROCEDURY OPISANY, I T.D.). pRI WHODE W PROCEDURU W TABLICE UROWNEJ PROCEDUR ZAWODITSQ NOWYJ WHOD – UKAZATELX NA TABLICU OPISANIJ. pRI WYHODE UKAZATELX WOSSTANAWLIWAETSQ NA STAROE ZNAˆENIE. eSLI PROMEVUTOˆNOE PREDSTAWLENIE – DEREWO, TO INFORMACIQ MOVET HRANITXSQ W WER[INAH SAMOGO DEREWA.
8.6
uROWENX PROMEVUTOˆNOGO PREDSTAWLENIQ
kAK WIDNO IZ PRIWEDENNYH PRIMEROW, PROMEVUTOˆNOE PREDSTAWLENIE PROGRAMMY MOVET W RAZLIˆNOJ STEPENI BYTX BLIZKIM LIBO K ISHODNOJ PROGRAMME, LIBO K MA[INE. nAPRIMER, PROMEVUTOˆNOE PREDSTAWLENIE MOVET SODERVATX ADRESA PEREMENNYH, I TOGDA ONO UVE NE MOVET BYTX PERENESENO NA DRUGU@ MA[INU. s DRUGOJ STORONY, PROMEVUTOˆNOE PREDSTAWLENIE MOVET SODERVATX RAZDEL OPISANIJ PROGRAMMY, I TOGDA INFORMACI@ OB ADRESAH MOVNO IZWLEˆX IZ OBRABOTKI OPISANIJ. w TO VE WREMQ QSNO, ˆTO PERWOE BOLEE “FFEKTIWNO, ˆEM WTOROE. oPERATORY UPRAWLENIQ W PROMEVUTOˆNOM PREDSTAWLENII MOGUT BYTX PREDSTAWLENY W ISHODNOM WIDE (W WIDE OPERATOROW QZYKA if, for, while I T.D.), A MOGUT SODERVATXSQ W WIDE PEREHODOW. w PERWOM SLUˆAE NEKOTORAQ INFORMACIQ MOVET BYTX IZWLEˆENA IZ SAMOJ STRUKTURY (NAPRIMER, DLQ OPERATORA for – INFORMACIQ O PEREMENNOJ
130 glawa 8. promevuto˜noe predstawlenie programmy CIKLA, KOTORU@, MOVET BYTX, RAZUMNO HRANITX NA REGISTRE, DLQ OPERATORA case – INFORMACIQ O TABLICE METOK I T.D.). wO WTOROM SLUˆAE PREDSTAWLENIE PRO]E I UNIFICIROWANNEJ. nEKOTORYE FORMY PROMEVUTOˆNOGO PREDSTAWLENIQ UDOBNY DLQ RAZLIˆNOGO RODA OPTIMIZACIJ, NEKOTORYE – NET (NAPRIMER, KOSWENNYE TROJKI, W OTLIˆIE OT PREFIKSNOJ ZAPISI, POZWOLQ@T “FFEKTIWNOE PEREME]ENIE KODA).
gLAWA 9
gENERACIQ KODA zADAˆA GENERATORA KODA – POSTROENIE DLQ PROGRAMMY NA WHODNOM QZYKE “KWIWALENTNOJ MA[INNOJ PROGRAMMY. oBYˆNO W KAˆESTWE WHODA DLQ GENERATORA KODA SLUVIT NEKOTOROE PROMEVUTOˆNOE PREDSTAWLENIE PROGRAMMY. gENERACIQ KODA WKL@ˆAET RQD SPECIFIˆESKIH, OTNOSITELXNO NEZAWISIMYH PODZADAˆ: RASPREDELENIE PAMQTI (W ˆASTNOSTI, RASPREDELENIE REGISTROW), WYBOR KOMAND, GENERACI@ OB˙EKTNOGO (ILI ZAGRUZOˆNOGO) MODULQ. kONEˆNO, NEZAWISIMOSTX “TIH PODZADAˆ OTNOSITELXNA: NAPRIMER, PRI WYBORE KOMAND NELXZQ NE UˆITYWATX SHEMU RASPREDELENIQ PAMQTI, I, NAOBOROT, SHEMA RASPREDELENIQ PAMQTI (REGISTROW, W ˆASTNOSTI) WEDET K GENERACII TOJ ILI INOJ POSLEDOWATELXNOSTI KOMAND. oDNAKO UDOBNO I PRAKTIˆNO “TI ZADAˆI WSE VE RAZDELQTX, OBRA]AQ PRI “TOM WNIMANIE NA IH WZAIMODEJSTWIE. w KAKOJ-TO MERE SHEMA GENERATORA KODA ZAWISIT OT FORMY PROMEVUTOˆNOGO PREDSTAWLENIQ. qSNO, ˆTO GENERACIQ KODA IZ DEREWA OTLIˆAETSQ OT GENERACII KODA IZ TROEK, A GENERACIQ KODA IZ PREFIKSNOJ ZAPISI OTLIˆAETSQ OT GENERACII KODA IZ ORIENTIROWANNOGO GRAFA. w TO VE WREMQ WSE GENERATORY KODA IME@T MNOGO OB]EGO, I OSNOWNYE PRIMENQEMYE ALGORITMY OTLIˆA@TSQ, KAK PRAWILO, TOLXKO W DETALQH, SWQZANNYH S ISPOLXZUEMYM PROMEVUTOˆNYM PREDSTAWLENIEM. w DALXNEJ[EM W KAˆESTWE PROMEVUTOˆNOGO PREDSTAWLENIQ MY BUDEM ISPOLXZOWATX PREFIKSNU@ NOTACI@. a IMENNO, ALGORITMY GENERACII KODA BUDEM IZLAGATX W WIDE ATRIBUTNYH SHEM SO WHODNYM QZYKOM lIDER.
9.1
mODELX MA[INY
pRI IZLOVENII ALGORITMOW GENERACII KODA MY BUDEM SLEDOWATX NEKOTOROJ MODELI MA[INY, W OSNOWU KOTOROJ POLOVENA SISTEMA KOMAND MIKROPROCESSORA Motorola MC68020. w MIKROPROCESSORE IMEETSQ REGISTR – SˆETˆIK KOMAND PC, 8 REGISTROW DANNYH I 8 ADRESNYH REGISTROW. w SISTEME KOMAND ISPOLXZU@TSQ SLEDU@]IE SPOSOBY ADRESACII: 131
glawa 9. generaciq koda
132
ABS – ABSOL@TNAQ: ISPOLNITELXNYM ADRESOM QWLQETSQ ZNAˆENIE ADRESNOGO WYRAVENIQ. IMM – NEPOSREDSTWENNYJ OPERAND: OPERANDOM KOMANDY QWLQETSQ KONSTANTA, ZADANNAQ W ADRESNOM WYRAVENII. D – PRQMAQ ADRESACIQ ˆEREZ REGISTR DANNYH, ZAPISYWAETSQ KAK hn, OPERAND NAHODITSQ W REGISTRE hn. a – PRQMAQ ADRESACIQ ˆEREZ ADRESNYJ REGISTR, ZAPISYWAETSQ KAK An, OPERAND NAHODITSQ W REGISTRE An. INDIRECT – ZAPISYWAETSQ KAK (An), ADRES OPERANDA NAHODITSQ W ADRESNOM REGISTRE An. POST – POST-INKREMENTNAQ ADRESACIQ, ZAPISYWAETSQ KAK (an)+, ISPOLNITELXNYJ ADRES ESTX ZNAˆENIE ADRESNOGO REGISTRA An I POSLE ISPOLNENIQ KOMANDY ZNAˆENIE “TOGO REGISTRA UWELIˆIWAETSQ NA DLINU OPERANDA. PRE – PRE-INKREMENTNAQ ADRESACIQ, ZAPISYWAETSQ KAK -(an): PERED ISPOLNENIEM OPERACII SODERVIMOE ADRESNOGO REGISTRA An UMENX[AETSQ NA DLINU OPERANDA, ISPOLNITELXNYJ ADRES RAWEN NOWOMU SODERVIMOMU ADRESNOGO REGISTRA. INDISP – KOSWENNAQ ADRESACIQ SO SME]ENIEM, ZAPISYWAETSQ KAK (bd,An), ISPOLNITELXNYJ ADRES WYˆISLQETSQ KAK (An)+d – SODERVIMOE An PL@S d. INDEX – KOSWENNAQ ADRESACIQ S INDEKSOM, ZAPISYWAETSQ KAK (bd,An,Xn*sc), ISPOLNITELXNYJ ADRES WYˆISLQETSQ KAK (An)+bd+(Xn)*sc – SODERVIMOE ADRESNOGO REGISTRA + ADRESNOE SME]ENIE + SODERVIMOE INDEKSNOGO REGISTRA, UMNOVENNOE NA sc. INDIRPC – KOSWENNAQ ˆEREZ PC (SˆETˆIK KOMAND), ZAPISYWAETSQ KAK (bd,PC), ISPOLNITELXNYJ ADRES OPREDELQETSQ WYRAVENIEM (PC)+bd. INDEXPC – KOSWENNAQ ˆEREZ PC SO SME]ENIEM, ZAPISYWAETSQ KAK (bd,PC,Xn*sc), ISPOLNITELXNYJ ADRES OPREDELQETSQ WYRAVENIEM (PC)+bd+(Xn)*sc. INDPRE – PRE-KOSWENNAQ ˆEREZ PAMQTX, ZAPISYWAETSQ KAK ([bd,An,sc*Xn],od) (SHEMA WYˆISLENIQ ADRESOW DLQ “TOGO I TREH POSLEDU@]IH SPOSOBOW ADRESACII PRIWEDENA NIVE). INDPOST – POST-KOSWENNAQ ˆEREZ PAMQTX: ([bd,An],sc*Xn,od). INDPREPC – PRE-KOSWENNAQ ˆEREZ PC: ([bd,PC,sc*Xn],od). INDPOSTPC – POST-KOSWENNAQ ˆEREZ PC: ([bd,PC],Xn,od). zDESX bd – “TO 16- ILI 32-BITNAQ KONSTANTA, NAZYWAEMAQ SME]ENIEM, od – 16- ILI 32-BITNAQ LITERALXNAQ KONSTANTA, NAZYWAEMAQ WNE[NIM SME]ENIEM. —TI SPOSOBY ADRESACII MOGUT ISPOLXZOWATXSQ W UPRO]ENNYH FORMAH BEZ SME]ENIJ bd I/ILI od I BEZ REGISTROW An ILI Xn. sLEDU@]IE PRIMERY ILL@STRIRU@T KOSWENNU@ POSTINDEKSNU@ ADRESACI@: MOVE MOVE MOVE MOVE MOVE MOVE
D0, D0, D0, D0, D0, D0,
([A0]) ([4,A0]) ([A0],6) ([A0],D3) ([A0],D4,12) ([$12345678,A0],D4,$FF000000)
9.1. modelx ma–iny
133
iNDEKSNYJ REGISTR Xn MOVET MAS[TABIROWATXSQ (UMNOVATXSQ) NA 2,4,8, ˆTO ZAPISYWAETSQ KAK sc*Xn. nAPRIMER, W ISPOLNITELXNOM ADRESE ([24,A0,4*D0]) SODERVIMOE KWADRATNYH SKOBOK WYˆISLQETSQ KAK [A0] + 4 * [D0] + 24. —TI SPOSOBY ADRESACII RABOTA@T SLEDU@]IM OBRAZOM. kAVDYJ ISPOLNITELXNYJ ADRES SODERVIT PARU KWADRATNYH SKOBOK [...] WNUTRI PARY KRUGLYH SKOBOK, T.E. ([...], ... ). sNAˆALA WYˆISLQETSQ SODERVIMOE KWADRATNYH SKOBOK, W REZULXTATE ˆEGO POLUˆAETSQ 32-BITNYJ UKAZATELX. nAPRIMER, ESLI ISPOLXZUETSQ POSTINDEKSNAQ FORMA [20,A2], TO ISPOLNITELXNYJ ADRES – “TO 20 + [A2]. aNALOGIˆNO, DLQ PREINDEKSNOJ FORMY [12,A4,D5] ISPOLNITELXNYJ ADRES – “TO 12 + [A4] + [D5]. uKAZATELX, SFORMIROWANNYJ SODERVIMYM KWADRATNYH SKOBOK, ISPOLXZUETSQ DLQ DOSTUPA W PAMQTX, ˆTOBY POLUˆITX NOWYJ UKAZATELX (OTS@DA TERMIN KOSWENNAQ ADRESACIQ ˆEREZ PAMQTX). k “TOMU NOWOMU UKAZATEL@ DOBAWLQETSQ SODERVIMOE WNE[NIH KRUGLYH SKOBOK I TAKIM OBRAZOM FORMIRUETSQ ISPOLNITELXNYJ ADRES OPERANDA. w DALXNEJ[EM IZLOVENII BUDUT ISPOLXZOWANY SLEDU@]IE KOMANDY (W ˆASTNOSTI, RASSMATRIWA@TSQ TOLXKO ARIFMETIˆESKIE KOMANDY S CELYMI OPERANDAMI, NO NE S PLAWA@]IMI): MOVEA ia, a – ZAGRUZITX SODERVIMOE PO ISPOLNITELXNOMU ADRESU ia NA ADRESNYJ REGISTR a. MOVE ia1, ia2 – SODERVIMOE PO ISPOLNITELXNOMU ADRESU ia1 PEREPISATX PO ISPOLNITELXNOMU ADRESU ia2. MOVEM SPISOK_REGISTROW, ia – SOHRANITX UKAZANNYE REGISTRY W PAMQTI, NAˆINAQ S ADRESA ia (REGISTRY UKAZYWA@TSQ MASKOJ W SAMOJ KOMANDE). MOVEM ia, SPISOK_REGISTROW – WOSSTANOWITX UKAZANNYE REGISTRY IZ PAMQTI, NAˆINAQ S ADRESA ia (REGISTRY UKAZYWA@TSQ MASKOJ W SAMOJ KOMANDE). LEA ia, a – ZAGRUZITX ISPOLNITELXNYJ ADRES ia NA ADRESNYJ REGISTR a. MUL ia, D – UMNOVITX SODERVIMOE PO ISPOLNITELXNOMU ADRESU ia NA SODERVIMOE REGISTRA DANNYH D I REZULXTAT RAZMESTITX W D (NA SAMOM DELE W SISTEME KOMAND IME@TSQ DWE RAZLIˆNYE KOMANDY MULS I MULU DLQ ˆISEL SO ZNAKOM I ˆISEL BEZ ZNAKA SOOTWETSTWENNO; DLQ UPRO]ENIQ MY NE BUDEM PRINIMATX WO WNIMANIE “TO RAZLIˆIE). DIV ia, D – RAZDELITX SODERVIMOE REGISTRA DANNYH D NA SODERVIMOE PO ISPOLNITELXNOMU ADRESU ia I REZULXTAT RAZMESTITX W D. ADD ia, D – SLOVITX SODERVIMOE PO ISPOLNITELXNOMU ADRESU ia S SODERVIMYM REGISTRA DANNYH D I REZULXTAT RAZMESTITX W D. SUB ia, D – WYˆESTX SODERVIMOE PO ISPOLNITELXNOMU ADRESU ia IZ SODERVIMOGO REGISTRA DANNYH D I REZULXTAT RAZMESTITX W D. kOMANDY CMP I TST FORMIRU@T RAZRQDY REGISTRA SOSTOQNIJ. wSEGO IMEETSQ 4 RAZRQDA: Z – PRIZNAK NULEWOGO REZULXTATA, N – PRIZNAK OTRICATELXNOGO REZULXTATA, V – PRIZNAK PEREPOLNENIQ, C – PRIZNAK PERENOSA. CMP ia, D – IZ SODERVIMOGO REGISTRA DANNYH D WYˆITAETSQ SODERVIMOE PO ISPOLNITELXNOMU ADRESU ia, PRI “TOM FORMIRUETSQ WSE RAZRQDY REGISTRA SOSTOQNIJ, NO SODERVIMOE REGISTRA D NE MENQETSQ.
134
glawa 9. generaciq koda
TST ia – WYRABOTATX RAZRQD Z REGISTRA SOSTOQNIJ PO ZNAˆENI@, NAHODQ]EMUSQ PO ISPOLNITELXNOMU ADRESU ia. BNE ia – USLOWNYJ PEREHOD PO PRIZNAKU Z = 1 (NE RAWNO) PO ISPOLNITELXNOMU ADRESU ia. BEQ ia – USLOWNYJ PEREHOD PO PRIZNAKU Z = 0 (RAWNO) PO ISPOLNITELXNOMU ADRESU ia. BLE ia – USLOWNYJ PEREHOD PO PRIZNAKU N or Z (MENX[E ILI RAWNO) PO ISPOLNITELXNOMU ADRESU ia. BGT ia – USLOWNYJ PEREHOD PO PRIZNAKU not N (BOLX[E) PO ISPOLNITELXNOMU ADRESU ia. BLT ia – USLOWNYJ PEREHOD PO PRIZNAKU N (MENX[E) PO ISPOLNITELXNOMU ADRESU ia. BRA ia – BEZUSLOWNYJ PEREHOD PO ADRESU ia. JMP ia – BEZUSLOWNYJ PEREHOD PO ISPOLNITELXNOMU ADRESU. RTD RAZMER_LOKALXNYH – WOZWRAT IZ PODPROGRAMMY S UKAZANIEM RAZMERA LOKALXNYH. LINK A, RAZMER_LOKALXNYH – W STEKE SOHRANQETSQ ZNAˆENIE REGISTRA a, W REGISTR a ZANOSITSQ UKAZATELX NA “TO MESTO W STEKE I UKAZATELX STEKA PRODWIGAETSQ NA RAZMER LOKALXNYH. UNLK A – STEK SOKRA]AETSQ NA RAZMER LOKALXNYH I REGISTR a WOSSTANAWLIWAETSQ IZ STEKA.
9.2
dINAMIˆESKAQ ORGANIZACIQ PAMQTI
dINAMIˆESKAQ ORGANIZACIQ PAMQTI - “TO ORGANIZACIQ PAMQTI PERIODA ISPOLNENIQ PROGRAMMY. oPERATIWNAQ PAMQTX PROGRAMMY OBYˆNO SOSTOIT IZ NESKOLXKIH OSNOWNYH RAZDELOW: STEK (MAGAZIN), KUˆA, OBLASTX STATIˆESKIH DANNYH (INICIALIZIROWANNYH I NEINICIALIZIROWANNYH). nAIBOLEE SLOVNOJ QWLQETSQ RABOTA SO STEKOM. wOOB]E GOWORQ, STEK PERIODA ISPOLNENIQ NEOBHODIM DLQ PROGRAMM NE NA WSEH QZYKAH PROGRAMMIROWANIQ. nAPRIMER, W RANNIH WERSIQH fORTRANA NET REKURSII, TAK ˆTO PROGRAMMA MOVET ISPOLNQTXSQ BEZ STEKA. s DRUGOJ STORONY, ISPOLNENIE PROGRAMMY S REKURSIEJ MOVET BYTX REALIZOWANO I BEZ STEKA (TOGO VE “FFEKTA MOVNO DOSTIˆX, NAPRIMER, I S POMO]X@ SPISKOWYH STRUKTUR). oDNAKO, DLQ “FFEKTIWNOJ REALIZACII POLXZU@TSQ STEKOM, KOTORYJ, KAK PRAWILO, PODDERVIWAETSQ NA UROWNE MA[INNYH KOMAND. rASSMOTRIM SHEMU ORGANIZACII MAGAZINA PERIODA WYPOLNENIQ DLQ PROSTEJ[EGO SLUˆAQ (KAK, NAPRIMER, W QZYKE pASKALX), KOGDA WSE PEREMENNYE W MAGAZINE (FAKTIˆESKIE PARAMETRY I LOKALXNYE PEREMENNYE) IME@T IZWESTNYE PRI TRANSLQCII SME]ENIQ. mAGAZIN SLUVIT DLQ HRANENIQ LOKALXNYH PEREMENNYH (I PARAMETROW) I OBRA]ENIQ K NIM W QZYKAH, DOPUSKA@]IH REKURSIWNYE WYZOWY PROCEDUR. e]E ODNOJ ZADAˆEJ, KOTORU@ NEOBHODIMO RE[ATX PRI TRANSLQCII QZYKOW S BLOˆNOJ STRUKTUROJ – OBESPEˆENIE REALIZACII MEHANIZMOW STATIˆESKOJ WLOVENNOSTI. pUSTX IMEETSQ SLEDU@]IJ FRAGMENT PROGRAMMY NA pASKALE:
9.2. dinami˜eskaq organizaciq pamqti
135
procedure P1; var V1; procedure P2; var V2; begin ... P2; V1:=... V2:=... ... end; begin ... P2; ... end; w PROCESSE WYPOLNENIQ “TOJ PROGRAMMY, NAHODQSX W PROCEDURE P2, MY DOLVNY IMETX DOSTUP K POSLEDNEMU “KZEMPLQRU ZNAˆENIJ PEREMENNYH PROCEDURY P2 I K “KZEMPLQRU ZNAˆENIJ PEREMENNYH PROCEDURY P1, IZ KOTOROJ BYLA WYZWANA P2. kROME TOGO, NEOBHODIMO OBESPEˆITX WOSSTANOWLENIE SOSTOQNIQ PROGRAMMY PRI ZAWER[ENII WYPOLNENIQ PROCEDURY. mY RASSMOTRIM DWE WOZMOVNYE SHEMY DINAMIˆESKOJ ORGANIZACII PAMQTI: SHEMU SO STATIˆESKOJ CEPOˆKOJ I S DISPLEEM W PAMQTI. w PERWOM SLUˆAE WSE STATIˆESKIE KONTEKSTY SWQZANY W SPISOK, KOTORYJ NAZYWAETSQ STATIˆESKOJ CEPOˆKOJ; W KAVDOJ ZAPISI DLQ PROCEDURY W MAGAZINE HRANITSQ UKAZATELX NA ZAPISX STATIˆESKI OHWATYWA@]EJ PROCEDURY (POMIMO, KONEˆNO, UKAZATELQ DINAMIˆESKOJ CEPOˆKI – UKAZATELQ NA “BAZU” DINAMIˆESKI PREDYDU]EJ PROCEDURY). wO WTOROM SLUˆAE DLQ HRANENIQ SSYLOK NA STATIˆESKIE KONTEKSTY ISPOLXZUETSQ MASSIW, NAZYWAEMYJ DISPLEEM. iSPOLXZOWANIE TOJ ILI INOJ SHEMY OPREDELQETSQ, POMIMO PROˆIH USLOWIJ, PREVDE WSEGO ˆISLOM ADRESNYH REGISTROW.
9.2.1 oRGANIZACIQ MAGAZINA SO STATIˆESKOJ CEPOˆKOJ iTAK, W SLUˆAE STATIˆESKOJ CEPOˆKI MAGAZIN ORGANIZOWAN, KAK “TO IZOBRAVENO NA RIS. 9.1. tAKIM OBRAZOM, NA ZAPISX TEKU]EJ PROCEDURY W MAGAZINE UKAZYWAET REGISTR BP (Base Pointer), S KOTOROGO NAˆINAETSQ DINAMIˆESKAQ CEPOˆKA. nA STATIˆESKU@ CEPOˆKU UKAZYWAET REGISTR LP (Link Pointer). w KAˆESTWE REGISTROW BP I LP W RAZLIˆNYH SISTEMAH KOMAND MOGUT ISPOLXZOWATXSQ UNIWERSALXNYE, ADRESNYE ILI SPECIALXNYE REGISTRY. lOKALXNYE PEREMENNYE OTSˆITYWA@TSQ OT REGISTRA BP WWERH, FAKTIˆESKIE PARAMETRY – WNIZ S UˆETOM PAMQTI, ZANQTOJ TOˆKOJ WOZWRATA I SAMIM SOHRANENNYM REGISTROM BP.
glawa 9. generaciq koda
136
CEHMHIJDKL"MN#O:DPRQTS"G
.- 4
)$""$,)
/
& ' "(")$" 23/456,7 % ) "!#$"
8:94 )$" ) /0;/