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;: ) )+<) 6 3!>=? ! @? 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<=’9’ && 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=LT; return(RELOP);} "<=" {yylval=LE; return(RELOP);} "=" {yylval=EQ; return(RELOP);} "<>" {yylval=NE; return(RELOP);} ">" {yylval=GT; return(RELOP);} ">=" {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 “<=”, TO PERWOMU SIMWOLU SOOTWETSTWUET OBRAZEC “<”, NO “TO NE SAMYJ DLINNYJ OBRAZEC, KOTORYJ SOOTWETSTWUET PREFIKSU WHODA. sTRATEGIQ WYBORA SAMOGO DLINNOGO PREFIKSA LEGKO RAZRE[AET TAKOGO RODA KONFLIKTY.
44
glawa 3. leksi˜eskij analiz
gLAWA 4
sINTAKSIˆESKIJ ANALIZ 4.1
ks-GRAMMATIKI I mp-AWTOMATY
pUSTX G = (N, T, P, S) – KONTEKSTNO-SWOBODNAQ GRAMMATIKA. wWEDEM NESKOLXKO WAVNYH PONQTIJ I OPREDELENIJ. wYWOD, W KOTOROM W L@BOJ SENTENCIALXNOJ FORME NA KAVDOM [AGE DELAETSQ PODSTANOWKA SAMOGO LEWOGO NETERMINALA, NAZYWAETSQ LEWOSTORONNIM. eSLI S ⇒∗ u W PROCESSE LEWOSTORONNEGO WYWODA, TO u – LEWAQ SENTENCIALXNAQ FORMA. aNALOGIˆNO OPREDELQETSQ PRAWOSTORONNIJ WYWOD. bUDEM OBOZNAˆATX [AGI LEWOGO (PRAWOGO) WYWODA POSREDSTWOM ⇒l (⇒r ). uPORQDOˆENNYM GRAFOM NAZYWAETSQ PARA (V, E), GDE V ESTX MNOVESTWO WER[IN, A E – MNOVESTWO LINEJNO UPORQDOˆENNYH SPISKOW DUG, KAVDYJ “LEMENT KOTOROGO IMEET WID ((v, v1 ), (v, v2 ), ... , (v, vn )). —TOT “LEMENT UKAZYWAET, ˆTO IZ WER[INY v WYHODQT n DUG, PRIˆEM PERWOJ IZ NIH SˆITAETSQ DUGA, WHODQ]AQ W WER[INU v1 , WTOROJ – DUGA, WHODQ]AQ W WER[INU v2 , I T.D. uPORQDOˆENNYM POMEˆENNYM DEREWOM NAZYWAETSQ UPORQDOˆENNYJ GRAF (V, E), OSNOWOJ KOTOROGO QWLQETSQ DEREWO I DLQ KOTOROGO OPREDELENA FUNKCIQ f : V → F (FUNKCIQ RAZMETKI) DLQ NEKOTOROGO MNOVESTWA F . uPORQDOˆENNOE POMEˆENNOE DEREWO D NAZYWAETSQ DEREWOM WYWODA (ILI DEREWOM RAZBORA) CEPOˆKI w W ks-GRAMMATIKE G = (N, T, P, S), ESLI WYPOLNENY SLEDU@]IE USLOWIQ: (1) KORENX DEREWA D POMEˆEN S; (2) KAVDYJ LIST POMEˆEN LIBO a ∈ T , LIBO e; (3) KAVDAQ WNUTRENNQQ WER[INA POMEˆENA NETERMINALOM A ∈ N ; (4) ESLI X – NETERMINAL, KOTORYM POMEˆENA WNUTRENNQQ WER[INA I X1 , ... , Xn – METKI EE PRQMYH POTOMKOW W UKAZANNOM PORQDKE, TO X → X1 ... Xk – PRAWILO IZ MNOVESTWA P ; (5) cEPOˆKA, SOSTAWLENNAQ IZ WYPISANNYH SLEWA NAPRAWO METOK LISTXEW, RAWNA w. 45
46
glawa 4. sintaksi˜eskij analiz
gRAMMATIKA G NAZYWAETSQ NEODNOZNAˆNOJ, ESLI SU]ESTWUET CEPOˆKA w, DLQ KOTOROJ IMEETSQ DWA ILI BOLEE RAZLIˆNYH DEREWXEW WYWODA W G. gRAMMATIKA G NAZYWAETSQ LEWOREKURSIWNOJ, ESLI W NEJ IMEETSQ NETERMINAL A TAKOJ, ˆTO SU]ESTWUET WYWOD A ⇒+ Aα DLQ NEKOTOROJ CEPOˆKI α. aWTOMAT S MAGAZINNOJ PAMQTX@ (mp-AWTOMAT) – “TO SEMERKA M = (Q, T, Γ, D, q0 , Z0 , F ), GDE (1) Q – KONEˆNOE MNOVESTWO SOSTOQNIJ, PREDSTAWLQ@]IH WSEWOZMOVNYE SOSTOQNIQ UPRAWLQ@]EGO USTROJSTWA; (2) T – KONEˆNYJ WHODNOJ ALFAWIT; (3) Γ – KONEˆNYJ ALFAWIT MAGAZINNYH SIMWOLOW; (4) D – OTOBRAVENIE MNOVESTWA Q × (T ∪ {e}) × Γ W MNOVESTWO WSEH KONEˆNYH PODMNOVESTW Q × Γ∗ , NAZYWAEMOE FUNKCIEJ PEREHODOW; (5) q0 ∈ Q – NAˆALXNOE SOSTOQNIE UPRAWLQ@]EGO USTROJSTWA; (6) Z0 ∈ Γ – SIMWOL, NAHODQ]IJSQ W MAGAZINE W NAˆALXNYJ MOMENT (NAˆALXNYJ SIMWOL MAGAZINA); (7) F ⊆ Q – MNOVESTWO ZAKL@ˆITELXNYH SOSTOQNIJ. kONFIGURACIEJ mp-AWTOMATA NAZYWAETSQ TROJKA (q, w, u), GDE (1) q ∈ Q – TEKU]EE SOSTOQNIE UPRAWLQ@]EGO USTROJSTWA; (2) w ∈ T ∗ – NEPROˆITANNAQ ˆASTX WHODNOJ CEPOˆKI; PERWYJ SIMWOL CEPOˆKI w NAHODITSQ POD WHODNOJ GOLOWKOJ; ESLI w = e, TO SˆITAETSQ, ˆTO WSQ WHODNAQ LENTA PROˆITANA; (3) u ∈ Γ∗ – SODERVIMOE MAGAZINA; SAMYJ LEWYJ SIMWOL CEPOˆKI u SˆITAETSQ WERHNIM SIMWOLOM MAGAZINA; ESLI u = e, TO MAGAZIN SˆITAETSQ PUSTYM. tAKT RABOTY mp-AWTOMATA M BUDEM PREDSTAWLQTX W WIDE BINARNOGO OTNO[ENIQ `, OPREDELENNOGO NA KONFIGURACIQH. bUDEM PISATX (q, aw, Zu) ` (p, w, vu), ESLI MNOVESTWO D(q, a, Z) SODERVIT (p, v), GDE q, p ∈ Q, a ∈ T ∪ {e}, w ∈ T ∗ , Z ∈ Γ I u, v ∈ Γ∗ . nAˆALXNOJ KONFIGURACIEJ mp-AWTOMATA M NAZYWAETSQ KONFIGURACIQ WIDA (q0 , w, Z0 ), GDE w ∈ T ∗ , T.E. UPRAWLQ@]EE USTROJSTWO NAHODITSQ W NAˆALXNOM SOSTOQNII, WHODNAQ LENTA SODERVIT CEPOˆKU, KOTORU@ NUVNO PROANALIZIROWATX, A W MAGAZINE NAHODITSQ TOLXKO NAˆALXNYJ SIMWOL Z0 . zAKL@ˆITELXNAQ KONFIGURACIQ – “TO KONFIGURACIQ WIDA (q, e, u), GDE q ∈ F , u ∈ Γ∗ , T.E. UPRAWLQ@]EE USTROJSTWO NAHODITSQ W ODNOM IZ ZAKL@ˆITELXNYH SOSTOQNIJ, A WHODNAQ CEPOˆKA CELIKOM PROˆITANA.
4.1. ks-grammatiki i mp-awtomaty
47
wWEDEM TRANZITIWNOE I REFLEKSIWNO-TRANZITIWNOE ZAMYKANIE OTNO[ENIQ `, A TAKVE EGO STEPENX k > 0 (OBOZNAˆAEMYE `+ , `∗ I `k SOOTWETSTWENNO). gOWORQT, ˆTO CEPOˆKA w DOPUSKAETSQ mp-AWTOMATOM M , ESLI (q0 , w, Z0 ) `∗ (q, e, u) DLQ NEKOTORYH q ∈ F I u ∈ Γ∗ . qZYK, DOPUSKAEMYJ (RASPOZNAWAEMYJ, OPREDELQEMYJ) AWTOMATOM M (OBOZNAˆAETSQ L(M )) – “TO MNOVESTWO WSEH CEPOˆEK, DOPUSKAEMYH AWTOMATOM M . pRIMER 4.1. rASSMOTRIM mp-AWTOMAT M = ({q0 , q1 , q2 }, {a, b}, {Z, a, b}, D, q0 , Z, {q2 }), U KOTOROGO FUNKCIQ PEREHODOW D SODERVIT SLEDU@]IE “LEMENTY: D(q0 , a, Z) = {(q0 , aZ)}, D(q0 , b, Z) = {(q0 , bZ)}, D(q0 , a, a) = {(q0 , aa), {q1 , e)}, D(q0 , a, b) = {(q0 , ab)}, D(q0 , b, a) = {(q0 , ba)}, D(q0 , b, b) = {(q0 , bb), (q1 , e)}, D(q1 , a, a) = {(q1 , e)}, D(q1 , b, b) = {(q1 , e)}, D(q1 , e, Z) = {(q2 , e)}. nETRUDNO POKAZATX, ˆTO L(M ) = {ww R |w ∈ {a, b}+ }, GDE wR OBOZNAˆAET OBRA]ENIE (“PEREWORAˆIWANIE”) CEPOˆKI w.
iNOGDA DOPUSTIMOSTX OPREDELQ@T NESKOLXKO INAˆE: CEPOˆKA w DOPUSKAETSQ mp-AWTOMATOM M , ESLI (q0 , w, Z0 ) `∗ (q, e, e) DLQ NEKOTOROGO q ∈ Q. w TAKOM SLUˆAE GOWORQT, ˆTO AWTOMAT DOPUSKAET CEPOˆKU OPUSTO[ENIEM MAGAZINA. —TI OPREDELENIQ “KWIWALENTNY, IBO SPRAWEDLIWA tEOREMA 4.1. qZYK DOPUSKAETSQ MAGAZINNYM AWTOMATOM TOGDA I TOLXKO TOGDA, KOGDA ON DOPUSKAETSQ (NEKOTORYM DRUGIM AWTOMATOM) OPUSTO[ENIEM MAGAZINA. dOKAZATELXSTWO. pUSTX L = L(M ) DLQ NEKOTOROGO mp-AWTOMATA M = (Q, T, Γ, D, q0 , Z0 , F ). pOSTROIM NOWYJ mp-AWTOMAT M 0 , DOPUSKA@]IJ TOT VE QZYK OPUSTO[ENIEM MAGAZINA. pUSTX M 0 = (Q∪{q00 , qe }, T, Γ∪{Z00 }, D0 , q00 , Z00 , ∅), GDE FUNKCIQ PEREHODOW D0 OPREDELENA SLEDU@]IM OBRAZOM: 1. eSLI (r, u) ∈ D(q, a, Z), TO (r, u) ∈ D 0 (q, a, Z) DLQ WSEH q ∈ Q, a ∈ T ∪ {e} I Z ∈ Γ; 2. D0 (q00 , e, Z00 ) = {(q0 , Z0 Z00 )}; 3. dLQ WSEH q ∈ F I Z ∈ Γ ∪ {Z00 } MNOVESTWO D 0 (q, e, Z) SODERVIT (qe , e); 4. D0 (qe , e, Z) = {(qe , e)} DLQ WSEH Z ∈ Γ ∪ {Z00 }.
48
glawa 4. sintaksi˜eskij analiz
aWTOMAT SNAˆALA PEREHODIT W KONFIGURACI@ (q0 , w, Z0 Z00 ) W SOOTWETSTWII S OPREDELENIEM D 0 W P.2, ZATEM W (q, e, Y1 ... Yk Z00 ), q ∈ F W SOOTWETSTWII S P.1, ZATEM W (qe , e, Y1 ... Yk Z00 ), q ∈ F W SOOTWETSTWII S P.3, ZATEM W (qe , e, e) W SOOTWETSTWII S P.4. nETRUDNO POKAZATX PO INDUKCII, ˆTO (q0 , w, Z0 ) `+ (q, e, u) (GDE q ∈ F ) WYPOLNQETSQ DLQ AWTOMATA M TOGDA I TOLXKO TOGDA, KOGDA (q00 , w, Z00 ) `+ (qe , e, e) WYPOLNQETSQ DLQ AWTOMATA M 0 . pO“TOMU L(M ) = L0 , GDE L0 – QZYK, DOPUSKAEMYJ AWTOMATOM M 0 OPUSTO[ENIEM MAGAZINA. oBRATNO, PUSTX M = (Q, T, Γ, D, q0 , Z0 , ∅) – mp-AWTOMAT, DOPUSKA@]IJ OPUSTO[ENIEM MAGAZINA QZYK L. pOSTROIM AWTOMAT M 0 , DOPUSKA@]IJ TOT VE QZYK PO ZAKL@ˆITELXNOMU SOSTOQNI@. pUSTX M 0 = (Q∪{q00 , qf }, T, Γ∪{X}, D0 , q00 , Z00 , {qf }), GDE D0 OPREDELQETSQ SLEDU@]IM OBRAZOM: 1. D0 (q00 , e, Z00 ) = {(q0 , Z0 Z00 )} – PEREHOD W “REVIM M ”; 2. dLQ KAVDOGO q ∈ Q, a ∈ T ∪ {e}, I Z ∈ Γ OPREDELIM D 0 (q, a, Z) = D(q, a, Z) – RABOTA W “REVIME M ”; 3. dLQ WSEH q ∈ Q, (qf , e) ∈ D0 (q, e, Z00 ) – PEREHOD W ZAKL@ˆITELXNOE SOSTOQNIE. nETRUDNO POKAZATX PO INDUKCII, ˆTO L = L(M 0 ). oDNIM IZ WAVNEJ[IH REZULXTATOW TEORII KONTEKSTNO-SWOBODNYH QZYKOW QWLQETSQ DOKAZATELXSTWO “KWIWALENTNOSTI mp-AWTOMATOW I ks-GRAMMATIK. tEOREMA 4.2. qZYK QWLQETSQ KONTEKSTNO-SWOBODNYM TOGDA I TOLXKO TOGDA, KOGDA ON DOPUSKAETSQ MAGAZINNYM AWTOMATOM. dOKAZATELXSTWO. pUSTX G = (N, T, P, S) – ks-GRAMMATIKA. pOSTROIM mp-AWTOMAT M , DOPUSKA@]IJ QZYK L(G) OPUSTO[ENIEM MAGAZINA. pUSTX M = ({q}, T, N ∪ T, D, q, S, ∅), GDE D OPREDELQETSQ SLEDU@]IM OBRAZOM: 1. eSLI A → u ∈ P , TO (q, u) ∈ D(q, e, A); 2. D(q, a, a) = {(q, e)} DLQ WSEH a ∈ T . fAKTIˆESKI, “TOT mp-AWTOMAT W TOˆNOSTI MODELIRUET WSE WOZMOVNYE WYWODY W GRAMMATIKE G. nETRUDNO POKAZATX PO INDUKCII, ˆTO DLQ L@BOJ CEPOˆKI w ∈ T ∗ WYWOD S ⇒+ w W GRAMMATIKE G SU]ESTWUET TOGDA I TOLXKO TOGDA, KOGDA SU]ESTWUET POSLEDOWATELXNOSTX TAKTOW (q, w, S) `+ (q, e, e) AWTOMATA M . oBRATNO, PUSTX M = (Q, T, Γ, D, q0 , Z0 , ∅) – mp-AWTOMAT, DOPUSKA@]IJ OPUSTO[ENIEM MAGAZINA QZYK L. pOSTROIM GRAMMATIKU G, POROVDA@]U@ QZYK L.
4.1. ks-grammatiki i mp-awtomaty
49
pUSTX G = ({ [qZr] | q, r ∈ Q, Z ∈ Γ} ∪ {S}, T, P, S), GDE P SOSTOIT IZ PRAWIL SLEDU@]EGO WIDA: 1. eSLI (r, X1 ... Xk ) ∈ D(q, a, Z), k > 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<=n;i++){
glawa 4. sintaksi˜eskij analiz
60
for (j=1;j<=i-1;j++){ PUSTX Aj → β1 | β2 | ... | βk - WSE TEKU]IE PRAWILA DLQ Aj ; ZAMENITX WSE PRAWILA WIDA Ai → Aj α NA PRAWILA Ai → β1 α | β2 α | ... | βk α; } UDALITX PRAWILA WIDA Ai → Ai ; UDALITX NEPOSREDSTWENNU@ LEWU@ REKURSI@ W PRAWILAH DLQ A i ; } pOSLE (i − 1)-J ITERACII WNE[NEGO CIKLA NA [AGE 2 DLQ L@BOGO PRAWILA WIDA Ak → As α, GDE k < i, WYPOLNQETSQ s > k. w REZULXTATE NA SLEDU@]EJ ITERACII (PO i) WNUTRENNIJ CIKL (PO j) POSLEDOWATELXNO UWELIˆIWAET NIVN@@ GRANICU PO m W L@BOM PRAWILE Ai → Am α, POKA NE BUDET m > 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 ’<’ nOMER ’>’ gLOBALXNYJaTRIBUT ::= iMQaTRIBUTA ’<’ nETERMINAL ’>’ 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<0>=V<1>+V<3>; P<3>=1. RULE Int ::= e SEMANTICS V<0>=0; P<0>=0. RULE Int ::= digit Int SEMANTICS V<0>=VAL<1>*10**P<2>+V<2>; P<0>=P<2>+1. RULE Frac ::= e SEMANTICS V<0>=0. RULE Frac ::= digit Frac SEMANTICS V<0>=VAL<1>*10**(-P<0>)+V<2>; P<2>=P<0>+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<3>); PreDefine(Env<3>); Pred<3>=NULL }. RULE Block ::= ’begin’ [( Declaration )] [ (Statement) ] ’end’
99
100
glawa 6. prowerka kontekstnyh uslowij
SEMANTICS 0: if (!=NULL){ Init(Env<0>); Pred<0>= }. RULE Declaration ::= ’type’ ( Type_Decl ). RULE Type_Decl ::= Ident ’=’ Type_Defin SEMANTICS TElement V; if (Find(Val<1>,Env)!=NULL) Error("Identifier declared twice"); // iDENTIFIKATOR UVE OB˙QWLEN W BLOKE // w L@BOM SLUˆAE ZANOSITSQ NOWOE OPISANIE V.Name=Val<1>; V.Object=TypeObject; V.Type=ElementType<3>; Include(V,Env). RULE Type_Defin ::= ’ARRAY’ Index ’OF’ Type_Defin SEMANTICS ElementType<0>=ArrayType(ElementType<4>,Val<2>). RULE Type_Defin ::= Type_Use SEMANTICS ElementType<0>=ElementType<1>. RULE Type_Use ::= Ident SEMANTICS TElement * PV; PV=FindObject(Val<1>,,TypeObject,); ElementType<0>=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<1>){ // 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<3>; Include(V,Env) }. // N - RABOˆAQ PEREMENNAQ DLQ “LEMENTOW SPISKA. dLQ KAVDOGO // IDENTIFIKATORA IZ MNOVESTWA IDENTIFIKATOROW Ident_Set<1> // SFORMIROWATX OB˙EKT-PEREMENNU@ W TEKU]EJ KOMPONENTE SREDY // S SOOTWETSTWU@]IMI HARAKTERISTIKAMI. RULE Ident_List ::= ( Ident /’,’ ) SEMANTICS 0:Init(Ident_Set<0>); 1A:Include(Val<1>,Ident_Set<0>). RULE Statement ::= Block ’;’. RULE Statement ::= Variable ’=’ Variable ’;’ SEMANTICS if (ElementType<1>!=NULL) && (ElementType<3>!=NULL) && (ElementType<1>!=ElementType<3>) Error("Incompatible Expression Types"). RULE Variable ::= Ident Access SEMANTICS TElement * PV; PV=FindObject(Val<1>,,VarObject,); if (PV==NULL){ Error("Identifier used is not declared"); ElementType<2>=NULL } else ElementType<2>=PV->Type.
101
102
glawa 6. prowerka kontekstnyh uslowij
RULE Access ::= ’[’ Expression ’]’ Access SEMANTICS ElementType<4>=ArrayElementType(ElementType<0>, ElementType<2>). RULE Access ::= SEMANTICS ElementType=ElementType<0>. 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=(H<<4)+(*p); if (g=H&0xf0000000) {H=H^(g>>24); 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 (comp<0) return(SearchTree(Id,TP->Left)); 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 (comp<0) return(Fill(Id,TP->Left, &(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;/ <
-., /01/$" *+"$",)" "!#$" & ' "(")$"
%
)$""$,)
/
"!#$"
% =>?A@#B
• • • • •
CEDFGHIJDKL"MNO:DPRQTS"G rIS. 9.1:
wYZOW PODPROGRAMM RAZLIˆNOGO STATIˆESKOGO UROWNQ PROIZWODITSQ NESKOLXKO PO-RAZNOMU. pRI WYZOWE PODPROGRAMMY TOGO VE STATIˆESKOGO UROWNQ, ˆTO I WYZYWA@]AQ PODPROGRAMMA (NAPRIMER, REKURSIWNYJ WYZOW TOJ VE SAMOJ PODPROGRAMMY), WYPOLNQ@TSQ SLEDU@]IE KOMANDY: zANESENIE FAKTIˆESKIH PARAMETROW W MAGAZIN JSR A kOMANDA JSR A PRODWIGAET UKAZATELX SP, ZANOSIT PC NA WERHU[KU MAGAZINA I OSU]ESTWLQET PEREHOD PO ADRESU A. pOSLE WYPOLNENIQ “TIH KOMAND SOSTOQNIE MAGAZINA STANOWITSQ TAKIM, KAK “TO IZOBRAVENO NA RIS. 9.2. zANESENIE BP, OTWEDENIE LOKALXNYH, SOHRANENIE REGISTROW DELAET WYZYWAEMAQ PODPROGRAMMA (SM. NIVE). pRI WYZOWE LOKALXNOJ PODPROGRAMMY NEOBHODIMO USTANOWITX UKAZATELX STATIˆESKOGO UROWNQ NA TEKU]U@ PODPROGRAMMU, A PRI WYHODE – WOSSTANOWITX EGO NA STAROE ZNAˆENIE (OHWATYWA@]EJ TEKU]U@). dLQ “TOGO ISPOLNQ@TSQ SLEDU@]IE KOMANDY:
9.2. dinami˜eskaq organizaciq pamqti
/06 +%""% .+"
1
/0.!12*1"%"
137
:
,-"%" .+" !"#$"%" ' ( "3)* +%" 4516 78.9 & ) !"#$"%"
/0.!12*1"%" ,-"%" .+" !"#$"%" ' ( "!!)* +%" & +%""% .+"
1
&
!"#$"%" • • • • •
rIS. 9.2:
zANESENIE FAKTIˆESKIH PARAMETROW W MAGAZIN MOVE BP, LP SUB Delta, LP JSR A zDESX Delta – RAZMER LOKALXNYH WYZYWA@]EJ PODPROGRAMMY PL@S DWOJNAQ DLINA SLOWA. mAGAZIN POSLE “TOGO PRINIMAET SOSTOQNIE, IZOBRAVENNOE NA RIS. 9.3. pREDPOLAGAETSQ, ˆTO REGISTR LP UVE SOHRANEN SREDI SOHRANQEMYH REGISTROW, PRIˆEM SAMYM PERWYM (SRAZU POSLE LOKALXNYH PEREMENNYH). pOSLE WYHODA IZ PODPROGRAMMY W WYZYWA@]EJ PODPROGRAMME WYPOLNQETSQ KOMANDA MOVE (LP), LP KOTORAQ WOSSTANAWLIWAET STAROE ZNAˆENIE STATIˆESKOJ CEPOˆKI. eSLI WYHOD
glawa 9. generaciq koda
138
OSU]ESTWLQLSQ IZ PODPROGRAMMY 1-GO UROWNQ, “TU KOMANDU WYPOLNQTX NE NADO, POSKOLXKU DLQ 1-GO UROWNQ NET STATIˆESKOJ CEPOˆKI.
01: ,%""% /,"
2
01/!23+2"%" -."%" /," !"# %" ' ( ")*+ ,%" &
,%""% /,"
2
;
&
!"#$"%"
45687$9
• • • • •
rIS. 9.3: pRI WYZOWE PODPROGRAMMY MENX[EGO, ˆEM WYZYWA@]AQ, UROWNQ WYPOLNQ@TSQ SLEDU@]IE KOMANDY: zANESENIE FAKTIˆESKIH PARAMETROW W MAGAZIN MOVE (LP), LP /* STOLXKO RAZ, KAKOWA RAZNOSTX UROWNEJ WYZYWA@]EJ I WYZYWAEMOJ pp */ JSR A tEM SAMYM USTANAWLIWAETSQ STATIˆESKIJ UROWENX WYZYWAEMOJ PODPROGRAMMY. pOSLE WYHODA IZ PODPROGRAMMY WYPOLNQETSQ KOMANDA MOVE
-Delta(BP), LP
WOSSTANAWLIWA@]AQ STATIˆESKIJ UROWENX WYZYWA@]EJ PODPROGRAMMY. tELO PODPROGRAMMY NAˆINAETSQ SO SLEDU@]IH KOMAND: LINK BP , -RAZMER_LOKALXNYH MOVEM -(SP) kOMANDA LINK BP, RAZMER_LOKALXNYH “KWIWALENTNA TREM KOMANDAM:
9.2. dinami˜eskaq organizaciq pamqti
139
MOVE BP, -(SP) MOVE SP, BP ADD -RAZMER_LOKALXNYH, SP kOMANDA MOVEM SOHRANQET W MAGAZINE REGISTRY. w REZULXTATE WYPOLNENIQ “TIH KOMAND MAGAZIN PRIOBRETAET WID, IZOBRAVENNYJ NA RIS. 9.1. wYHOD IZ PODPROGRAMMY OSU]ESTWLQETSQ SLEDU@]EJ POSLEDOWATELXNOSTX@ KOMAND: MOVEM (SP)+ UNLK BP RTD RAZMER_FAKTIˆESKIH kOMANDA MOVEM WOSSTANAWLIWAET REGISTRY IZ MAGAZINA. kOMANDA UNLK BP “KWIWALENTNA TAKOJ POSLEDOWATELXNOSTI KOMAND: MOVE BP,SP MOVE (SP),BP ADD #4, SP /* 4 - RAZMER SLOWA */ kOMANDA RTD RAZMER_FAKTIˆESKIH, W SWO@ OˆEREDX, “KWIWALENTNA POSLEDOWATELXNOSTI ADD RAZMER_FAKTIˆESKIH+4, SP JMP -RAZMER_FAKTIˆESKIH-4(SP) pOSLE EE WYPOLNENIQ MAGAZIN WOSSTANAWLIWAETSQ DO SOSTOQNIQ, KOTOROE BYLO DO WYZOWA. w ZAWISIMOSTI OT NALIˆIQ LOKALXNYH PEREMENNYH, FAKTIˆESKIH PARAMETROW I NEOBHODIMOSTI SOHRANENIQ REGISTROW KAVDAQ IZ “TIH KOMAND MOVET OTSUTSTWOWATX.
9.2.2 oRGANIZACIQ MAGAZINA S DISPLEEM rASSMOTRIM TEPERX ORGANIZACI@ MAGAZINA S DISPLEEM. dISPLEJ – “TO MASSIW (DISPLAY) , i-J “LEMENT KOTOROGO PREDSTAWLQET SOBOJ UKAZATELX NA OBLASTX AKTIWACII POSLEDNEJ WYZWANNOJ PODPROGRAMMY i-GO STATIˆESKOGO UROWNQ. dOSTUP K PEREMENNYM SAMOJ WNUTRENNEJ PODPROGRAMMY OSU]ESTWLQETSQ ˆEREZ REGISTR BP. dISPLEJ MOVET BYTX REALIZOWAN LIBO ˆEREZ REGISTRY (ESLI IH DOSTATOˆNO), LIBO ˆEREZ MASSIW W PAMQTI. pRI WYZOWE PROCEDURY SLEDU@]EGO (PO OTNO[ENI@ K WYZYWA@]EJ) UROWNQ W DISPLEE OTWODITSQ OˆEREDNOJ “LEMENT. eSLI WYZYWA@]AQ PROCEDURA IMEET STATIˆESKIJ UROWENX i, TO PRI WYZOWE PROCEDURY UROWNQ j 6 i “LEMENTY DISPLEQ j, ... , i DOLVNY BYTX SKOPIROWANY (OBYˆNO W STEK WYZYWA@]EJ PROCEDURY), TEKU]IM UROWNEM STANOWITSQ j I W DISPLAY[j] ZANOSITSQ UKAZATELX NA OBLASTX AKTIWACII WYZYWAEMOJ PROCEDURY. pO OKONˆANII RABOTY WYZYWAEMOJ PROCEDURY SODERVIMOE DISPLEQ WOSSTANAWLIWAETSQ IZ STEKA.
glawa 9. generaciq koda
140
iNOGDA ISPOLXZUETSQ KOMBINIROWANNAQ SHEMA – DISPLEJ W MAGAZINE. dISPLEJ HRANITSQ W OBLASTI AKTIWACII KAVDOJ PROCEDURY. fORMIROWANIE DISPLEQ DLQ PROCEDURY OSU]ESTWLQETSQ W SOOTWETSTWII S PRAWILAMI, OPISANNYMI WY[E. oTDELXNOGO RASSMOTRENIQ TREBUET WOPROS O TEHNIKE PEREDAˆI FAKTIˆESKIH PARAMETROW. kONEˆNO, W SLUˆAE PROSTYH PARAMETROW (NAPRIMER, ˆISEL) PROBLEM NE WOZNIKAET. oDNAKO PEREDAˆA MASSIWOW PO ZNAˆENI@ – OPERACIQ DOWOLXNO DOROGAQ, PO“TOMU S TOˆKI ZRENIQ “KONOMII PAMQTI CELESOOBRAZNEE SNAˆALA W PODPROGRAMMU PEREDATX ADRES MASSIWA, A ZATEM UVE IZ PODPROGRAMMY PO ADRESU PEREDATX W MAGAZIN SAM MASSIW. w SWQZI S PEREDAˆEJ PARAMETROW SLEDUET UPOMQNUTX E]E ODNO OBSTOQTELXSTWO. rASSMOTRENNAQ SHEMA ORGANIZACII MAGAZINA DOPUSTIMA TOLXKO DLQ QZYKOW SO STATIˆESKI IZWESTNYMI RAZMERAMI FAKTIˆESKIH PARAMETROW. oDNAKO, NAPRIMER, W QZYKE mODULA-2 PO ZNAˆENI@ MOVET BYTX PEREDAN GIBKIJ MASSIW, I W “TOM SLUˆAE NELXZQ STATIˆESKI RASPREDELITX PAMQTX DLQ PARAMETROW. oBYˆNO W TAKIH SLUˆAQH ZAWODQT TAK NAZYWAEMYJ “PASPORT” MASSIWA, W KOTOROM HRANITSQ WSQ NEOBHODIMAQ INFORMACIQ, A SAM MASSIW RAZME]AETSQ W MAGAZINE W RABOˆEJ OBLASTI WY[E SOHRANENNYH REGISTROW.
9.3
nAZNAˆENIE ADRESOW
nAZNAˆENIE ADRESOW PEREMENNYM, PARAMETRAM I POLQM ZAPISEJ PROISHODIT PRI OBRABOTKE SOOTWETSTWU@]IH OB˙QWLENIJ. w ODNOPROHODNOM TRANSLQTORE “TO MOVET PROIZWODITXSQ WMESTE S POSTROENIEM OSNOWNOJ TABLICY SIMWOLOW I SOOTWETSTWU@]IE ADRESA (ILI SME]ENIQ) MOGUT HRANITXSQ W “TOJ VE TABLICE. w PROMEVUTOˆNOM PREDSTAWLENII lIDER OB˙QWLENIQ SOHRANENY, ˆTO DELAET “TO PROMEVUTOˆNOE PREDSTAWLENIE MA[INNO-NEZAWISIMYM. nAPOMNIM, ˆTO W lIDER-PREDSTAWLENII KAVDOMU OPISANI@ SOOTWETSTWUET NEKOTORYJ NOMER. w PROCESSE RABOTY GENERATORA KODOW PODDERVIWAETSQ TABLICA Table, W KOTOROJ PO “TOMU NOMERU (WHODU) SODERVITSQ SLEDU@]AQ INFORMACIQ: – DLQ TIPA: EGO RAZMER; – DLQ PEREMENNOJ: SME]ENIE W OBLASTI PROCEDURY (ILI GLOBALXNOJ OBLASTI); – DLQ POLQ ZAPISI: SME]ENIE WNUTRI ZAPISI; – DLQ PROCEDURY: RAZMER LOKALXNYH PARAMETROW; – DLQ MASSIWA: RAZMER MASSIWA, RAZMER “LEMENTA, ZNAˆENIE LEWOJ I PRAWOJ GRANICY. fUNKCIQ IncTab WYRABATYWAET UKAZATELX (WHOD) NA NOWYJ “LEMENT TABLICY, PROWERQQ PRI “TOM NALIˆIE SWOBODNOJ PAMQTI. dLQ WYˆISLENIQ ADRESOW OPREDELIM DLQ KAVDOGO OB˙QWLENIQ DWA SINTEZIRUEMYH ATRIBUTA: DISP BUDET OBOZNAˆATX SME]ENIE WNUTRI OBLASTI PROCEDURY (ILI EDINICY KOMPILQCII), A SIZE – RAZMER. tOGDA SEMANTIKA PRAWILA DLQ SPISKA OB˙QWLENIJ PRINIMAET WID RULE
9.4. translqciq peremennyh
141
DeclPart ::= ( Decl ) SEMANTICS Disp<1>=0; 1A: Disp<1>=Disp<1>+Size<1>; Size<0>=Disp<1>. wSE OB˙QWLENIQ, KROME OB˙QWLENIJ PEREMENNYH, IME@T NULEWOJ RAZMER. rAZMER OB˙QWLENIQ PEREMENNOJ OPREDELQETSQ SLEDU@]IM PRAWILOM: RULE Decl ::= ’VAR’ TypeDes SEMANTICS Tablentry Entry; 0: Entry=IncTab; Size<0>=((Table[VAL<2>]+1) / 2)*2; // wYRAWNIWANIE NA GRANICU SLOWA Table[Entry]=Disp<0>+Size<0>. w KAˆESTWE PRIMERA TRANSLQCII OPREDELENIQ TIPA RASSMOTRIM OBRABOTKU OPISANIQ ZAPISI: RULE TypeDes ::= ’REC’ ( TypeDes ) ’END’ SEMANTICS int Disp; Tablentry Temp; 0: Entry<0>=IncTab; Disp=0; 2A: {Temp=IncTab; Table[Temp]=Disp; Disp=Disp+Table[Entry<2>]+1) / 2)*2; // wYRAWNIWANIE NA GRANICU SLOWA } Table[Entry<0>]=Disp.
9.4
tRANSLQCIQ PEREMENNYH
pEREMENNYE OTRAVA@T WSE MNOGOOBRAZIE MEHANIZMOW DOSTUPA W QZYKE. pEREMENNAQ IMEET SINTEZIROWANNYJ ATRIBUT ADDRESS – “TO ZAPISX, OPISYWA@]AQ ADRES W KOMANDE ms68020. —TOT ATRIBUT SOPOSTAWLQETSQ WSEM NETERMINALAM, PREDSTAWLQ@]IM ZNAˆENIQ. w SISTEME KOMAND ms68020 MNOGO SPOSOBOW ADRESACII, I ONI OTRAVENY W STRUKTURE ZNAˆENIQ ATRIBUTA ADDRESS, IME@]EGO SLEDU@]IJ TIP: enum Register {D0,D1,D2,D3,D4,D5,D6,D7,A0,A1,A2,A3,A4,A5,A6,SP,NO};
142
glawa 9. generaciq koda
enum AddrMode {D,A,Post,Pre,Indirect,IndPre,IndPost,IndirPC, IndPrePC,IndPostPC,InDisp,Index,IndexPC,Abs,Imm}; struct AddrType{ Register AddrReg,IndexReg; int IndexDisp,AddrDisp; short Scale; }; zNAˆENIE REGISTRA NO OZNAˆAET, ˆTO SOOTWETSTWU@]IJ REGISTR W ADRESACII NE ISPOLXZUETSQ. dOSTUP K PEREMENNYM OSU]ESTWLQETSQ W ZAWISIMOSTI OT IH UROWNQ: GLOBALXNYE PEREMENNYE ADRESU@TSQ S POMO]X@ ABSOL@TNOJ ADRESACII; PEREMENNYE W PROCEDURE TEKU]EGO UROWNQ ADRESU@TSQ ˆEREZ REGISTR BAZY a6. eSLI STEK ORGANIZOWAN S POMO]X@ STATIˆESKOJ CEPOˆKI, TO PEREMENNYE PREDYDU]EGO STATIˆESKOGO UROWNQ ADRESU@TSQ ˆEREZ REGISTR STATIˆESKOJ CEPOˆKI a5; PEREMENNYE OSTALXNYH UROWNEJ ADRESU@TSQ “PROBEGANIEM” PO STATIˆESKOJ CEPOˆKE S ISPOLXZOWANIEM WSPOMOGATELXNOGO REGISTRA. aDRES PEREMENNOJ FORMIRUETSQ PRI OBRABOTKE STRUKTURY PEREMENNOJ SLEWA NAPRAWO I PEREDAETSQ SNAˆALA SWERHU WNIZ KAK NASLEDUEMYJ ATRIBUT NETERMINALA VarTail, A ZATEM PEREDAETSQ SNIZU-WWERH KAK GLOBALXNYJ ATRIBUT NETERMINALA Variable. tAKIM OBRAZOM, PRAWILO DLQ OBRA]ENIQ K PEREMENNOJ IMEET WID (PERWOE WHOVDENIE Number W PRAWU@ ˆASTX – “TO UROWENX PEREMENNOJ, WTOROE – EE lIDER-NOMER): RULE Variable ::= VarMode Number Number VarTail SEMANTICS int Temp; struct AddrType AddrTmp1, AddrTmp2; 3: if (Val<2>==0) // gLOBALXNAQ PEREMENNAQ {Address<4>.AddrMode=Abs; Address<4>.AddrDisp=0; } else // lOKALXNAQ PEREMENNAQ {Address<4>.AddrMode=Index; if (Val<2>==Level) // pEREMENNAQ TEKU]EGO UROWNQ Address<4>.AddrReg=A6; else if (Val<2>==Level-1) // pEREMENNAQ PREDYDU]EGO UROWNQ Address<4>.AddrReg=A5; else {Address<4>.Addreg=GetFree(RegSet); AddrTmp1.AddrMode=Indirect;
9.4. translqciq peremennyh
143
AddrTmp1.AddrReg=A5; Emit2(MOVEA,AddrTmp1,Address<4>.AddrReg); AddrTmp1.AddrReg=Address<4>.AddrReg; AddrTmp2.AddrMode=A; AddrTmp2.AddrReg=Address<4>.AddrReg; for (Temp=Level-Val<2>;Temp>=2;Temp--) Emit2(MOVEA,AddrTmp1,AddrTmp2); } if (Val<2>==Level) Address<4>.AddrDisp=Table[Val<3>]; else Address<4>.AddrDisp=Table[Val<3>]+Table[LevelTab[Val<2>]]; }. fUNKCIQ GetFree WYBIRAET OˆEREDNOJ SWOBODNYJ REGISTR (LIBO REGISTR DANNYH, LIBO ADRESNYJ REGISTR) I OTMEˆAET EGO KAK ISPOLXZOWANNYJ W ATRIBUTE RegSet NETERMINALA Block. pROCEDURA Emit2 GENERIRUET DWUHADRESNU@ KOMANDU. pERWYJ PARAMETR “TOJ PROCEDURY – KOD KOMANDY, WTOROJ I TRETIJ PARAMETRY IME@T TIP AddrType I SLUVAT OPERANDAMI KOMANDY. sME]ENIE PEREMENNOJ TEKU]EGO UROWNQ OTSˆITYWAETSQ OT BAZY (a6), A DRUGIH UROWNEJ – OT UKAZATELQ STATIˆESKOJ CEPOˆKI, PO“TOMU ONO OPREDELQETSQ KAK ALGEBRAIˆESKAQ SUMMA RAZMERA LOKALXNYH PARAMETROW I WELIˆINY SME]ENIQ PEREMENNOJ. tABLICA LevelTab – “TO TABLICA UROWNEJ PROCEDUR, SODERVA]AQ UKAZATELI NA POSLEDOWATELXNO WLOVENNYE PROCEDURY. eSLI STEK ORGANIZOWAN S POMO]X@ DISPLEQ, TO TRANSLQCIQ DLQ DOSTUPA K PEREMENNYM MOVET BYTX OSU]ESTWLENA SLEDU@]IM OBRAZOM: RULE Variable ::= VarMode Number Number VarTail SEMANTICS int Temp; 3: if (Val<2>==0) // gLOBALXNAQ PEREMENNAQ {Address<4>.AddrMode=Abs; Address<4>.AddrDisp=0; } else // lOKALXNAQ PEREMENNAQ {Address<4>.AddrMode=Index; if (Val<2>=Level) // pEREMENNAQ TEKU]EGO UROWNQ {Address<4>.AddrReg=A6; Address<4>.AddrDisp=Table[Val<3>]; } else {Address<4>.AddrMode=IndPost; Address<4>.AddrReg=NO; Address<4>.IndexReg=NO; Address<4>.AddrDisp=Display[Val<2>];
glawa 9. generaciq koda
144
Address<4>.IndexDisp=Table[Val<3>]; } }. rASSMOTRIM TRANSLQCI@ DOSTUPA K POLQM ZAPISI. oNA OPISYWAETSQ SLEDU@]IM PRAWILOM (Number – “TO lIDER-NOMER OPISANIQ POLQ): RULE VarTail ::= ’FIL’ Number VarTail SEMANTICS if (Address<0>.AddrMode==Abs) {Address<3>.AddrMode=Abs; Address<3>.AddrDisp=Address<0>.AddrDisp+Table[Val<2>]; } else {Address<3>=Address<0>; if (Address<0>.AddrMode==Index) Address<3>.AddrDisp=Address<0>.AddrDisp+Table[Val<2>]; else Address<3>.IndexDisp=Address<0>.IndexDisp+Table[Val<2>]; }.
9.5
tRANSLQCIQ CELYH WYRAVENIJ
tRANSLQCIQ WYRAVENIJ RAZLIˆNYH TIPOW UPRAWLQETSQ SINTAKSIˆESKI BLAGODARQ NALIˆI@ UKAZATELQ TIPA PERED KAVDOJ OPERACIEJ. mY RASSMOTRIM NEKOTORYE NAIBOLEE HARAKTERNYE PROBLEMY GENERACII KODA DLQ WYRAVENIJ. sISTEMA KOMAND ms68020 OBLADAET DWUMQ OSOBENNOSTQMI, SKAZYWA@]IMISQ NA GENERACII KODA DLQ ARIFMETIˆESKIH WYRAVENIJ (TO VE MOVNO SKAZATX I O GENERACII KODA DLQ WYRAVENIJ TIPA “MNOVESTWA”): 1) ODIN IZ OPERANDOW WYRAVENIQ (PRAWYJ) DOLVEN PRI WYPOLNENII OPERACII NAHODITXSQ NA REGISTRE, PO“TOMU ESLI OBA OPERANDA NE NA REGISTRAH, TO PERED WYPOLNENIEM OPERACII ODIN IZ NIH NADO ZAGRUZITX NA REGISTR; 2) SISTEMA KOMAND DOWOLXNO “SIMMETRIˆNA”, T.E. NET SPECIALXNYH TREBOWANIJ K REGISTRAM PRI WYPOLNENII OPERACIJ (TAKIH, NAPRIMER, KAK PARY REGISTROW ILI TREBOWANIQ ˆETNOSTI I T.D.). pO“TOMU WYBOR KOMAND PRI GENERACII ARIFMETIˆESKIH WYRAVENIJ OPREDELQETSQ DOWOLXNO PROSTYMI TABLICAMI RE[ENIJ. nAPRIMER, DLQ CELOˆISLENNOGO SLOVENIQ TAKAQ TABLICA PRIWEDENA NA RIS. 9.4. zDESX IMEETSQ W WIDU, ˆTO R – OPERAND NA REGISTRE, V – PEREMENNAQ ILI KONSTANTA. tAKAQ TABLICA RE[ENIJ DOLVNA TAKVE UˆITYWATX KOMMUTATIWNOSTX OPERACIJ. RULE IntExpr ::= ’PLUS’ IntExpr IntExpr SEMANTICS
9.6. translqciq arifmeti˜eskih wyravenij
lEWYJ OPERAND A1
R
pRAWYJ OPERAND a2 R V ADD A1,A2 ADD A2, A1
V
ADD A1, A2
145
MOVE A1, R ADD A2, R
rIS. 9.4:
if (Address<2>.AddrMode!=D) && (Address<3>.AddrMode!=D) {Address<0>.AddrMode=D; Address<0>.Addreg=GetFree(RegSet); Emit2(MOVE,Address<2>,Address<0>); Emit2(ADD,Address<2>,Address<0>); } else if (Address<2>.AddrMode==D) {Emit2(ADD,Address<3>,Address<2>); Address<0>:=Address<2>); } else {Emit2(ADD,Address<2>,Address<3>); Address<0>:=Address<3>); }.
9.6
tRANSLQCIQ ARIFMETIˆESKIH WYRAVENIJ
oDNOJ IZ WAVNEJ[IH ZADAˆ PRI GENERACII KODA QWLQETSQ RASPREDELENIE REGISTROW. rASSMOTRIM HORO[O IZWESTNU@ TEHNIKU RASPREDELENIQ REGISTROW PRI TRANSLQCII ARIFMETIˆESKIH WYRAVENIJ, NAZYWAEMU@ ALGORITMOM sETIuLXMANA. (zAMEˆANIE: W CELQH BOLX[EJ NAGLQDNOSTI, W DANNOM PARAGRAFE MY NEMNOGO OTSTUPAEM OT SEMANTIKI ARIFMETIˆESKIH KOMAND MC68020 I PREDPOLAGAEM, ˆTO KOMANDA Op Arg1, Arg2 WYPOLNQET DEJSTWIE Arg2:=Arg1 Op Arg2.) pUSTX SISTEMA KOMAND MA[INY IMEET NEOGRANIˆENNOE ˆISLO UNIWERSALXNYH REGISTROW, W KOTORYH WYPOLNQ@TSQ ARIFMETIˆESKIE KOMANDY. rASSMOTRIM, KAK MOVNO SGENERIROWATX KOD, ISPOLXZUQ DLQ DANNOGO ARIFMETIˆESKOGO WYRAVENIQ MINIMALXNOE ˆISLO REGISTROW. pUSTX IMEETSQ SINTAKSIˆESKOE DEREWO WYRAVENIQ. pREDPOLOVIM SNAˆALA, ˆTO RASPREDELENIE REGISTROW OSU]ESTWLQETSQ PO PROSTEJ[EJ SHEME SWERHU-WNIZ SLEWA-NAPRAWO, KAK IZOBRAVENO NA RIS. 9.5. tOGDA K MOMENTU GENERACII KODA DLQ PODDEREWA LR ZANQTO n REGISTROW. pUSTX PODDEREWO L TREBUET nl REGISTROW, A PODDEREWO R – nr REGISTROW. eSLI nl = nr , TO PRI
glawa 9. generaciq koda
146
op R1 op R2
op
LR
Rn op L
R
rIS. 9.5:
WYˆISLENII L BUDET ISPOLXZOWANO nl REGISTROW I POD REZULXTAT BUDET ZANQT (n + 1)-J REGISTR. e]E nr (= nl ) REGISTROW BUDET ISPOLXZOWANO PRI WYˆISLENII R. tAKIM OBRAZOM, OB]EE ˆISLO ISPOLXZOWANNYH REGISTROW BUDET RAWNO n + nl + 1. eSLI nl > nr , TO PRI WYˆISLENII L BUDET ISPOLXZOWANO nl REGISTROW. pRI WYˆISLENII R BUDET ISPOLXZOWANO nr < nl REGISTROW, I WSEGO BUDET ISPOLXZOWANO NE BOLEE ˆEM n+nl REGISTROW. eSLI nl < nr , TO POSLE WYˆISLENIQ L POD REZULXTAT BUDET ZANQT ODIN REGISTR (PREDPOLOVIM, (n + 1)-J) I nr REGISTROW BUDET ISPOLXZOWANO DLQ WYˆISLENIQ R. wSEGO BUDET ISPOLXZOWANO n + nr + 1 REGISTROW. wIDNO, ˆTO DLQ DEREWXEW, SOWPADA@]IH S TOˆNOSTX@ DO PORQDKA POTOMKOW KAVDOJ WER[INY, MINIMALXNOE ˆISLO REGISTROW PRI RASPREDELENII IH SLEWA-NAPRAWO DOSTIGAETSQ NA DEREWE, U KOTOROGO W KAVDOJ WER[INE SLEWA RASPOLOVENO BOLEE “SLOVNOE” PODDEREWO, TREBU@]EE BOLX[EGO ˆISLA REGISTROW. tAKIM OBRAZOM, ESLI DEREWO TAKOWO, ˆTO W KAVDOJ WNUTRENNEJ WER[INE PRAWOE PODDEREWO TREBUET MENX[EGO ˆISLA REGISTROW, ˆEM LEWOE, TO, OBHODQ DEREWO SLEWA NAPRAWO, MOVNO OPTIMALXNO RASPREDELITX REGISTRY. bEZ PERESTROJKI DEREWA “TO OZNAˆAET, ˆTO ESLI W NEKOTOROJ WER[INE DEREWA SPRAWA RASPOLOVENO BOLEE SLOVNOE PODDEREWO, TO SNAˆALA SGENERIRUEM KOD DLQ NEGO, A ZATEM UVE DLQ LEWOGO PODDEREWA. aLGORITM RABOTAET SLEDU@]IM OBRAZOM. sNAˆALA OSU]ESTWLQETSQ RAZMETKA SINTAKSIˆESKOGO DEREWA PO SLEDU@]IM PRAWILAM. pRAWILA RAZMETKI: 1) ESLI WER[INA – PRAWYJ LIST ILI DEREWO SOSTOIT IZ EDINSTWENNOJ WER[INY, POMEˆAEM “TU WER[INU ˆISLOM 1, ESLI WER[INA – LEWYJ LIST, POMEˆAEM EE 0 (RIS. 9.6). 2) ESLI WER[INA IMEET PRQMYH POTOMKOW S METKAMI l1 I l2 , TO W KAˆESTWE
9.6. translqciq arifmeti˜eskih wyravenij
op
147
op
0
1
rIS. 9.6:
METKI “TOJ WER[INY WYBIRAEM NAIBOLX[EE IZ ˆISEL l1 ILI l2 LIBO ˆISLO l1 + 1, ESLI l1 = l2 (RIS. 9.7).
R
l2
R
op R+1
l1
l1 op
l2
) l1 < l2
R
R
l1
l1 + 1
R op
l2
) l1 > l2
R+1
R
l1
l2
R+1
) l1 = l2
rIS. 9.7: —TA RAZMETKA POZWOLQET OPREDELITX, KAKOE IZ PODDEREWXEW TREBUET BOLX[EGO KOLIˆESTWA REGISTROW DLQ SWOEGO WYˆISLENIQ. dALEE OSU]ESTWLQETSQ RASPREDELENIE REGISTROW DLQ REZULXTATOW OPERACIJ PO SLEDU@]IM PRAWILAM: 1) kORN@ NAZNAˆAETSQ PERWYJ REGISTR. 2) eSLI METKA LEWOGO POTOMKA MENX[E METKI PRAWOGO, TO LEWOMU POTOMKU NAZNAˆAETSQ REGISTR NA EDINICU BOLX[IJ, ˆEM PREDKU, A PRAWOMU – S TEM VE NOMEROM (SNAˆALA WYˆISLQETSQ PRAWOE PODDEREWO I EGO REZULXTAT POME]AETSQ W REGISTR R), TAK ˆTO REGISTRY ZANIMA@TSQ POSLEDOWATELXNO. eSLI VE METKA LEWOGO POTOMKA BOLX[E ILI RAWNA METKE PRAWOGO POTOMKA, TO NAOBOROT, PRAWOMU POTOMKU NAZNAˆAETSQ REGISTR NA EDINICU BOLX[IJ, ˆEM PREDKU, A LEWOMU – S TEM VE NOMEROM (SNAˆALA WYˆISLQETSQ LEWOE PODDEREWO I EGO REZULXTAT POME]AETSQ W REGISTR R – RIS. 9.7). pOSLE “TOGO FORMIRUETSQ KOD PO SLEDU@]IM PRAWILAM: 1) ESLI WER[INA – PRAWYJ LIST S METKOJ 1, TO EJ SOOTWETSTWUET KOD
glawa 9. generaciq koda
148 MOVE X, R
GDE R – REGISTR, NAZNAˆENNYJ “TOJ WER[INE, A X – ADRES PEREMENNOJ, SWQZANNOJ S WER[INOJ (RIS. 9.8, B);
R op
op R
R
X (0)
X (1)
rIS. 9.8: 2) ESLI WER[INA WNUTRENNQQ I EE LEWYJ POTOMOK – LIST S METKOJ 0, TO EJ SOOTWETSTWUET KOD kOD PRAWOGO PODDEREWA Op X, R GDE R – REGISTR, NAZNAˆENNYJ “TOJ WER[INE, X – ADRES PEREMENNOJ, SWQZANNOJ S WER[INOJ, A Op – OPERACIQ, PRIMENENNAQ W WER[INE (RIS. 9.8, A); 3) ESLI NEPOSREDSTWENNYE POTOMKI WER[INY NE LISTXQ I METKA PRAWOJ WER[INY BOLX[E METKI LEWOJ, TO WER[INE SOOTWETSTWUET KOD kOD PRAWOGO PODDEREWA kOD LEWOGO PODDEREWA Op R+1, R GDE R – REGISTR, NAZNAˆENNYJ WNUTRENNEJ WER[INE, I OPERACIQ Op, WOOB]E GOWORQ, NE KOMMUTATIWNAQ (RIS. 9.9, B); 4) ESLI NEPOSREDSTWENNYE POTOMKI WER[INY NE LISTXQ I METKA PRAWOJ WER[INY MENX[E ILI RAWNA METKE LEWOJ WER[INY, TO WER[INE SOOTWETSTWUET KOD kOD LEWOGO PODDEREWA kOD PRAWOGO PODDEREWA Op R, R+1 MOVE R+1, R pOSLEDNQQ KOMANDA GENERIRUETSQ DLQ TOGO, ˆTOBY POLUˆITX REZULXTAT W NUVNOM REGISTRE (W SLUˆAE KOMMUTATIWNOJ OPERACII OPERANDY OPERACII MOVNO POMENQTX MESTAMI I IZBEVATX DOPOLNITELXNOJ PERESYLKI – RIS. 9.9, A).
9.6. translqciq arifmeti˜eskih wyravenij
R
R op
R
149
op R+1
R+1
R
rIS. 9.9:
rASSMOTRIM ATRIBUTNU@ SHEMU, REALIZU@]U@ “TI PRAWILA GENERACII KODA (DLQ BOLX[EJ NAGLQDNOSTI WHODNAQ GRAMMATIKA SOOTWETSTWUET OBYˆNOJ INFIKSNOJ ZAPISI, A NE lIDER-PREDSTAWLENI@). w “TOJ SHEME GENERACIQ KODA PROISHODIT NE NEPOSREDSTWENNO W PROCESSE OBHODA DEREWA, KAK RANX[E, A IZ-ZA NEOBHODIMOSTI PERESTAWLQTX PODDEREWXQ KOD STROITSQ W WIDE TEKSTA S POMO]X@ OPERACII KONKATENACII. pRAKTIˆESKI, KONEˆNO, “TO NECELESOOBRAZNO: RAZUMNEE UPRAWLQTX OBHODOM DEREWA NEPOSREDSTWENNO, ODNAKO DLQ PROSTOTY MY BUDEM POLXZOWATXSQ KONKATENACIEJ. RULE Expr ::= IntExpr SEMANTICS Reg<1>=1; Code<0>=Code<1>; Left<1>=true. RULE IntExpr ::= IntExpr Op IntExpr SEMANTICS Left<1>=true; Left<3>=false; Label<0>=(Label<1>==Label<3>) ? Label<1>+1 : Max(Label<1>,Label<3>); Reg<1>=(Label<1> < Label<3>) ? Reg<0>+1 : Reg<0>; Reg<3>=(Label<1> < Label<3>) ? Reg<0> : Reg<0>+1; Code<0>=(Label<1>==0) ? Code<3> + Code<2> + Code<1> + "," + Reg<0> : (Label<1> < Label<3>) ? Code<3> + Code<1> + Code<2> +
glawa 9. generaciq koda
150
(Reg<0>+1) + "," + Reg<0> : Code<1> + Code<3> + Code<2> + Reg<0> + "," + (Reg<0>+1) + "MOVE" + (Reg<0>+1) + "," + Reg<0>. RULE IntExpr ::= Ident SEMANTICS Label<0>=(Left<0>) ? 0 : 1; Code<0>=(!Left<0>) ? "MOVE" + Reg<0> + "," + Val<1> : Val<1>. RULE IntExpr ::= ’(’ IntExpr ’)’ SEMANTICS Label<0>=Label<2>; Reg<2>=Reg<0>; Code<0>=Code<2>. RULE Op ::= ’+’ SEMANTICS Code<0>="ADD". RULE Op ::= ’-’ SEMANTICS Code<0>="SUB". RULE Op ::= ’*’ SEMANTICS Code<0>="MUL". RULE Op ::= ’/’ SEMANTICS Code<0>="DIV". aTRIBUTIROWANNOE DEREWO DLQ WYRAVENIQ A*B+C*(D+E) PRIWEDENO NA RIS. 9.10. pRI “TOM BUDET SGENERIROWAN SLEDU@]IJ KOD: MOVE B, R1 MUL A, R1 MOVE E, R2
9.6. translqciq arifmeti˜eskih wyravenij
151
Expr label = 2
IntExpr reg = 1 Op label = 1 reg = 1
IntExpr
label = 1
IntExpr reg = 2
+
Op label = 0 reg = 2
*
Op label = 1 reg = 1
label = 0 reg = 3
IntExpr
IntExpr
IntExpr
Ident (A)
Ident (B)
Ident (C)
*
label = 1
IntExpr reg = 2 (
) IntExpr label = 1 reg = 2
Op label = 0 reg = 3
+ IntExpr Ident (D)
=1 IntExpr label reg = 2
Ident (E)
rIS. 9.10:
ADD MUL ADD MOVE
D, R2 C, R2 R1, R2 R2, R1
pRIWEDENNAQ ATRIBUTNAQ SHEMA TREBUET DWUH PROHODOW PO DEREWU WYRAVENIQ. rASSMOTRIM TEPERX DRUGU@ ATRIBUTNU@ SHEMU, W KOTOROJ DOSTATOˆNO ODNOGO OBHODA DLQ GENERACIQ PROGRAMMY DLQ WYRAVENIJ S OPTIMALXNYM RASPREDELENIEM REGISTROW [7]. pUSTX MY PROIZWELI RAZMETKU DEREWA RAZBORA TAK VE, KAK I W PREDYDU]EM ALGORITME. nAZNAˆENIE REGISTROW BUDEM PROIZWODITX SLEDU@]IM OBRAZOM. lEWOMU POTOMKU WSEGDA NAZNAˆAETSQ REGISTR, RAWNYJ EGO METKE, A PRAWOMU – EGO METKE, ESLI ONA NE RAWNA METKE EGO LEWOGO BRATA, I METKE + 1, ESLI METKI RAWNY. pOSKOLXKU BOLEE SLOVNOE PODDEREWO WSEGDA WYˆISLQETSQ RANX[E BOLEE PROSTOGO, EGO REGISTR REZULXTATA IMEET BOLX[IJ NOMER, ˆEM L@BOJ REGISTR, ISPOLXZUEMYJ PRI WYˆISLENII BOLEE PROSTOGO PODDEREWA, ˆTO GARANTIRUET PRAWILXNOSTX ISPOLXZOWANIQ REGISTROW.
152
glawa 9. generaciq koda
pRIWEDENNYE SOOBRAVENIQ REALIZU@TSQ SLEDU@]EJ ATRIBUTNOJ SHEMOJ: RULE Expr ::= IntExpr SEMANTICS Code<0>=Code<1>; Left<1>=true. RULE IntExpr ::= IntExpr Op IntExpr SEMANTICS Left<1>=true; Left<3>=false; Label<0>=(Label<1>==Label<3>) ? Label<1>+1 : Max(Label<1>,Label<3>); Code<0>=(Label<3> > Label<1>) ? (Label<1>==0) ? Code<3> + Code<2> + Code<1> + "," + Label<3> : Code<3> + Code<1> + Code<2> + Label<1> + "," + Label<3> : (Label<3> < Label<1>) ? Code<1> + Code<3> + Code<2> + Label<1> + "," + Label<3> + "MOVE" + Label<3> + "," + Label<1> : // METKI RAWNY Code<3> + "MOVE" + Label<3> + "," + Label<3>+1 + Code<1> + Code<2> + Label<1> + "," + Label<1>+1. RULE IntExpr ::= Ident SEMANTICS Label<0>=(Left<0>) ? 0 : 1; Code<0>=(Left<0>) ? Val<1> : "MOVE" + Val<1> + "R1". RULE IntExpr ::= ’(’ IntExpr ’)’ SEMANTICS Label<0>=Label<2>; Code<0>=Code<2>. RULE Op ::= ’+’ SEMANTICS
9.7. translqciq logi˜eskih wyravenij
153
Code<0>="ADD". RULE Op ::= ’-’ SEMANTICS Code<0>="SUB". RULE Op ::= ’*’ SEMANTICS Code<0>="MUL". RULE Op ::= ’/’ SEMANTICS Code<0>="DIV". kOMANDY PERESYLKI TREBU@TSQ DLQ SOGLASOWANIQ NOMEROW REGISTROW, W KOTORYH OSU]ESTWLQETSQ WYPOLNENIE OPERACII, S REGISTRAMI, W KOTORYH DOLVEN BYTX WYDAN REZULXTAT. —TO IMEET SMYSL, KOGDA “TI REGISTRY RAZNYE. pOLUˆITXSQ “TO MOVET IZ-ZA TOGO, ˆTO PO PRIWEDENNOJ SHEME REZULXTAT WYPOLNENIQ OPERACII WSEGDA NAHODITSQ W REGISTRE S NOMEROM METKI, A METKI LEWOGO I PRAWOGO PODDEREWXEW MOGUT SOWPADATX. dLQ WYRAVENIQ A*B+C*(D+E) BUDET SGENERIROWAN SLEDU@]IJ KOD: MOVE ADD MUL MOVE MOVE MUL ADD
E, R1 D, R1 C, R1 R1, R2 B, R1 A, R1 R1, R2
w PRIWEDENNYH ATRIBUTNYH SHEMAH PREDPOLAGALOSX, ˆTO REGISTROW DOSTATOˆNO DLQ TRANSLQCII L@BOGO WYRAVENIQ. eSLI “TO NE TAK, PRIHODITSQ USLOVNQTX SHEMU TRANSLQCII I PRI NEOBHODIMOSTI SBRASYWATX SODERVIMOE REGISTROW W PAMQTX (ILI MAGAZIN).
9.7
tRANSLQCIQ LOGIˆESKIH WYRAVENIJ
lOGIˆESKIE WYRAVENIQ, WKL@ˆA@]IE LOGIˆESKOE UMNOVENIE, LOGIˆESKOE SLOVENIE I OTRICANIE, MOVNO WYˆISLQTX KAK NEPOSREDSTWENNO, ISPOLXZUQ TABLICY ISTINNOSTI, TAK I S POMO]X@ USLOWNYH WYRAVENIJ, OSNOWANNYH NA SLEDU@]IH PROSTYH PRAWILAH: A AND B “KWIWALENTNO if A then B else False, A OR B “KWIWALENTNO if A then True else B.
154
glawa 9. generaciq koda
eSLI W KAˆESTWE KOMPONENT WYRAVENIJ MOGUT WHODITX FUNKCII S POBOˆNYM “FFEKTOM, TO, WOOB]E GOWORQ, REZULXTAT WYˆISLENIQ MOVET ZAWISETX OT SPOSOBA WYˆISLENIQ. w NEKOTORYH QZYKAH PROGRAMMIROWANIQ NE OGOWARIWAETSQ, KAKIM SPOSOBOM DOLVNY WYˆISLQTXSQ LOGIˆESKIE WYRAVENIQ (NAPRIMER, W pASKALE), W NEKOTORYH TREBUETSQ, ˆTOBY WYˆISLENIQ PROIZWODILISX TEM ILI INYM SPOSOBOM (NAPRIMER, W mODULE-2 TREBUETSQ, ˆTOBY WYRAVENIQ WYˆISLQLISX PO PRIWEDENNYM FORMULAM), W NEKOTORYH QZYKAH ESTX WOZMOVNOSTX QWNO ZADATX SPOSOB WYˆISLENIQ (sI, aDA). wYˆISLENIE LOGIˆESKIH WYRAVENIJ NEPOSREDSTWENNO PO TABLICAM ISTINNOSTI ANALOGIˆNO WYˆISLENI@ ARIFMETIˆESKIH WYRAVENIJ, PO“TOMU MY NE BUDEM IH RASSMATRIWATX OTDELXNO. rASSMOTRIM PODROBNEE SPOSOB WYˆISLENIQ S POMO]X@ PRIWEDENNYH WY[E FORMUL (BUDEM NAZYWATX EGO “WYˆISLENIEM S USLOWNYMI PEREHODAMI”). iNOGDA TAKOJ SPOSOB RASSMATRIWA@T KAK OPTIMIZACI@ WYˆISLENIQ LOGIˆESKIH WYRAVENIJ. rASSMOTRIM SLEDU@]U@ ATRIBUTNU@ GRAMMATIKU SO WHODNYM QZYKOM LOGIˆESKIH WYRAVENIJ: RULE Expr ::= BoolExpr SEMANTICS FalseLab<1>=False; TrueLab<1>=True; Code<0>=Code<1>. RULE BoolExpr ::= BoolExpr ’AND’ BoolExpr SEMANTICS FalseLab<1>=FalseLab<0>; TrueLab<1>=NodeLab<3>; FalseLab<3>=FalseLab<0>; TrueLab<3>=TrueLab<0>; Code<0>=NodeLab<0> + ":" + Code<1> + Code<3>. RULE BoolExpr ::= BoolExpr ’OR’ BoolExpr SEMANTICS FalseLab<1>=NodeLab<3>; TrueLab<1>=TrueLab<0>; FalseLab<3>=FalseLab<0>; TrueLab<3>=TrueLab<0>; Code<0>=NodeLab<0> + ":" + Code<1> + Code<3>. RULE BoolExpr ::= ’(’ BoolExpr ’)’ SEMANTICS FalseLab<2>=FalseLab<0>; TrueLab<2>=TrueLab<0>; Code<0>=NodeLab<0> + ":" + Code<2>. RULE BoolExpr ::= F
9.7. translqciq logi˜eskih wyravenij
155
SEMANTICS Code<0>=NodeLab<0> + ":" + "GOTO" + FalseLab<0>. RULE BoolExpr ::= T SEMANTICS Code<0>=NodeLab<0> + ":" + "GOTO" + TrueLab<0>. zDESX PREDPOLAGAETSQ, ˆTO WSE WER[INY DEREWA ZANUMEROWANY I NOMER WER[INY DAET ATRIBUT NodeLab. mETKI WER[IN PEREDA@TSQ, KAK “TO IZOBRAVENO NA RIS. 9.11.
TrueLab FalseLab
AND FalseLab TrueLab
FalseLab TrueLab
TrueLab FalseLab NodeLab
OR TrueLab FalseLab
FalseLab TrueLab NodeLab
rIS. 9.11: tAKIM OBRAZOM, KAVDOMU ATRIBUTIROWANNOMU DEREWU W “TOJ ATRIBUTNOJ GRAMMATIKE SOPOSTAWLQETSQ KOD, POLUˆENNYJ W REZULXTATE OBHODA DEREWA SWERHU-WNIZ SLEWA-NAPRAWO SLEDU@]IM OBRAZOM. pRI WHODE W WER[INU BoolExpr GENERIRUETSQ EE NOMER, W WER[INE F GENERIRUETSQ TEKST GOTO ZNAˆENIE ATRIBUTA FalseLab<0>, W WER[INE T – GOTO ZNAˆENIE ATRIBUTA TrueLab<0>. nAPRIMER, DLQ WYRAVENIQ F OR ( F AND T AND T ) OR T POLUˆIM ATRIBUTIROWANNOE DEREWO, IZOBRAVENNOE NA RIS. 9.12, I KOD 1:7: GOTO 2:8:4:9: GOTO 5:10: GOTO 6: GOTO 3: GOTO True: ... False: ...
2 3 6 True True
—TU LINEARIZOWANNU@ ZAPISX MOVNO TRAKTOWATX KAK PROGRAMMU WYˆISLENIQ LOGIˆESKOGO ZNAˆENIQ: KAVDAQ STROKA MOVET BYTX POMEˆENA NOMEROM
glawa 9. generaciq koda
156
Expr TrueLab = True
BoolExpr FalseLab = False NodeLab = 1
OR TrueLab = True FalseLab = 2 BoolExpr NodeLab = 7
TrueLab = True
BoolExpr FalseLab = False NodeLab = 2
OR F BoolExpr (
TrueLab = True FalseLab = 3 NodeLab = 8
TrueLab = True
BoolExpr FalseLab = False NodeLab = 3
) TrueLab = True
T
BoolExpr FalseLab = 3 NodeLab = 4
AND TrueLab = 5 FalseLab = 3 NodeLab = 9
TrueLab = True
BoolExpr
BoolExpr FalseLab = 3 NodeLab = 5
AND F BoolExpr
TrueLab = 6 FalseLab = 3 NodeLab = 10
T
TrueLab = True
BoolExpr FalseLab = 3 NodeLab = 6
T
rIS. 9.12:
WER[INY I SODERVATX LIBO PEREHOD NA DRUGU@ STROKU, LIBO PEREHOD NA True ILI False, ˆTO SOOTWETSTWUET ZNAˆENI@ WYRAVENIQ true ILI false. bUDEM GOWORITX, ˆTO POLUˆENNAQ PROGRAMMA WYˆISLQET (ILI INTERPRETIRUET) ZNAˆENIE WYRAVENIQ, ESLI W REZULXTATE EE WYPOLNENIQ (OT PERWOJ STROKI) MY PRIDEM K STROKE, SODERVA]EJ GOTO True ILI GOTO False. uTWERVDENIE 9.1. w REZULXTATE INTERPRETACII PODDEREWA S NEKOTORYMI ZNAˆENIQMI ATRIBUTOW FalseLab I TrueLab W EGO KORNE WYPOLNQETSQ KOMANDA GOTO TrueLab, ESLI ZNAˆENIE WYRAVENIQ ISTINNO, I KOMANDA GOTO FalseLab, ESLI ZNAˆENIE WYRAVENIQ LOVNO. dOKAZATELXSTWO. pRIMENIM INDUKCI@ PO WYSOTE DEREWA. dLQ DEREWXEW WYSOTY 1, SOOTWETSTWU@]IH PRAWILAM BoolExpr ::= F I BoolExpr ::= T, SPRAWEDLIWOSTX UTWERVDENIQ SLEDUET IZ SOOTWETSTWU@]IH ATRIBUTNYH PRAWIL. pUSTX DEREWO IMEET WYSOTU n > 1. zAWISIMOSTX ATRIBUTOW DLQ DIZ˙@NKCII I KON˙@NKCII PRIWEDENA NA RIS. 9.13.
9.7. translqciq logi˜eskih wyravenij
157
FalseLab<0> TrueLab<0>
FalseLab<1> = FalseLab<0> TrueLab<1> = NodeLab<3>
AND
FalseLab<3> = FalseLab<0> TrueLab<3> = TrueLab<0>
FalseLab<0> TrueLab<0>
FalseLab<1> = NodeLab<3> TrueLab<1> = TrueLab<0>
OR
FalseLab<3> = FalseLab<0> TrueLab<3> = TrueLab<0>
rIS. 9.13:
eSLI DLQ KON˙@NKCII ZNAˆENIE LEWOGO PODDEREWA LOVNO I PO INDUKCII WYˆISLENIE LEWOGO PODDEREWA ZAWER[AETSQ KOMANDOJ GOTO FalseLab<1>, TO POLUˆAEM, ˆTO WYˆISLENIE WSEGO DEREWA ZAWER[AETSQ KOMANDOJ PEREHODA GOTO FalseLab<0> (= FalseLab<1>). eSLI VE ZNAˆENIE LEWOGO PODDEREWA ISTINNO, TO EGO WYˆISLENIE ZAWER[AETSQ KOMANDOJ PEREHODA GOTO TrueLab<1> (= NodeLab<3>). eSLI ZNAˆENIE PRAWOGO PODDEREWA LOVNO, TO WYˆISLENIE WSEGO DEREWA ZAWER[AETSQ KOMANDOJ GOTO FalseLab<0> (= FalseLab<3>). eSLI VE ONO ISTINNO, WYˆISLENIE WSEGO DEREWA ZAWER[AETSQ KOMANDOJ PEREHODA GOTO TrueLab<0> (= TrueLab<3>). aNALOGIˆNO – DLQ DIZ˙@NKCII. uTWERVDENIE 9.2. dLQ L@BOGO LOGIˆESKOGO WYRAVENIQ, SOSTOQ]EGO IZ KONSTANT, PROGRAMMA, POLUˆENNAQ W REZULXTATE OBHODA DEREWA “TOGO WYRAVENIQ, ZAWER[AETSQ SO ZNAˆENIEM LOGIˆESKOGO WYRAVENIQ W OBYˆNOJ INTERPRETACII, T.E. OSU]ESTWLQETSQ PEREHOD NA True DLQ ZNAˆENIQ, RAWNOGO true, I PEREHOD NA METKU False DLQ ZNAˆENIQ f alse. dOKAZATELXSTWO. —TO UTWERVDENIE QWLQETSQ ˆASTNYM SLUˆAEM PREDYDU]EGO. eGO SPRAWEDLIWOSTX SLEDUET IZ TOGO, ˆTO METKI KORNQ DEREWA RAWNY SOOTWETSTWENNO TrueLab = True I FalseLab = False. dOBAWIM TEPERX NOWOE PRAWILO W PREDYDU]U@ GRAMMATIKU: RULE BoolExpr ::= Ident SEMANTICS
glawa 9. generaciq koda
158
Code<0>=NodeLab<0> + ":" + "if (" + Val<1> + "==T) GOTO" + TrueLab<0> + "else GOTO" + FalseLab<0>. tOGDA, NAPRIMER, DLQ WYRAVENIQ A OR ( B AND C AND D ) OR E POLUˆIM SLEDU@]U@ PROGRAMMU: 1:7: if 2:8:4:9: if 5:10: if 6: if 3: if True: ... False: ...
(A==T) (B==T) (C==T) (D==T) (E==T)
GOTO GOTO GOTO GOTO GOTO
True else GOTO 2 5 else GOTO 3 6 else GOTO 3 True else GOTO 3 True else GOTO False
pRI KAVDOM KONKRETNOM NABORE DANNYH “TA PROGRAMMA PREWRA]AETSQ W PROGRAMMU WYˆISLENIQ LOGIˆESKOGO ZNAˆENIQ. uTWERVDENIE 9.3. w KAVDOJ STROKE PROGRAMMY, SFORMIROWANNOJ PREDYDU]EJ ATRIBUTNOJ SHEMOJ, ODNA IZ METOK WNUTRI USLOWNOGO OPERATORA SOWPADAET S METKOJ SLEDU@]EJ STROKI. dOKAZATELXSTWO. dEJSTWITELXNO, PO PRAWILAM NASLEDOWANIQ ATRIBUTOW TrueLab I FalseLab, W PRAWILAH DLQ DIZ˙@NKCII I KON˙@NKCII LIBO ATRIBUT FalseLab, LIBO ATRIBUT TrueLab PRINIMAET ZNAˆENIE METKI SLEDU@]EGO PODDEREWA. kROME TOGO, KAK ZNAˆENIE FalseLab, TAK I ZNAˆENIE TrueLab, PEREDA@TSQ W PRAWOE PODDEREWO OT PREDKA. tAKIM OBRAZOM, SAMYJ PRAWYJ POTOMOK WSEGDA IMEET ODNU IZ METOK TrueLab ILI FalseLab, RAWNU@ METKE PRAWOGO BRATA SOOTWETSTWU@]EGO PODDEREWA. uˆITYWAQ PORQDOK GENERACII KOMAND, POLUˆAEM SPRAWEDLIWOSTX UTWERVDENIQ. dOPOLNIM TEPERX ATRIBUTNU@ GRAMMATIKU SLEDU@]IM OBRAZOM: RULE Expr ::= BoolExpr SEMANTICS FalseLab<1>=False; TrueLab<1>=True; Sign<1>=false; Code<0>=Code<1>. RULE BoolExpr ::= BoolExpr ’AND’ BoolExpr SEMANTICS FalseLab<1>=FalseLab<0>; TrueLab<1>=NodeLab<3>; FalseLab<3>=FalseLab<0>; TrueLab<3>=TrueLab<0>; Sign<1>=false; Sign<3>=Sign<0>; Code<0>=NodeLab<0> + ":" + Code<1> + Code<3>.
9.7. translqciq logi˜eskih wyravenij
159
RULE BoolExpr ::= BoolExpr ’OR’ BoolExpr SEMANTICS FalseLab<1>=NodeLab<3>; TrueLab<1>=TrueLab<0>; FalseLab<3>=FalseLab<0>; TrueLab<3>=TrueLab<0>; Sign<1>=true; Sign<3>=Sign<0>; Code<0>=NodeLab<0> + ":" + Code<1> + Code<3>. RULE BoolExpr ::= ’NOT’ BoolExpr SEMANTICS FalseLab<2>=TrueLab<0>; TrueLab<2>=FalseLab<0>; Sign<2>=! Sign<0>; Code<0>=Code<2>. RULE BoolExpr ::= ’(’ BoolExpr ’)’ SEMANTICS FalseLab<2>=FalseLab<0>; TrueLab<2>=TrueLab<0>; Sign<2>=Sign<0>; Code<0>=NodeLab<0> + ":" + Code<2>. RULE BoolExpr ::= F SEMANTICS Code<0>=NodeLab<0> + ":" + "GOTO" + FalseLab<0>. RULE BoolExpr ::= T SEMANTICS Code<0>=NodeLab<0> + ":" + "GOTO" + TrueLab<0>. RULE BoolExpr ::= Ident SEMANTICS Code<0>=NodeLab<0> + ":" + "if (" + Val<1> + "==T) GOTO" + TrueLab<0> + "else GOTO" + FalseLab<0>. pRAWILA NASLEDOWANIQ ATRIBUTA Sign PRIWEDENY NA RIS. 9.14. pROGRAMMU VELATELXNO SFORMIROWATX TAKIM OBRAZOM, ˆTOBY else-METKA BYLA KAK RAZ METKOJ SLEDU@]EJ WER[INY. kAK “TO MOVNO SDELATX, SLEDUET IZ SLEDU@]EGO UTWERVDENIQ. uTWERVDENIE 9.4. w KAVDOJ TERMINALXNOJ WER[INE, METKA BLIVAJ[EGO PRAWOGO DLQ NEE PODDEREWA RAWNA ZNAˆENI@ ATRIBUTA FalseLab
glawa 9. generaciq koda
160
Sign
Sign
AND Sign = false
Sign<0>
NOT
OR Sign
Sign = true
Sign
Sign<2> = not Sign<0>
rIS. 9.14:
“TOJ WER[INY, TOGDA I TOLXKO TOGDA, KOGDA ZNAˆENIE ATRIBUTA Sign “TOJ WER[INY RAWNO true, I NAOBOROT, METKA BLIVAJ[EGO PRAWOGO DLQ NEE PODDEREWA RAWNA ZNAˆENI@ ATRIBUTA TrueLab “TOJ WER[INY, TOGDA I TOLXKO TOGDA, KOGDA ZNAˆENIE ATRIBUTA Sign RAWNO f alse. dOKAZATELXSTWO. dEJSTWITELXNO, ESLI BLIVAJ[EJ OB]EJ WER[INOJ QWLQETSQ AND, TO W LEWOGO POTOMKA PEREDAETSQ NodeLab PRAWOGO POTOMKA W KAˆESTWE TrueLab I ODNOWREMENNO Sign PRAWOGO POTOMKA RAWEN true. eSLI VE BLIVAJ[EJ OB]EJ WER[INOJ QWLQETSQ OR, TO W LEWOGO POTOMKA PEREDAETSQ NodeLab PRAWOGO POTOMKA W KAˆESTWE FalseLab I ODNOWREMENNO Sign PRAWOGO POTOMKA RAWEN f alse. wO WSE VE PRAWYE POTOMKI ZNAˆENIQ TrueLab, FalseLab I Sign PEREDA@TSQ IZ PREDKA (ZA ISKL@ˆENIEM PRAWILA DLQ NOT, W KOTOROM TrueLab I FalseLab MENQ@TSQ MESTAMI, NO ODNOWREMENNO NA PROTIWOPOLOVNYJ MENQETSQ I Sign). —TI DWA UTWERVDENIQ (3 I 4) POZWOLQ@T ZAMENITX POSLEDNEE PRAWILO ATRIBUTNOJ GRAMMATIKI SLEDU@]IM OBRAZOM: RULE BoolExpr ::= Ident SEMANTICS Code<0>=NodeLab<0> + ":" + (Sign<0> ? "if (" + Val<1> + "==T) GOTO" + TrueLab<0> : "if (" + Val<1> + "==F) GOTO" + FalseLab<0>). w SWO@ OˆEREDX, PRI GENERACII MA[INNYH KOMAND “TO PRAWILO MOVNO ZAMENITX NA SLEDU@]EE: RULE BoolExpr ::= Ident SEMANTICS
9.8. wydelenie ob˝ih podwyravenij
161
Code<0>=NodeLab<0> + ":" + "TST" + Val<1> + (Sign<0> ? "BNE" + TrueLab<0> : "BEQ" + FalseLab<0>). tAKIM OBRAZOM, DLQ WYRAVENIQ A OR ( B AND C AND D ) OR E POLUˆIM SLEDU@]IJ KOD NA KOMANDAH PEREHODA: 1:7:
TST BNE 2:8:4:9: TST BEQ 5:10: TST BEQ 6: TST BNE 3: TST BEQ True: ... False: ...
A True B 3 C 3 D True E False
eSLI “LEMENTOM LOGIˆESKOGO WYRAVENIQ QWLQETSQ SRAWNENIE, TO GENERIRUETSQ KOMANDA, SOOTWETSTWU@]AQ ZNAKU SRAWNENIQ (BEQ DLQ =, BNE DLQ <>, BGE DLQ >= I T.D.), ESLI ATRIBUT Sign SOOTWETSTWU@]EJ WER[INY IMEET ZNAˆENIE true, I OTRICANIE (BNE DLQ =, BEQ DLQ <>, BLT DLQ >= I T.D.), ESLI ATRIBUT Sign IMEET ZNAˆENIE f alse.
9.8
wYDELENIE OB]IH PODWYRAVENIJ
wYDELENIE OB]IH PODWYRAVENIJ OTNOSITSQ K OBLASTI OPTIMIZACII PROGRAMM. w OB]EM SLUˆAE TRUDNO (ILI DAVE NEWOZMOVNO) PROWESTI GRANICU MEVDU OPTIMIZACIEJ I “KAˆESTWENNOJ TRANSLQCIEJ”. oPTIMIZACIQ - “TO I ESTX KAˆESTWENNAQ TRANSLQCIQ. oBYˆNO TERMIN “OPTIMIZACIQ” UPOTREBLQ@T, KOGDA DLQ POWY[ENIQ KAˆESTWA PROGRAMMY ISPOLXZU@T EE GLUBOKIE PREOBRAZOWANIQ TAKIE, NAPRIMER, KAK PEREWOD W GRAFOWU@ FORMU DLQ IZUˆENIQ NETRIWIALXNYH SWOJSTW PROGRAMMY. w “TOM SMYSLE WYDELENIE OB]IH PODWYRAVENIJ – ODNA IZ PROSTEJ[IH OPTIMIZACIJ. dLQ EE OSU]ESTWLENIQ TREBUETSQ NEKOTOROE PREOBRAZOWANIE PROGRAMMY, A IMENNO POSTROENIE ORIENTIROWANNOGO ACIKLIˆESKOGO GRAFA, O KOTOROM GOWORILOSX W GLAWE, POSWQ]ENNOJ PROMEVUTOˆNYM PREDSTAWLENIQM. lINEJNYJ UˆASTOK – “TO POSLEDOWATELXNOSTX OPERATOROW, W KOTORU@ UPRAWLENIE WHODIT W NAˆALE I WYHODIT W KONCE BEZ OSTANOWKI I PEREHODA IZNUTRI. rASSMOTRIM DEREWO LINEJNOGO UˆASTKA, W KOTOROM WER[INAMI SLUVAT OPERACII, A POTOMKAMI – OPERANDY. bUDEM GOWORITX, ˆTO DWE WER[INY OBRAZU@T OB]EE PODWYRAVENIE, ESLI PODDEREWXQ DLQ NIH SOWPADA@T, T.E.
162
glawa 9. generaciq koda
IME@T ODINAKOWU@ STRUKTURU I, SOOTWETSTWENNO, ODINAKOWYE OPERACII WO WNUTRENNIH WER[INAH I ODINAKOWYE OPERANDY W LISTXQH. wYDELENIE OB]IH PODWYRAVENIJ POZWOLQET GENERIROWATX DLQ NIH KOD ODIN RAZ, HOTQ MOVET PRIWESTI I K NEKOTORYM TRUDNOSTQM, O ˆEM WKRATCE BUDET SKAZANO NIVE. wYDELENIE OB]IH PODWYRAVENIJ PROWODITSQ NA LINEJNOM UˆASTKE I OSNOWYWAETSQ NA DWUH POLOVENIQH. 1. pOSKOLXKU NA LINEJNOM UˆASTKE PEREMENNOJ MOVET BYTX NESKOLXKO PRISWAIWANIJ, TO PRI WYDELENII OB]IH PODWYRAVENIJ NEOBHODIMO RAZLIˆATX WHOVDENIQ PEREMENNYH DO I POSLE PRISWAIWANIQ. dLQ “TOGO KAVDAQ PEREMENNAQ SNABVAETSQ SˆETˆIKOM. wNAˆALE SˆETˆIKI WSEH PEREMENNYH USTANAWLIWA@TSQ RAWNYMI 0. pRI KAVDOM PRISWAIWANII PEREMENNOJ EE SˆETˆIK UWELIˆIWAETSQ NA 1. 2. wYDELENIE OB]IH PODWYRAVENIJ OSU]ESTWLQETSQ PRI OBHODE DEREWA WYRAVENIQ SNIZU WWERH SLEWA NAPRAWO. pRI DOSTIVENII OˆEREDNOJ WER[INY (PUSTX OPERACIQ, PRIMENENNAQ W “TOJ WER[INE, ESTX BINARNAQ op; W SLUˆAE UNARNOJ OPERACII RASSUVDENIQ TE VE) PROSMATRIWAEM OB]IE PODWYRAVENIQ, SWQZANNYE S op. eSLI IMEETSQ WYRAVENIE, SWQZANNOE S op I TAKOE, ˆTO EGO LEWYJ OPERAND ESTX OB]EE PODWYRAVENIE S LEWYM OPERANDOM NOWOGO WYRAVENIQ, A PRAWYJ OPERAND - OB]EE PODWYRAVENIE S PRAWYM OPERANDOM NOWOGO WYRAVENIQ, TO OB˙QWLQEM NOWOE WYRAVENIE OB]IM S NAJDENNYM I W NOWOM WYRAVENII ZAPOMINAEM UKAZATELX NA NAJDENNOE OB]EE WYRAVENIE. bAZISOM POSTROENIQ SLUVIT PEREMENNAQ: ESLI OPERANDAMI OBOIH WYRAVENIJ QWLQ@TSQ ODINAKOWYE PEREMENNYE S ODINAKOWYMI SˆETˆIKAMI, TO ONI QWLQ@TSQ OB]IMI PODWYRAVENIQMI. eSLI WYRAVENIE NE WYDELENO KAK OB]EE, ONO ZANOSITSQ W SPISOK OPERACIJ, SWQZANNYH S op. rASSMOTRIM TEPERX REALIZACI@ ALGORITMA WYDELENIQ OB]IH PODWYRAVENIJ. pODDERVIWA@TSQ SLEDU@]IE GLOBALXNYE PEREMENNYE: Table – TABLICA PEREMENNYH; DLQ KAVDOJ PEREMENNOJ HRANITSQ EE SˆETˆIK (Count) I UKAZATELX NA WER[INU DEREWA WYRAVENIJ, W KOTOROJ PEREMENNAQ WSTRETILASX W POSLEDNIJ RAZ W PRAWOJ ˆASTI (Last); OpTable – TABLICA SPISKOW (TIPA LisType) OB]IH PODWYRAVENIJ, SWQZANNYH S KAVDOJ OPERACIEJ. kAVDYJ “LEMENT SPISKA HRANIT UKAZATELX NA WER[INU DEREWA (POLE Addr) I PRODOLVENIE SPISKA (POLE List). s KAVDOJ WER[INOJ DEREWA WYRAVENIQ SWQZANA ZAPISX TIPA NodeType, SO SLEDU@]IMI POLQMI: Left – LEWYJ POTOMOK WER[INY, Right – PRAWYJ POTOMOK WER[INY, Comm – UKAZATELX NA PREDYDU]EE OB]EE PODWYRAVENIE, Flag – PRIZNAK, QWLQETSQ LI PODDEREWO OB]IM PODWYRAVENIEM, Varbl – PRIZNAK, QWLQETSQ LI WER[INA PEREMENNOJ, VarCount – SˆETˆIK PEREMENNOJ. wYDELENIE OB]IH PODWYRAVENIJ I POSTROENIE DEREWA OSU]ESTWLQ@TSQ PRIWEDENNYMI NIVE PRAWILAMI. aTRIBUT Entry NETERMINALA Variable DAET UKAZATELX NA PEREMENNU@ W TABLICE Table. aTRIBUT Val SIMWOLA Op DAET KOD OPERACII. aTRIBUT Node SIMWOLOW IntExpr I Assignment DAET UKAZATELX NA ZAPISX TIPA NodeType SOOTWETSTWU@]EGO NETERMINALA.
9.8. wydelenie ob˝ih podwyravenij RULE Assignment ::= Variable IntExpr SEMANTICS Table[Entry<1>].Count=Table[Entry<1>].Count+1. // uWELIˆITX SˆETˆIK PRISWAIWANIJ PEREMENNOJ RULE IntExpr ::= Variable SEMANTICS if ((Table[Entry<1>].Last!=NULL) // pEREMENNAQ UVE BYLA ISPOLXZOWANA && (Table[Entry<1>].Last->VarCount == Table[Entry<1>].Count )) // s TEH POR PEREMENNOJ NE BYLO PRISWAIWANIQ {Node<0>->Flag=true; // pEREMENNAQ - OB]EE PODWYRAVENIE Node<0>->Comm= Table[Entry<1>].Last; // uKAZATELX NA OB]EE PODWYRAVENIE } else Node<0>->Flag=false; Table[Entry<1>].Last=Node<0>; // uKAZATELX NA POSLEDNEE ISPOLXZOWANIE PEREMENNOJ Node<0>->VarCount= Table[Entry<1>].Count; // nOMER ISPOLXZOWANIQ PEREMENNOJ Node<0>->Varbl=true. // wYRAVENIE - PEREMENNAQ RULE IntExpr ::= Op IntExpr IntExpr SEMANTICS LisType * L; //tIP SPISKOW OPERACII if ((Node<2>->Flag) && (Node<3>->Flag)) // i SPRAWA, I SLEWA - OB]IE PODWYRAVENIQ {L=OpTable[Val<1>]; // nAˆALO SPISKA OB]IH PODWYRAVENIJ DLQ OPERACII while (L!=NULL) if ((Node<2>==L->Left) && (Node<3>==L->Right)) // lEWOE I PRAWOE PODDEREWXQ SOWPADA@T break; else L=L->List;// sLEDU@]IJ “LEMENT SPISKA } else L=NULL; //nE OB]EE PODWYRAVENIE Node<0>->Varbl=false; // nE PEREMENNAQ
163
164
glawa 9. generaciq koda
Node<0>->Comm=L; //uKAZATELX NA PREDYDU]EE OB]EE PODWYRAVENIE ILI NULL if (L!=NULL) {Node<0>->Flag=true; //oB]EE PODWYRAVENIE Node<0>->Left=Node<2>; // uKAZATELX NA LEWOE PODDEREWO Node<0>->Right=Node<3>; // uKAZATELX NA PRAWOE PODDEREWO } else {Node<0>->Flag=false; // dANNOE WYRAVENIE NE MOVET RASSMATRIWATXSQ KAK OB]EE // eSLI OB]EGO PODWYRAVENIQ S DANNYM NE BYLO, // WKL@ˆITX DANNOE W SPISOK DLQ OPERACII L=alloc(sizeof(struct LisType)); L->Addr=Node<0>; L->List=OpTable[Val<1>]; OpTable[Val<1>]=L; }. rASSMOTRIM TEPERX NEKOTORYE PROSTYE PRAWILA RASPREDELENIQ REGISTROW PRI NALIˆII OB]IH PODWYRAVENIJ. eSLI ˆISLO REGISTROW OGRANIˆENO, MOVNO WYBRATX ODIN IZ SLEDU@]IH DWUH WARIANTOW. 1. pRI OBNARUVENII OB]EGO PODWYRAVENIQ S PODWYRAVENIEM W UVE PROSMOTRENNOJ ˆASTI DEREWA (I, ZNAˆIT, S UVE RASPREDELENNYMI REGISTRAMI) PROWERQEM, RASPOLOVENO LI EGO ZNAˆENIE NA REGISTRE. eSLI DA, I ESLI REGISTR POSLE “TOGO NE MENQLSQ, ZAMENQEM WYˆISLENIE PODDEREWA NA ZNAˆENIE W REGISTRE. eSLI REGISTR MENQLSQ, TO WYˆISLQEM PODWYRAVENIE ZANOWO. 2. wWODIM E]E ODIN PROHOD. nA PERWOM PROHODE RASPREDELQEM REGISTRY. eSLI W NEKOTOROJ WER[INE OBNARUVIWAETSQ, ˆTO EE PODDEREWO OB]EE S UVE WYˆISLENNYM RANEE, NO ZNAˆENIE REGISTRA POTERQNO, TO W TAKOJ WER[INE NA WTOROM PROHODE NEOBHODIMO SGENERIROWATX KOMANDU SBROSA REGISTRA W RABOˆU@ PAMQTX. wYIGRY[ W KODE BUDET, ESLI STOIMOSTX KOMANDY SBROSA REGISTRA + DOSTUP K PAMQTI W POWTORNOM ISPOLXZOWANII “TOJ PAMQTI NE PREWOSHODIT STOIMOSTI ZAMENQEMOGO PODDEREWA. pOSKOLXKU STOIMOSTX KOMANDY MOVE IZWESTNA, MOVNO SRAWNITX STOIMOSTI I PRINQTX OPTIMALXNOE RE[ENIE: POMETITX PREDYDU]U@ WER[INU DLQ SBROSA LIBO WYˆISLQTX PODDEREWO POLNOSTX@.
gLAWA 10
sISTEMY AWTOMATIZACII POSTROENIQ TRANSLQTOROW sISTEMY AWTOMATIZACII POSTROENIQ TRANSLQTOROW (sapt) PREDNAZNAˆENY DLQ AWTOMATIZACII PROCESSA RAZRABOTKI TRANSLQTOROW. oˆEWIDNO, ˆTO DLQ TOGO, ˆTOBY OPISATX TRANSLQTOR, NEOBHODIMO IMETX FORMALIZM DLQ OPISANIQ. —TOT FORMALIZM ZATEM REALIZUETSQ W WIDE WHODNOGO QZYKA sapt. kAK PRAWILO, FORMALIZMY OSNOWANY NA ATRIBUTNYH GRAMMATIKAH. nIVE OPISANY DWE sapt, POLUˆIW[IE RASPROSTRANENIE: super [3] I Yacc. w OSNOWU PERWOJ SISTEMY POLOVENY LL(1)-GRAMMATIKI I L-ATRIBUTNYE WYˆISLITELI, W OSNOWU WTOROJ – LALR(1)-GRAMMATIKI I S-ATRIBUTNYE WYˆISLITELI.
10.1
sISTEMA super
pROGRAMMA NA WHODNOM QZYKE super (“METAPROGRAMMA”) SOSTOIT IZ SLEDU@]IH RAZDELOW: - zAGOLOWOK; - rAZDEL KONSTANT; - rAZDEL TIPOW; - aLFAWIT; - rAZDEL FAJLOW; - rAZDEL BIBLIOTEKI; - aTRIBUTNAQ SHEMA. zAGOLOWOK OPREDELQET IMQ ATRIBUTNOJ GRAMMATIKI, PERWYE TRI BUKWY IMENI ZADA@T RAS[IRENIE IMENI WHODNOGO FAJLA DLQ REALIZUEMOGO TRANSLQTORA. rAZDEL KONSTANT SODERVIT OPISANIE KONSTANT, RAZDEL TIPOW – OPISANIE TIPOW. aLFAWIT SODERVIT PEREˆISLENIE NETERMINALXNYH SIMWOLOW I KLASSOW LEKSEM, A TAKVE ATRIBUTOW (I IH TIPOW), SOPOSTAWLENNYH “TIM SIMWOLAM. 165
166glawa 10. sistemy awtomatizacii postroeniq translqtorow kLASSY LEKSEM QWLQ@TSQ TERMINALXNYMI SIMWOLAMI S TOˆKI ZRENIQ SINTAKSIˆESKOGO ANALIZA, NO MOGUT IMETX ATRIBUTY, WYˆISLQEMYE W PROCESSE LEKSIˆESKOGO ANALIZA. oPREDELENIE KLASSA LEKSEM SOSTOIT W ZADANII IMENI KLASSA, IMEN ATRIBUTOW DLQ “TOGO KLASSA I TIPOW “TIH ATRIBUTOW. w RAZDELE OPREDELENIQ NETERMINALXNYH SIMWOLOW SODERVITSQ PEREˆISLENIE “TIH SIMWOLOW S UKAZANIEM PRIPISANNYH IM ATRIBUTOW I IH TIPOW. aKSIOMA GRAMMATIKI UKAZYWAETSQ PERWYM SIMWOLOM W SPISKE NETERMINALOW. rAZDEL BIBLIOTEKI SODERVIT ZAGOLOWKI PROCEDUR I FUNKCIJ, ISPOLXZUEMYH W FORMULAH ATRIBUTNOJ GRAMMATIKI. rAZDEL FAJLOW SODERVIT OPISANIE FAJLOWYH PEREMENNYH, ISPOLXZUEMYH W FORMULAH ATRIBUTNOJ GRAMMATIKI. fAJLOWYE PEREMENNYE MOVNO RASSMATRIWATX KAK ATRIBUTY AKSIOMY. aTRIBUTNAQ SHEMA SOSTOIT IZ SPISKA SINTAKSIˆESKIH PRAWIL I SOPOSTAWLENNYH IM SEMANTIˆESKIH PRAWIL. dLQ OPISANIQ SINTAKSISA QZYKA ISPOLXZUETSQ RAS[IRENNAQ FORMA b“KUSA-nAURA. tERMINALXNYE SIMWOLY W PRAWOJ ˆASTI ZAKL@ˆA@TSQ W KAWYˆKI, KLASSY LEKSEM I NETERMINALY ZADA@TSQ IH IMENAMI. dLQ ZADANIQ W PRAWOJ ˆASTI NEOBQZATELXNYH SIMWOLOW ISPOLXZU@TSQ SKOBKI [ ], DLQ ZADANIQ POWTORQ@]IHSQ KONSTRUKCIJ ISPOLXZU@TSQ SKOBKI ( ). w “TOM SLUˆAE MOVET BYTX UKAZAN RAZDELITELX SIMWOLOW (POSLE /). nAPRIMER, A ::= B [ C ] ( D ) ( E / ’,’ ) pERWYM PRAWILOM W ATRIBUTNOJ SHEME DOLVNO BYTX PRAWILO DLQ AKSIOMY. kAVDOMU SINTAKSIˆESKOMU PRAWILU MOGUT BYTX SOPOSTAWLENY SEMANTIˆESKIE DEJSTWIQ. kAVDOE TAKOE DEJSTWIE – “TO OPERATOR, KOTORYJ MOVET ISPOLXZOWATX ATRIBUTY KAK SIMWOLOW DANNOGO PRAWILA (LOKALXNYE ATRIBUTY), TAK I SIMWOLOW, MOGU]IH BYTX PREDKAMI (DINAMIˆESKI) SIMWOLA LEWOJ ˆASTI DANNOGO PRAWILA W DEREWE RAZBORA (GLOBALXNYE ATRIBUTY). dLQ SSYLKI NA LOKALXNYE ATRIBUTY SIMWOLY DANNOGO PRAWILA (KAK TERMINALXNYE, TAK I NETERMINALXNYE) NUMERU@TSQ OT 0 (DLQ SIMWOLA LEWOJ ˆASTI). pRI SSYLKE NA GLOBALXNYE ATRIBUTY NADO IMETX W WIDU, ˆTO ATRIBUTY IME@T OBLASTI WIDIMOSTI NA DEREWE RAZBORA. oBLASTX@ WIDIMOSTI ATRIBUTA WER[INY, POMEˆENNOJ N, QWLQETSQ WSE PODDEREWO N, ZA ISKL@ˆENIEM EGO PODDEREWXEW, TAKVE POMEˆENNYH N. iSPOLNENIE OPERATOROW SEMANTIˆESKOJ ˆASTI PRAWILA PRIWQZYWAETSQ K OBHODU DEREWA RAZBORA SWERHU WNIZ SLEWA NAPRAWO. dLQ “TOGO KAVDYJ OPERATOR MOVET BYTX POMEˆEN METKOJ, SOSTOQ]EJ IZ NOMERA WETWI PRAWILA, K WYPOLNENI@ KOTOROJ DOLVEN BYTX PRIWQZAN OPERATOR, I, WOZMOVNO, ODNOGO IZ SUFFIKSOW A, B, E, M. sUFFIKS A ZADAET WYPOLNENIE OPERATORA PERED KAVDYM WHOVDENIEM SINTAKSIˆESKOJ KONSTRUKCII, ZAKL@ˆENNOJ W SKOBKI POWTORENIJ ( ). sUFFIKS B ZADAET WYPOLNENIE OPERATORA POSLE KAVDOGO WHOVDENIQ SINTAKSIˆESKOJ KONSTRUKCII, ZAKL@ˆENNOJ W SKOBKI POWTORENIJ ( ). sUFFIKS M ZADAET WYPOLNENIE OPERATORA MEVDU WHOVDENIQMI SINTAKSIˆESKOJ KONSTRUK-
10.2. sistema YACC
167
CII, ZAKL@ˆENNOJ W SKOBKI POWTORENIJ ( ). sUFFIKS E ZADAET WYPOLNENIE OPERATORA W TOM SLUˆAE, KOGDA KONSTRUKCIQ, ZAKL@ˆENNAQ W SKOBKI [ ], OTSUTSTWUET. pRIMER ISPOLXZOWANIE METOK ATRIBUTNYH FORMUL: D ::= ’d’ => $0.y:=$0.x+1. A ::= B (C) [D] => $2.x:=1; 2M: $2.x:=$2.x+1; $3.x:=$2.x; 3E: $3.y:=$3.x; 3: writeln($3.y). pROCEDURA writeln NAPEˆATAET ˆISLO WHOVDENIJ SIMWOLA C W C-SPISOK, ESLI D OPU]ENO. w PROTIWNOM SLUˆAE NAPEˆATANNOE ˆISLO BUDET NA EDINICU BOLX[E.
10.2
sISTEMA Yacc
w OSNOWU SISTEMY Yacc POLOVEN SINTAKSIˆESKIJ ANALIZATOR TIPA LALR(1), GENERIRUEMYJ PO WHODNOJ (META) PROGRAMME. —TA PROGRAMMA SOSTOIT IZ TREH ˆASTEJ: %{ sI-TEKST %} %token sPISOK IMEN LEKSEM %% sPISOK PRAWIL TRANSLQCII %% sLUVEBNYE sI-PODPROGRAMMY sI-TEKST (KOTORYJ WMESTE S OKRUVA@]IMI SKOBKAMI %{ I %} MOVET OTSUTSTWOWATX) OBYˆNO SODERVIT sI-OB˙QWLENIQ (WKL@ˆAQ #include I #define), ISPOLXZUEMYE W TEKSTE NIVE. —TOT sI-TEKST MOVET SODERVATX I OB˙QWLENIQ (ILI PREDOB˙QWLENIQ) FUNKCIJ. sPISOK IMEN LEKSEM SODERVIT IMENA, KOTORYE PREOBRAZU@TSQ Yacc-PREPROCESSOROM W OB˙QWLENIQ KONSTANT (#define). kAK PRAWILO, “TI IMENA ISPOLXZU@TSQ KAK IMENA KLASSOW LEKSEM I SLUVAT DLQ OPREDELENIQ INTERFEJSA S LEKSIˆESKIM ANALIZATOROM. kAVDOE PRAWILO TRANSLQCII IMEET WID lEWAQ_ˆASTX : ALXTERNATIWA_1 {SEMANTIˆESKIE_DEJSTWIQ_1} | ALXTERNATIWA_2 {SEMANTIˆESKIE_DEJSTWIQ_2} |... | ALXTERNATIWA_n {SEMANTIˆESKIE_DEJSTWIQ_n} ;
168glawa 10. sistemy awtomatizacii postroeniq translqtorow kAVDOE SEMANTIˆESKOE DEJSTWIE – “TO POSLEDOWATELXNOSTX OPERATOROW sI. pRI “TOM KAVDOMU NETERMINALU MOVET BYTX SOPOSTAWLEN ODIN SINTEZIRUEMYJ ATRIBUT. nA ATRIBUT NETERMINALA LEWOJ ˆASTI SSYLKA OSU]ESTWLQETSQ POSREDSTWOM ZNAˆKA $$, NA ATRIBUTY SIMWOLOW PRAWOJ ˆASTI – POSREDSTWOM ZNAˆKOW $1, $2 , . . . , $n, PRIˆEM NOMER SOOTWETSTWUET PORQDKU “LEMENTOW PRAWOJ ˆASTI, WKL@ˆAQ SEMANTIˆESKIE DEJSTWIQ. kAVDOE SEMANTIˆESKOE DEJSTWIE MOVET WYRABATYWATX ZNAˆENIE W REZULXTATE WYPOLNENIQ PRISWAIWANIQ $$=wYRAVENIE. iSPOLNENIE TEKOGO OPERATORA W POSLEDNEM SEMANTIˆESKOM DEJSTWII OPREDELQET ZNAˆENIE ATRIBUTA SIMWOLA LEWOJ ˆASTI. w NEKOTORYH SLUˆAQH DOPUSKAETSQ ISPOLXZOWANIE GRAMMATIK, IME@]IH KONFLIKTY. pRI “TOM SINTAKSIˆESKIJ ANALIZATOR RAZRE[AET KONFLIKTY SLEDU@]IM OBRAZOM: – KONFLIKTY TIPA SWERTKA/SWERTKA RAZRE[A@TSQ WYBOROM PRAWILA, PRED[ESTWU@]EGO WO WHODNOJ METAPROGRAMME; – KONFLIKTY TIPA SDWIG/SWERTKA RAZRE[A@TSQ PREDPOˆTENIEM SDWIGA. pOSKOLXKU “TIH PRAWIL NE WSEGDA DOSTATOˆNO DLQ PRAWILXNOGO OPREDELENIQ ANALIZATORA, DOPUSKAETSQ OPREDELENIE STAR[INSTWA I ASSOCIATIWNOSTI TERMINALOW. nAPRIMER, OB˙QWLENIE %left ’+’ ’-’ OPREDELQET + I −, IME@]IMI ODINAKOWYJ PRIORITET I IME@]IMI LEWU@ ASSOCIATIWNOSTX. oPERACI@ MOVNO OPREDELITX KAK PRAWOASSOCIATIWNU@ W REZULXTATE OB˙QWLENIQ: %right ’^’ bINARNU@ OPERACI@ MOVNO OPREDELITX KAK NEASSOCIATIWNU@ (T.E. NE DOPUSKA@]U@ POQWLENIQ OB˙EDINENIQ DWUH PODRQD IDU]IH ZNAKOW OPERACII): %nonassoc ’<’ sIMWOLY, PEREˆISLENNYE W ODNOM OB˙QWLENII, IME@T ODINAKOWOE STAR[INSTWO. sTAR[INSTWO WY[E DLQ KAVDOGO POSLEDU@]EGO OB˙QWLENIQ. kONFLIKTY RAZRE[A@TSQ PUTEM PRISWAIWANIQ STAR[INSTWA I ASSOCIATIWNOSTI KAVDOMU PRAWILU GRAMMATIKI I KAVDOMU TERMINALU, UˆASTWU@]IM W KONFLIKTE. eSLI NEOBHODIMO WYBRATX MEVDU SDWIGOM WHODNOGO SIMWOLA s I SWERTKOJ PO PRAWILU A → w, SWERTKA DELAETSQ, ESLI STAR[INSTWO PRAWILA BOLX[E STAR[INSTWA s ILI ESLI STAR[INSTWO ODINAKOWO, A PRAWILO LEWOASSOCIATIWNO. w PROTIWNOM SLUˆAE DELAETSQ SDWIG. oBYˆNO ZA STAR[INSTWO PRAWILA PRINIMAETSQ STAR[INSTWO SAMOGO PRAWOGO TERMINALA PRAWILA. w TEH SLUˆAQH, KOGDA SAMYJ PRAWYJ TERMINAL NE DAET NUVNOGO PRIORITETA, “TOT PRIORITET MOVNO NAZNAˆITX SLEDU@]IM OB˙QWLENIEM: %prec TERMINAL
10.2. sistema YACC
169
sTAR[INSTWO I ASSOCIATIWNOSTX PRAWILA W “TOM SLUˆAE BUDUT TAKIMI VE, KAK U UKAZANNOGO TERMINALA. Yacc NE SOOB]AET O KONFLIKTAH, RAZRE[AEMYH S POMO]X@ ASSOCIATIWNOSTI I PRIORITETOW. wOSSTANOWLENIE POSLE O[IBOK UPRAWLQETSQ POLXZOWATELEM S POMO]X@ WWEDENIQ W GRAMMATIKU “PRAWIL O[IBKI” WIDA A → error w. zDESX error – KL@ˆEWOE SLOWO Yacc. kOGDA WSTREˆAETSQ SINTAKSIˆESKAQ O[IBKA, ANALIZATOR TRAKTUET SOSTOQNIE, NABOR SITUACIJ DLQ KOTOROGO SODERVIT PRAWILO DLQ error, NEKOTORYM SPECIALXNYM OBRAZOM: SIMWOLY IZ STEKA WYTALKIWA@TSQ DO TEH POR, POKA NA WERHU[KE STEKA NE BUDET OBNARUVENO SOSTOQNIE, DLQ KOTOROGO NABOR SITUACIJ SODERVIT SITUACI@ WIDA [A → .error w]. pOSLE ˆEGO W STEK FIKTIWNO POME]AETSQ SIMWOL error, KAK ESLI BY ON WSTRETILSQ WO WHODNOJ STROKE. eSLI w PUSTO, DELAETSQ SWERTKA. pOSLE “TOGO ANALIZATOR PROPUSKAET WHODNYE SIMWOLY, POKA NE NAJDET TAKOJ, S KOTORYM MOVNO PRODOLVITX NORMALXNYJ RAZBOR. eSLI w NE PUSTO, PROSMATRIWAETSQ WHODNAQ STROKA I DELAETSQ POPYTKA SWERNUTX w. eSLI w SOSTOIT TOLXKO IZ TERMINALOW, “TA STROKA I]ETSQ WO WHODNOM POTOKE.
170glawa 10. sistemy awtomatizacii postroeniq translqtorow
lITERATURA [1] aDELXSON-wELXSKIJ g.m., lANDIS e.m. oDIN ALGORITM ORGANIZACII INFORMACII. dan sssr. 1962. t.146. N 2. s. 263-266. [2] aHO a., uLXMAN d. tEORIQ SINTAKSIˆESKOGO ANALIZA, PEREWODA I KOMPILQCII, W 2-H T. m.: mIR, 1978. [3] bEZDU[NYJ a.n., l@TYJ w.g., sEREBRQKOW w.a. rAZRABOTKA KOMPILQTOROW W SISTEME super. m.: wc an sssr, 1991. [4] gRIS d. kONSTRUIROWANIE KOMPILQTOROW DLQ CIFROWYH WYˆISLITELXNYH MA[IN. m.: mIR, 1975. [5] kNUT d. iSKUSSTWO PROGRAMMIROWANIQ DLQ —wm. t.1. oSNOWNYE ALGORITMY. m.: mIR, 1976. [6] kNUT d. sEMANTIKA KONTEKSTNO-SWOBODNYH QZYKOW. w SB.: sEMANTIKA QZYKOW PROGRAMMIROWANIQ. m.: mIR, 1980. [7] kUROˆKIN w.m. aLGORITM RASPREDELENIQ REGISTROW DLQ WYRAVENIJ ZA ODIN OBHOD DEREWA WYWODA. 2 wSES. KONF “aWTOMATIZACIQ PROIZWODSTWA ppp I TRANSLQTOROW”. 1983. s. 104-105. [8] lAWROW s.s., gONˆAROWA l.i. aWTOMATIˆESKAQ OBRABOTKA DANNYH. hRANENIE INFORMACII W PAMQTI —wm. m.: nAUKA, 1971. [9] nADEVIN d.‘., sEREBRQKOW w.a., hODUKIN w.m. pROMEVUTOˆNYJ QZYK lIDER (PREDWARITELXNOE SOOB]ENIE). oBRABOTKA SIMWOLXNOJ INFORMACII. m.: wc an sssr, 1987. s. 50-63. [10] Aho A., Sethi R., Ullman J. Compilers: principles, techniques and tools. N.Y.: Addison-Wesley, 1986. [11] Aho A.U., Ganapathi M., Tjiang S.W. Code generation using tree matching and dynamic programing. ACM Trans. Program. Languages and Systems. 1989. V.11.N 4. [12] Bezdushny A., Serebriakov V. The use of the parsing method for optimal code generation and common subexpression elimination. Techn. et Sci. Inform. 1993. V.12. N.1. P.69-92. 171
172
literatura
[13] Emmelman H., Schroer F.W., Landweher R. BEG – a generator for efficient back-ends. ACM SIGPLAN. 1989. V.11. N 4.p.227-237 [14] Fraser C.W., Hanson D.R. A Retargetable compiler for ANSI C. SIGPLAN Notices. 1991. V 26. [15] Graham S.L., Harrison M.A., Ruzzo W.L. An improved context-free recognizer. ACM Trans. Program. Languages and Systems. 1980. N.2. [16] Harrison M.A. Introduction to formal language theory. Reading, Mass.: Addison-Wesley, 1978.
oGLAWLENIE 1 wWEDENIE 1.1 mESTO KOMPILQTORA W PROGRAMMNOM OBESPEˆENII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 sTRUKTURA KOMPILQTORA . . . . . . . . . . . . . . . . . . . . . . 2 qZYKI I IH PREDSTAWLENIE 2.1 aLFAWITY, CEPOˆKI I QZYKI . . . . . . . . . . 2.2 pREDSTAWLENIE QZYKOW . . . . . . . . . . . . . 2.3 gRAMMATIKI . . . . . . . . . . . . . . . . . . . 2.3.1 fORMALXNOE OPREDELENIE GRAMMATIKI 2.3.2 tIPY GRAMMATIK I IH SWOJSTWA . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
5 5 6 9 9 11 13 13 14
3 lEKSIˆESKIJ ANALIZ 17 3.1 rEGULQRNYE MNOVESTWA I WYRAVENIQ . . . . . . . . . . . . . . . 19 3.2 kONEˆNYE AWTOMATY . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.3 aLGORITMY POSTROENIQ KONEˆNYH AWTOMATOW . . . . . . . . . . 25 3.3.1 pOSTROENIE NEDETERMINIROWANNOGO KONEˆNOGO AWTOMATA PO REGULQRNOMU WYRAVENI@ . . . . . . . . . . . . . . 25 3.3.2 pOSTROENIE DETERMINIROWANNOGO KONEˆNOGO AWTOMATA PO NEDETERMINIROWANNOMU . . . . . . . . . . . 27 3.3.3 pOSTROENIE DETERMINIROWANNOGO KONEˆNOGO AWTOMATA PO REGULQRNOMU WYRAVENI@ . . . . . . . . . . 28 3.3.4 pOSTROENIE DETERMINIROWANNOGO KONEˆNOGO AWTOMATA S MINIMALXNYM ˆISLOM SOSTOQNIJ . . . . . . 32 3.4 rEGULQRNYE MNOVESTWA I IH PREDSTAWLENIQ . . . . . . . . . . . 34 3.5 pROGRAMMIROWANIE LEKSIˆESKOGO ANALIZA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.6 kONSTRUKTOR LEKSIˆESKIH ANALIZATOROW LEX . . . . . . . . . . 40 4 sINTAKSIˆESKIJ ANALIZ 4.1 ks-GRAMMATIKI I mp-AWTOMATY . . . 4.2 pREOBRAZOWANIQ ks-GRAMMATIK . . . . 4.3 pREDSKAZYWA@]IJ RAZBOR SWERHU-WNIZ 4.3.1 aLGORITM RAZBORA SWERHU-WNIZ 173
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
45 45 50 51 51
oglawlenie
174
fUNKCII F IRST I F OLLOW . . . . . . . . . . kONSTRUIROWANIE TABLICY PREDSKAZYWA@]EGO ZATORA . . . . . . . . . . . . . . . . . . . . . . . . 4.3.4 LL(1)-GRAMMATIKI . . . . . . . . . . . . . . . . . 4.3.5 uDALENIE LEWOJ REKURSII . . . . . . . . . . . . . 4.3.6 lEWAQ FAKTORIZACIQ . . . . . . . . . . . . . . . 4.3.7 rEKURSIWNYJ SPUSK . . . . . . . . . . . . . . . . 4.3.8 wOSSTANOWLENIE POSLE SINTAKSIˆESKIH O[IBOK rAZBOR SNIZU-WWERH TIPA SDWIG-SWERTKA . . . . . . . . 4.4.1 oSNOWA . . . . . . . . . . . . . . . . . . . . . . . 4.4.2 LR(1)-ANALIZATORY . . . . . . . . . . . . . . . . 4.4.3 kONSTRUIROWANIE LR(1)-TABLICY . . . . . . . . 4.4.4 LR(1)-GRAMMATIKI . . . . . . . . . . . . . . . . . 4.4.5 wOSSTANOWLENIE POSLE SINTAKSIˆESKIH O[IBOK 4.4.6 wARIANTY LR-ANALIZATOROW . . . . . . . . . . . 4.3.2 4.3.3
4.4
. . . . . ANALI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55 57 58 58 60 61 62 63 63 64 68 72 74 74
5 —LEMENTY TEORII PEREWODA 77 5.1 pREOBRAZOWATELI S MAGAZINNOJ PAMQTX@ . . . . . . . . . . . . . 77 5.2 sINTAKSIˆESKI UPRAWLQEMYJ PEREWOD . . . . . . . . . . . . . . . 78 5.2.1 sHEMY SINTAKSIˆESKI UPRAWLQEMOGO PEREWODA . . . . . . 79 5.2.2 oBOB]ENNYE SHEMY SINTAKSIˆESKI UPRAWLQEMOGO PEREWODA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 5.3 aTRIBUTNYE GRAMMATIKI . . . . . . . . . . . . . . . . . . . . . . 83 5.3.1 oPREDELENIE ATRIBUTNYH GRAMMATIK . . . . . . . . . . . 83 5.3.2 kLASSY ATRIBUTNYH GRAMMATIK I IH REALIZACIQ . . . . 88 5.3.3 qZYK OPISANIQ ATRIBUTNYH GRAMMATIK . . . . . . . . . 90 6 pROWERKA KONTEKSTNYH USLOWIJ 95 6.1 oPISANIE OBLASTEJ WIDIMOSTI I BLOˆNOJ STRUKTURY . . . . . . 95 6.2 zANESENIE W SREDU I POISK OB˙EKTOW . . . . . . . . . . . . . . . . 97 7 oRGANIZACIQ TABLIC SIMWOLOW 7.1 tABLICY IDENTIFIKATOROW . . . . . . . 7.2 tABLICY RASSTANOWKI . . . . . . . . . . 7.3 tABLICY RASSTANOWKI SO SPISKAMI . . 7.4 fUNKCII RASSTANOWKI . . . . . . . . . . 7.5 tABLICY NA DEREWXQH . . . . . . . . . . 7.6 rEALIZACIQ BLOˆNOJ STRUKTURY . . . . 7.7 sRAWNENIE METODOW REALIZACII TABLIC
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
8 pROMEVUTOˆNOE PREDSTAWLENIE PROGRAMMY 8.1 pREDSTAWLENIE W WIDE ORIENTIROWANNOGO GRAFA 8.2 tREHADRESNYJ KOD . . . . . . . . . . . . . . . . . 8.3 lINEARIZOWANNYE PREDSTAWLENIQ . . . . . . . . 8.4 wIRTUALXNAQ MA[INA Java . . . . . . . . . . . . 8.4.1 oRGANIZACIQ PAMQTI . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . .
105 105 107 109 111 112 116 116
. . . . .
119 119 120 124 126 126
oglawlenie
8.5 8.6
175
8.4.2 nABOR KOMAND WIRTUALXNOJ MA[INY . . . . . . . . . . . 126 oRGANIZACIQ INFORMACII W GENERATORE KODA . . . . . . . . . . . . . . . . . . . . . . . . . . 129 uROWENX PROMEVUTOˆNOGO PREDSTAWLENIQ . . . . . . . . . . . . . 129
9 gENERACIQ KODA 9.1 mODELX MA[INY . . . . . . . . . . . . . . . . . 9.2 dINAMIˆESKAQ ORGANIZACIQ PAMQTI . . . . . . 9.2.1 oRGANIZACIQ MAGAZINA SO STATIˆESKOJ 9.2.2 oRGANIZACIQ MAGAZINA S DISPLEEM . . 9.3 nAZNAˆENIE ADRESOW . . . . . . . . . . . . . . . 9.4 tRANSLQCIQ PEREMENNYH . . . . . . . . . . . . 9.5 tRANSLQCIQ CELYH WYRAVENIJ . . . . . . . . . 9.6 tRANSLQCIQ ARIFMETIˆESKIH WYRAVENIJ . . 9.7 tRANSLQCIQ LOGIˆESKIH WYRAVENIJ . . . . . . 9.8 wYDELENIE OB]IH PODWYRAVENIJ . . . . . . .
. . . . . . . . . . . . CEPOˆKOJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
131 131 134 135 139 140 141 144 145 153 161
10 sISTEMY AWTOMATIZACII POSTROENIQ TRANSLQTOROW 165 10.1 sISTEMA super . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 10.2 sISTEMA Yacc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167