Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
2.5.TRANSLATORDLAPROSTYCHWYRAŻEŃ
77
expr
termrest
rest
+term{print(!+!)}rest
|
-term{print(!-!)}rest
|
ć
term
|
|
0{print(!0!)}
1{print(!1!)}
lll
9{print(!9!)}
RYSUNEK
2023:
Schemattranslacjipowyeliminowaniurekurencjilewostronnej
9
term
{print(ł9ł)}
expr
-
rest
term
{print(ł-ł)}
rest
5
{print(ł5ł)}
+
term
{print(ł+ł)}
rest
2
{print(ł2ł)}
6
RYSUNEK
2024:Tłumaczeniewyrażenia9-5+2na95-2+
Eliminowanierekurencjilewostronnejmusibyćwykonywaneostrożnie,aby
zagwarantować,żezachowamywłaściwąkolejnośćakcjisemantycznych.Na
przykładprzekształconyschematzrysunku2.23zawieraakcje{
print
(
!+!
)}oraz
{
print
(
!-!
)}wśrodkuprodukcjiwkażdymprzypadku,międzynieterminalnymi
symbolamitermirest.Gdybyakcjetezostałyprzeniesionenakoniec,porest,
wówczastłumaczenieokazałobysięnieprawidłowe.Pozostawiamyczytelnikowi
wykazanie,że
9-5+2
zostałobywówczasprzetłumaczonenieprawidłowona
952+-
notacjępostfiksowądla
9-(5+2)
,anienapożądane
95-2+
,czyliprawidłową
notacjępostfiksowądla(9-5)+2.
2.5.3.Procedurydlanieterminali
Funkcjeexpr,restoraztermnarysunku2.25implementująsterowanyskładniowo
schemattranslacjizrysunku2.23.Funkcjetenaśladująciałaprodukcjidla
odpowiadającychimnieterminali.Funkcjaexprimplementujeprodukcję
expr
termrestprzezwywołanieterm(),poczymnastępujewywołanierest().
Funkcjarestimplementujetrzyprodukcjedlanieterminalarestzrysun-
ku2.23.Stosujepierwsząprodukcję,jeślisymbolpodglądany(lookahead)jest
znakiemplus,drugąprodukcję,gdyjesttoznakminus,orazprodukcję
restć
wewszystkichpozostałychprzypadkach.Pierwszedwieprodukcjedlarest