Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
78
ROZDZIAŁ2.PROSTYTRANSLATORSTEROWANYSKŁADNIĄ
voidexpr(){
term();rest();
}
voidrest(){
if(lookahead==!+!){
match(!+!);term();print(!+!);rest();
}
elseif(lookahead==!-!){
match(!-!);term();print(!-!);rest();
}
else{}/nicnieróbzciągiemwejściowym/;
}
voidterm(){
if(lookaheadisadigit){
t=lookahead;match(lookahead);print(t);
}
elsereport("błądskładniowy"’);
}
RYSUNEK
2025:Pseudokoddlanieterminaliexpr,restiterm.
implementowanewdwóchpierwszychrozgałęzieniachwyrażeniaifwprocedurze
rest.Jeślisymbolpodglądanyto
+
,znakplusjestdopasowywanyprzezwywołanie
match
(
!+!
).Powywołaniuterm()wykonywanajestakcjasemantycznaprzez
wypisanieznakuplus.Drugaprodukcjajestanalogiczna,przyczymzastępujemy
znak
+
przezznak
-
(minus).Ponieważtrzeciaprodukcjadlarestzawiera
ć
jako
prawąstronę,ostatniaklauzulaelsefunkcjirestnierobinic.
Dziesięćprodukcjidlatermgenerujedziesięćcyfr.Ponieważkażdaztych
produkcjigenerujecyfręiwypisuje,tensamkodzrysunku2.25implementuje
jewszystkie.Jeślitestsiępowiedzie,zmienna
t
przechowujecyfręreprezentowaną
przezlookahead,dziękiczemumożezostaćwypisanapowywołaniumatch.
Zauważmy,żematchzmieniasymbolpodglądanywzmiennejlookahead,zatem
cyframusibyćzachowana,abymogłazostaćpóźniejwypisana5.
2.5.4.Upraszczanietranslatora
Zanimpokażemypełnyprogram,powinniśmywykonaćdwaupraszczająceprze-
kształceniakoduzrysunku2.25.Uproszczeniatewstawiąproceduręrestdo
proceduryexpr.Gdytłumaczonewyrażeniaowielupoziomachpierwszeń-
stwawykonywaniadziałań,tegotypuuproszczeniapozwalajązredukowaćliczbę
potrzebnychprocedur.
5
Jakopomniejsząoptymalizacjęmoglibyśmywykonaćprintprzedwywołaniemmatch,
abyuniknąćkoniecznościzachowaniacyfry.Jednakwogólnościzmienianiekolejnościdziałań
isymboligramatycznychjestryzykowne,gdyżmożezmienićto,comarobićtłumaczenie.