Johdanto
Kirjassa esitellään systemaattisesti kääntäjän yleiset rakentamisperiaatteet, suunnittelun perusmenetelmät ja tärkeimmät toteutustekniikat. Sisältö sisältää: kieliopin ja kielen perustiedot, leksikaalisten analyysiohjelmien suunnitteluperiaatteet ja rakennusmenetelmät, erilaiset kielioppianalyysitekniikat, kielioppiohjattu käännöstekniikka ja välikoodin generointi, symbolitaulukon organisointi ja hallinta, koodin optimointi, ajonaikaisen tallennustilan organisointi Perustiedot hallinnan tuntemus, objektikoodin generointi, rinnakkaiskäännöstekniikka jne.
Kirjaluettelo
Luku 1 Kokoelman yleiskatsaus
1.1 Kääntäjä ja kääntäjä
1.2 Kääntäjäprosessi ja kääntäjän perusrakenne
1.3 Kääntäjän generointimenetelmä
1.4 Käännöstekniikan soveltaminen ohjelmistokehitykseen
Tämän luvun yhteenveto
Laajennettu lukeminen
Itsetestausharjoitus 1
Harjoitus 1
Luku 2 Kieliopin ja kielen perustiedot
2.1 Yleiskatsaus
2.2 Aakkosten ja merkkijonojen peruskäsitteet
2.2.1 Aakkoset ja symbolijono
2.2.2 Symbolijonon toiminta
2.3 Kielioppi ja kieli Muodollinen määritelmä
2.3.1 Muodollinen kieli
2.3.2 Kieliopin muodollinen määritelmä
2.3.3 Kielen muodollinen määritelmä
2.3 .4 Normatiivinen johtaminen ja normatiivinen pelkistys
2.3.5 Rekursiiviset säännöt ja kieliopin rekursiivisuus
2.4 Lauseet, suorat lauseet ja kahva
2.4.1 Lauseet Ja suorat lauseet
2.4.2 Kahva
2.5 Epäselvyys syntaksipuun ja kieliopin välillä
2.5.1 Johdannainen ja syntaksipuu
2.5.2 Kieliopin epäselvyys
2.5.3 Kieliopin epäselvyyden poistaminen
2.6 Kieliopin ja kielen luokittelu
2.7 Kieliopin käytännöllisyys Rajoitukset ja muunnokset
Tämän luvun yhteenveto
Laajennettu lukeminen
Itsetestausharjoitus 2
Harjoitus 2
Luku 3 Leksinen analyysi ja äärelliset automaatit
3.1 Leksisen analyysiohjelman toiminta
3.2 Sanasymbolit ja sanamuodot
3.2.1 Sanat kielisymboleissa
3.2.2 Leksikaalisen analyysiohjelman tulossanojen muoto
3.3 Kaksi kielen sanasymbolien määritelmää
3.3.1 Normal form and normal set< /p>
3.3.2 Normaali kielioppi ja normaalimuoto
3.4 Normaalimuoto ja äärelliset automaatit
3.4.1 Määritetyt äärelliset automaatit (DFA)
3.4.2 Ei-deterministiset äärelliset automaatit (NFA)
3.4.3 NFA:n muodostaminen säännöllisestä lausekkeesta R
3.4.4 Method of determinizing NFA into DFA< /p>
3.4.5 DFA:n yksinkertaistaminen
3.4.6 Muunnos äärellisistä automaateista normaalimuotoon
3.5 Normaali kielioppi ja äärelliset automaatit
3.5.1 Muunnosmenetelmä oikeasta lineaarisesta normaalikieliopista äärellisiksi automaateiksi
3.5.2 Muunnosmenetelmä vasemmasta lineaarisesta normaalikieliopista äärellisiksi automaateiksi
3.5 .3 Muunnosmenetelmä äärellisestä automaatista säännölliseen kielioppiin
3.6 Menetelmä leksikaalisen analyysiohjelman kirjoittamiseen
Tämän luvun yhteenveto
Laajennettu lukeminen
Itsetestausharjoitus 3
Harjoitus 3
Luku 4 Syntaksianalyysi
4.1 Syntaksianalyysiohjelman toiminta
4.2 Ylhäältä ja alas -analyysimenetelmä
4.2.1 The idea of non-deterministic top-down analysis method
4.2.2 Kieliopin vasemmanpuoleinen rekursio ja peruuttamisen eliminointi
4.2.3 Muutaman ei-LL(1)-kieliopin kirjoittaminen LL(1)-kieliopiksi
4.2.4 Rekursiivinen laskeutumisanalyysimenetelmä
4.2.5 Ennustava analyysimenetelmä ja ennakoiva analyysi Taulukon rakenne
4.3 Alhaalta ylös -analyysin yleiset periaatteet
4.4 Operaattorin prioriteettianalyysi
4.4.1 Menetelmän yleiskatsaus
< p>4.4.2 Definition of operator precedence grammar4.4.3 Operaattorin ensisijaisuusrelaatiotaulukon rakentaminen
4.4.4 Operaattorin ensisijaisuusanalyysialgoritmin suunnittelu
< p>4.4.5 Construction of precedence function4.4.6 Operaattorin ensisijaisuusanalyysin rajoitukset
4.5LR-analyysimenetelmä
4.5.1LR-analysaattori Toimintaperiaate ja prosessi
4.5.2LR(0)-analyysimenetelmä
4.5.3SLR(1)-analyysimenetelmä
4.5.4LR(1)-analyysimenetelmä
4.5.5LALR(1) jäsennysmenetelmä
4.5.6 LR-jäsennysmenetelmän soveltaminen moniselitteiseen kielioppiin
4.5.7 Virheen palautus LR-jäsennystekniikassa
4.6 Syntaksianalyysiohjelman kirjoitusmenetelmä
Tämän luvun yhteenveto
Laajennettu lukeminen
Itsetestausharjoitus 4
< p>Exercise 4Luku 5 Kielioppiohjattu käännöstekniikka ja keskitason koodin luominen
5.1 Yleiskatsaus
5.2 Attribuuttien kielioppi
5.3 Kielioppi Ohjattu käännöskatsaus
5.4 Keskitason kieli
5.4.1 Käänteinen puolalainen tyyli
5.4.2 Kolmiosainen ja puuesitys
5.4.3 Kvaternaariset ja kolmiosoitekoodit
5.5 Alhaalta ylös syntaksiohjattu käännös
5.5.1 Yksinkertaisten aritmeettisten lausekkeiden ja osoituslausekkeiden kääntäminen
5.5.2 Boolen lausekkeiden kääntäminen
5.5.3 Valvontalausuntojen kääntäminen
5.5.4 Silmukkalausekkeiden kääntäminen
5.5.5 Lyhyt kuvauslausekkeet Käännös
5.5.6 Taulukkoelementtejä sisältävien osoituskäskyjen kääntäminen
5.5.7 Proseduuri- ja funktiokutsukäskyjen kääntäminen
5.6 Rekursiivisen laskeutumisen syntaksiohjattu käännös
Tämän luvun yhteenveto
Laajennettu lukeminen
Itsetestausharjoitus 5
Harjoitus 5
Luku 6 Symbolitaulukon järjestäminen ja hallinta
6.1 Symbolitaulukon rooli
6.2 Symbolitaulukon organisaatio
6.3 Symbolitaulukon muodostaminen ja haku
Tämän luvun yhteenveto
Laajennettu lukeminen
Itsetestausharjoitus 6
Harjoitus 6
Luku 7 Koodin optimointi
< p>7.1 Overview of optimization7.2 Osittainen optimointi
7.2.1 Peruslohkojen jakomenetelmä
7.2.2 Peruslohkojen DAG-esitys
< p>7.2.3 Use DAG to optimize basic blocks7.3 Silmukan optimointi
7.3.1 Ohjelman vuokaavio ja silmukka
7.3.2 Silmukkahaku
7.3.3 Silmukan optimointi
7.4 Näköaukon optimointi
Tämän luvun yhteenveto
Laajennettu lukeminen
Itsetestausharjoitus 7
Harjoitus 7
Luku 8 Tallennuksen organisointi ja hallinta ajon aikana
8.1 Yleiskatsaus
8.2 Static Storage Allocation< /p>
8.3 Pinottu tallennustilan varaus
8.3.1 Yksinkertainen pinottu tallennustilan varaus
8.3.2 Pinottu tallennustilan varaus sisäkkäiselle prosessille
8.4 Kasan varastointi
8.5 Tilapäisten muuttujien tallennusvaraus
Tämän luvun yhteenveto
Laajennettu lukeminen
Self-test exercise 8< /p>
Harjoitukset 8
Luku 9 Objektikoodin luominen
9.1 Yleiskatsaus
9.2 Hypoteettinen tietokonemalli
9.3 Yksinkertainen koodigeneraattori
9.3.1 Valmiustilan tiedot ja aktiiviset tiedot
9.3.2 Koodin luontialgoritmi
9.3.3 Rekisterin allokointi
9.4-koodigeneraattorin automaattinen generointitekniikka
Tämän luvun yhteenveto
Laajennettu lukeminen
Itsetestausharjoitus 9
Harjoitus 9
Luku 10 Perustiedot rinnakkaiskääntämistekniikasta
10.1 Rinnakkaiskääntämistekniikan käyttöönotto
10.2 Rinnakkaisen käännösjärjestelmän toiminta ja rakenne
10.2.1 Rinnakkaiskäännösjärjestelmän toiminta
10.2.2 Rinnakkaiskäännösjärjestelmän rakenne
10.3 Vektorikielen käännöstekniikka
10.3.1 Vektorisyntaksin käsittely
p>10.3.2 Vektorirakenteen optimointi
10.4 Jaetun muistin rinnakkaiskoneen rinnakkaiskäännöstekniikka
10.4.1 esikokoelma
10.4.2 can be re Imported target code p>
Tämän luvun yhteenveto
Harjoitus 10
Liite A Lex-leksikaalinen analysaattorigeneraattori
A.1 Lex-leksikaalisen analysaattorin generaattorin esittely
p>A.2Lex-syöttötiedostomuoto
A.3 Lex-sopimukset säännöllisille lausekkeille
A.4Lex-lähdeohjelman säännöt
A.5Flex-komentovaihtoehdot
A.6Lex-ohjelmaesimerkki
Liite B syntaksianalyysiohjelman generaattori YACC
B.1 Johdanto to the syntax analysis program YACC< /p>
B.2 YACC-tulotiedostomuoto
B.3 YACC kirjoitusmuoto
B.3.1 määritelmäosa
B.3.2 Säännöt-osio
B.3.3 Apuohjelmaosio
B.4YACC:n sisäänrakennettu nimi- ja määritelmämekanismi
B.5Flexin ja Bisonin yhdistetty käyttö
Liite C Kääntäjäkokeet
C.1 Leksinen analyysi
C.1.1 Kokeen tavoitteet
C.1.2 Kokeiluvaatimukset
C.1.3 Leksikaalisen analyysiohjelman algoritmiset ajatukset
C.1.4 Leksikaalisen analyysiohjelman C-kieliohjelmakehys
C.2 Syntaksianalyysi
C.2.1 Kokeen tarkoitus
C.2.2 Kokeiluvaatimukset
C.2.3 The algorithm idea of the syntax analysis program
C.2.4 Syntaksianalyysiohjelman C-kielen ohjelmakehys
p>C.3 Semanttinen analyysi
C.3.1 Kokeellinen tarkoitus
C.3.2 Kokeiluvaatimukset
C.3.3 Semanttisen analyysiohjelman Program Frameworkin C-kieli
C.4 Operaattorin prioriteettianalyysimenetelmä
C.5 Kokeellinen esimerkki
C.6 Muodollisen muodon muuntaminen automaattien graafiseksi esitykseksi
p>C.6.1 Kokeellinen tarkoitus
C.6.2 Kokeiluvaatimukset
C.6.3 Suunnitteluideoita
C.6.4 Viitealgoritmi
Liite D itsetestitehtävät ja harjoitusten referenssivastaukset
Viitteet