wykład 10

46
Wykład 10 Wykład 10 Translacja sterowana Translacja sterowana składnią składnią

Upload: urania

Post on 22-Jan-2016

42 views

Category:

Documents


0 download

DESCRIPTION

Wykład 10. Translacja sterowana składnią. Translacja sterowana składnią. Z konstrukcjami języków programowania wiąże się pewną informację przez dołączenie atrybutów do symboli gramatyki reprezentujących te konstrukcje. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Wykład 10

Wykład 10Wykład 10

Translacja sterowana składniąTranslacja sterowana składnią

Page 2: Wykład 10

Translacja sterowana składniąTranslacja sterowana składnią

Z konstrukcjami języków programowania wiąże Z konstrukcjami języków programowania wiąże się pewną informację przez dołączenie atrybutów się pewną informację przez dołączenie atrybutów do symboli gramatyki reprezentujących te do symboli gramatyki reprezentujących te konstrukcje. konstrukcje. Wartości tych atrybutów są obliczane za pomocą Wartości tych atrybutów są obliczane za pomocą reguł semantycznych związanych z regułami reguł semantycznych związanych z regułami gramatyki.gramatyki.Istnieją dwie notacje służące do łączenia reguł Istnieją dwie notacje służące do łączenia reguł semantycznych z produkcjami:semantycznych z produkcjami:

- definicje sterowane składnią; definicje sterowane składnią; - schematy translacji;schematy translacji;

Page 3: Wykład 10

Translacja sterowana składniąTranslacja sterowana składnią

Definicje sterowane składnią są wysokopozio-Definicje sterowane składnią są wysokopozio-mową specyfikacją translacji. Ukrywają one mową specyfikacją translacji. Ukrywają one wiele detali implementacyjnych i zwalniają wiele detali implementacyjnych i zwalniają użytkownika z bezpośredniego określania użytkownika z bezpośredniego określania kolejności w jakiej jest wykonywana translacja;kolejności w jakiej jest wykonywana translacja;

Schematy translacji wskazują kolejność Schematy translacji wskazują kolejność obliczania reguł semantycznych i w związku z obliczania reguł semantycznych i w związku z tym niektóre detale implementacyjne są w nich tym niektóre detale implementacyjne są w nich widoczne.widoczne.

Page 4: Wykład 10

Translacja sterowana składniąTranslacja sterowana składnią

Aby użyć definicji sterowanych składnią lub schematów translacji Aby użyć definicji sterowanych składnią lub schematów translacji należy zanalizować strumień symboli leksykalnych, tworząc drzewo należy zanalizować strumień symboli leksykalnych, tworząc drzewo wyprowadzenia i następnie przejść to drzewo, tak , aby policzyć wyprowadzenia i następnie przejść to drzewo, tak , aby policzyć reguły semantyczne w jego węzłach;reguły semantyczne w jego węzłach;

Obliczanie tych reguł może polegać na generacji kodu, zapisie Obliczanie tych reguł może polegać na generacji kodu, zapisie informacji w tablicy symboli, wyświetlaniu komunikatów o błędach informacji w tablicy symboli, wyświetlaniu komunikatów o błędach lub innym działaniu. Translację strumienia symboli leksykalnych lub innym działaniu. Translację strumienia symboli leksykalnych otrzymuje się obliczając reguły semantyczne.otrzymuje się obliczając reguły semantyczne.

Napiswejściowy

Drzewowyprowadzenia

Grafzależności

Kolejność obliczeńakcji semantycznych

Page 5: Wykład 10

Translacja sterowana składniąTranslacja sterowana składnią

Implementacja nie musi dosłownie odpowiadać Implementacja nie musi dosłownie odpowiadać powyższemu schematowi. powyższemu schematowi.

Pewne szczególne przypadki definicji sterowanych składnią Pewne szczególne przypadki definicji sterowanych składnią mogą być zaimplementowane jako pojedynczy przebieg mogą być zaimplementowane jako pojedynczy przebieg wykonujący wszystkie obliczenia w trakcie analizy wykonujący wszystkie obliczenia w trakcie analizy składniowej, bez konstruowania wprost drzewa składniowej, bez konstruowania wprost drzewa wyprowadzenia lub grafu zawierającego zależności wyprowadzenia lub grafu zawierającego zależności między atrybutami.między atrybutami.

Implementacja z pojedynczym przebiegiem jest ważna ze Implementacja z pojedynczym przebiegiem jest ważna ze względu na wydajność – krótki czas kompilacji.względu na wydajność – krótki czas kompilacji.

Napiswejściowy

Drzewowyprowadzenia

Grafzależności

Kolejność obliczeńakcji semantycznych

Page 6: Wykład 10

Definicja sterowana składniąDefinicja sterowana składnią

Definicja sterowana składnią jest uogólnieniem Definicja sterowana składnią jest uogólnieniem gramatyki bezkontekstowej, w której z każdym gramatyki bezkontekstowej, w której z każdym symbolem gramatyki jest związany pewien zbiór symbolem gramatyki jest związany pewien zbiór atrybutów.atrybutów.

Zbiór ten jest podzielony na dwa podzbiory:Zbiór ten jest podzielony na dwa podzbiory:- Atrybuty syntezowaneAtrybuty syntezowane- Atrybuty dziedziczone.Atrybuty dziedziczone.

Jeśli węzeł w drzewie wyprowadzenia dla symbolu Jeśli węzeł w drzewie wyprowadzenia dla symbolu gramatyki traktujemy jako rekord zawierający pola gramatyki traktujemy jako rekord zawierający pola przechowujące informacje, to atrybut odpowiada nazwie przechowujące informacje, to atrybut odpowiada nazwie pola rekordu.pola rekordu.

Page 7: Wykład 10

AtrybutyAtrybuty

Atrybut może reprezentować dowolne wielkości: napis, Atrybut może reprezentować dowolne wielkości: napis, liczbę, typ, adres pamięci itp.. liczbę, typ, adres pamięci itp..

Wartość atrybutu w węźle drzewa wyprowadzenia jest Wartość atrybutu w węźle drzewa wyprowadzenia jest zdefiniowana przez regule semantyczną związaną z zdefiniowana przez regule semantyczną związaną z produkcja użyta dla tego węzła;produkcja użyta dla tego węzła;

Wartość atrybutu syntezowanego jest obliczana z Wartość atrybutu syntezowanego jest obliczana z wartości atrybutów w dzieciach tego węzła z drzewa wartości atrybutów w dzieciach tego węzła z drzewa wyprowadzenia;wyprowadzenia;

Wartość atrybutu dziedziczonego na podstawie Wartość atrybutu dziedziczonego na podstawie atrybutów w sąsiadach i rodzicu węzła.atrybutów w sąsiadach i rodzicu węzła.

Page 8: Wykład 10

Reguły semantyczneReguły semantyczneReguły semantyczne ustanawiają miedzy atrybutami zależności, które mogą Reguły semantyczne ustanawiają miedzy atrybutami zależności, które mogą być reprezentowane za pomocą grafu. Z takiego grafu zależności być reprezentowane za pomocą grafu. Z takiego grafu zależności wyprowadza się kolejność obliczeń reguł semantycznych;wyprowadza się kolejność obliczeń reguł semantycznych;

Wartości atrybutów w węzłach drzewa wyprowadzenia dla danego napisu Wartości atrybutów w węzłach drzewa wyprowadzenia dla danego napisu wejściowego definiowane są w trakcie obliczania reguł semantycznych;wejściowego definiowane są w trakcie obliczania reguł semantycznych;

Reguła semantyczna może mieć także efekty uboczne, np. wypisanie Reguła semantyczna może mieć także efekty uboczne, np. wypisanie wartości lub zmiana wartości zmiennej globalnej. wartości lub zmiana wartości zmiennej globalnej.

Implemenatcja nie musi konstruować wprost drzewa wyprowadzenia lub Implemenatcja nie musi konstruować wprost drzewa wyprowadzenia lub grafu zależnościgrafu zależności

Drzewo wyprowadzenia z widocznymi wartościami atrybutów w każdym Drzewo wyprowadzenia z widocznymi wartościami atrybutów w każdym węźle nazywamy węźle nazywamy drzewem wyprowadzenia z przypisamidrzewem wyprowadzenia z przypisami, natomiast proces , natomiast proces obliczania wartości atrybutów w węzłach – obliczania wartości atrybutów w węzłach – opisywaniemopisywaniem lub lub dekoracjądekoracją drzewa wyprowadzenia.drzewa wyprowadzenia.

Page 9: Wykład 10

Postać definicji sterowanej składniąPostać definicji sterowanej składnią

W definicji sterowana składnią z każdą produkcją W definicji sterowana składnią z każdą produkcją gramatyki A->gramatyki A->αα jest związany zbiór reguł semantycznych jest związany zbiór reguł semantycznych o postaci o postaci

b:=f(cb:=f(c11,c,c22,…,c,…,ckk),),gdzie gdzie ff jest funkcją oraz: jest funkcją oraz:1. 1. bb jest atrybutem syntezowanym symbolu jest atrybutem syntezowanym symbolu AA, a , a cc11,c,c22,…,c,…,ckk

są atrybutami do symboli z produkcji, albosą atrybutami do symboli z produkcji, albo2. 2. bb jest atrybutem dziedziczonym jednego z symboli jest atrybutem dziedziczonym jednego z symboli

gramatyki z prawej strony, a gramatyki z prawej strony, a cc11,c,c22,…,c,…,ckk są atrybutami są atrybutami symboli z produkcji.symboli z produkcji.

W obu przypadkach mówimy, że atrybut W obu przypadkach mówimy, że atrybut bb zależy od zależy od atrybutów atrybutów cc11,c,c22,…,c,…,ckk..

Page 10: Wykład 10

Postać definicji sterowanej składniąPostać definicji sterowanej składnią

Gramatyka atrybutowana jest definicją sterowaną Gramatyka atrybutowana jest definicją sterowaną składnią, w której funkcje z reguł semantycznych nie mają składnią, w której funkcje z reguł semantycznych nie mają efektów ubocznych.efektów ubocznych.

Funkcje z reguł semantycznych często zapoisujemy jako Funkcje z reguł semantycznych często zapoisujemy jako wyrażenia. wyrażenia.

Czasami jedynym celem reguł semantycznych w definicji Czasami jedynym celem reguł semantycznych w definicji sterowanej składnią jest tworzenie efektów ubocznych. sterowanej składnią jest tworzenie efektów ubocznych. Reguły semantyczne tego typu są zapisywane jako Reguły semantyczne tego typu są zapisywane jako wywołania procedur lub fragmenty programu. Można je wywołania procedur lub fragmenty programu. Można je traktować jak reguły definiujące wartości sztucznych traktować jak reguły definiujące wartości sztucznych atrybutów syntezowanych dla nieterminala z lewej strony atrybutów syntezowanych dla nieterminala z lewej strony produkcji (sztuczny atrybut i znak przypisania := w regule produkcji (sztuczny atrybut i znak przypisania := w regule semantycznej nie jest pokazywany).semantycznej nie jest pokazywany).

Page 11: Wykład 10

Definicji sterowanej składnią – Definicji sterowanej składnią – przykład kalkulatora stołowegoprzykład kalkulatora stołowego

Produkcja Reguły semantyczne

L -> W n print(W.wart)

W-> W1 + S W.wart := W1.wart + S.wart

W-> S W.wart := S.wart

S-> S1 * C S.wart := S1.wart * C.wart

S-> C S.wart := C.wart

C -> W C.wart := W.wart

C -> cyfra C.wart := cyfra.lekswart

Page 12: Wykład 10

Definicji sterowanej składnią – Definicji sterowanej składnią – przykład kalkulatora stołowegoprzykład kalkulatora stołowego

Ta definicja związuje wartość całkowitą atrybutu syntezowanego, nazwanego Ta definicja związuje wartość całkowitą atrybutu syntezowanego, nazwanego wartwart, z każdym z nieterminali , z każdym z nieterminali W, SW, S i i CC..Dla każdej produkcji dla Dla każdej produkcji dla W, SW, S i i CC reguła semantyczna oblicza wartość reguła semantyczna oblicza wartość wartwart dla nieterminala z lewej strony produkcji z wartości dla nieterminala z lewej strony produkcji z wartości wartwart dla nieterminali z dla nieterminali z prawej strony.prawej strony.Symbol leksykalny Symbol leksykalny cyfracyfra ma atrybut syntezowany ma atrybut syntezowany lekswartlekswart, którego wartość , którego wartość dostarcza analizator leksykalny;dostarcza analizator leksykalny;Reguła związana z produkcją Reguła związana z produkcją L->WnL->Wn dla nieterminala startowego dla nieterminala startowego LL jest po jest po prostu procedurą wypisującą wartość wyrażenia arytmetycznego prostu procedurą wypisującą wartość wyrażenia arytmetycznego wygenerowanego przez wygenerowanego przez WW (można ja traktować jako definicję sztucznego (można ja traktować jako definicję sztucznego atrybutu dla nieterminala atrybutu dla nieterminala LL).).

Produkcja Reguły semantyczne

L -> W n print(W.wart)

W-> W1 + S W.wart := W1.wart + S.wart

W-> S W.wart := S.wart

S-> S1 * C S.wart := S1.wart * C.wart

S-> C S.wart := C.wart

C -> W C.wart := W.wart

C -> cyfra C.wart := cyfra.lekswart

Page 13: Wykład 10

Przykład kalkulatora stołowego Przykład kalkulatora stołowego implementacja w YACCimplementacja w YACC

%{%{#include<ctype.h>#include<ctype.h>%}%}

%token CYFRA%token CYFRA

%%%%wiersz : wyr ’\n’ {print(„%d\n”, $1);}wiersz : wyr ’\n’ {print(„%d\n”, $1);} ;;wyr : wyr ’+’ term {$$ = $1 + $3;}wyr : wyr ’+’ term {$$ = $1 + $3;} | term| term ;;term : term ’*’ czynnik {$$ = $1 * $3;}term : term ’*’ czynnik {$$ = $1 * $3;} | czynnik| czynnik ;;czynnik : ’(’ wyr ’)’ {$$ = $2;}czynnik : ’(’ wyr ’)’ {$$ = $2;} | CYFRA| CYFRA ;;%%%%yylex(){yylex(){

int c;int c;c=getchar();c=getchar();if (isdigit(c){ yyval=c-’0’; return CYFRA;}if (isdigit(c){ yyval=c-’0’; return CYFRA;}return c;return c;

}}

Page 14: Wykład 10

Definicja sterowana składniąDefinicja sterowana składnią

W definicji sterowanej składnią zakłada się, że W definicji sterowanej składnią zakłada się, że terminale maja tylko atrybuty syntezowane, terminale maja tylko atrybuty syntezowane, ponieważ definicja ta nie zawiera żadnych reguł ponieważ definicja ta nie zawiera żadnych reguł semantycznych dla terminali.semantycznych dla terminali.

Wartości atrybutów terminali są zwykle Wartości atrybutów terminali są zwykle dostarczone przez analizator leksykalny.dostarczone przez analizator leksykalny.

Jeśli nie zostanie stwierdzone inaczej, zakłada Jeśli nie zostanie stwierdzone inaczej, zakłada się, że symbol startowy nie ma atrybutów się, że symbol startowy nie ma atrybutów dziedziczonych.dziedziczonych.

Page 15: Wykład 10

Atrybuty syntezowaneAtrybuty syntezowane

Atrybuty syntezowane są powszechnie używane Atrybuty syntezowane są powszechnie używane w praktyce;w praktyce;

Definicja sterowana składnią używająca jedynie Definicja sterowana składnią używająca jedynie atrybutów syntezowanych jest nazwana atrybutów syntezowanych jest nazwana definicją definicją S-atrybutowanąS-atrybutowaną..

Drzewo składniowe dla definicji S-atrybutowanej Drzewo składniowe dla definicji S-atrybutowanej może zostać oznaczone przypisami przez może zostać oznaczone przypisami przez obliczanie reguł semantycznych dla atrybutów w obliczanie reguł semantycznych dla atrybutów w każdym węźle przechodząc od liści do korzeniakażdym węźle przechodząc od liści do korzenia

Page 16: Wykład 10

AS przykład - drzewo AS przykład - drzewo wyprowadzenia z przypisamiwyprowadzenia z przypisami

L

n

W.wart=15 + S.wart=4

S.wart=15 C.wart=4

cyfra.lekswart=4S.wart=3 * C.wart=5

C.wart=3

cyfra.lekswart=3

cyfra.lekswart=5

W.wart=19

Drzewo wyprowadzenia z przypisami dla 3*5+4n

Page 17: Wykład 10

AS przykład - drzewo AS przykład - drzewo wyprowadzenia z przypisamiwyprowadzenia z przypisami

Interpretacja:Interpretacja:Na diagramie zaprezentowaliśmy drzewo wyprowadzenia dla wejścia 3*5+4 Na diagramie zaprezentowaliśmy drzewo wyprowadzenia dla wejścia 3*5+4 (3*5+4n, gdzie n –znak końca wiersza);(3*5+4n, gdzie n –znak końca wiersza);

Wynik wypisany w korzeniu drzewa jest wartością Wynik wypisany w korzeniu drzewa jest wartością W.wartW.wart z pierwszego z pierwszego dziecka korzenia;dziecka korzenia;

W celu obliczenia wartości atrybutów rozważamy węzeł najbardziej lewy z W celu obliczenia wartości atrybutów rozważamy węzeł najbardziej lewy z dołu, odpowiadający użyciu produkcji dołu, odpowiadający użyciu produkcji C->C->cyfracyfra. Odpowiadająca jej reguła . Odpowiadająca jej reguła semantyczna semantyczna C.wart:=cyfra.lekswartC.wart:=cyfra.lekswart ustawia na 3 wartość atrybutu ustawia na 3 wartość atrybutu C.wartC.wart w w tym węźle, ponieważ wartością tym węźle, ponieważ wartością cyfracyfra.lekswart .lekswart w dziecku tego węzła jest 3.w dziecku tego węzła jest 3.

Podobnie w rodzicu tego węzła atrybut Podobnie w rodzicu tego węzła atrybut S.wartS.wart ma wartość 3. ma wartość 3.

Rozważmy węzeł dla produkcji Rozważmy węzeł dla produkcji S->S*CS->S*C. Wartośc atrybutu S.wart w tym . Wartośc atrybutu S.wart w tym węźle jest zdefiniowana przez produkcję węźle jest zdefiniowana przez produkcję S->SS->S11*C*C i regułę semantyczną i regułę semantyczną S.wart:=SS.wart:=S11.wart*C.wart.wart*C.wart

Reguła związana z produkcją dla nieterminala startowego Reguła związana z produkcją dla nieterminala startowego L->WL->W n drukuje n drukuje wartość wyrażenia wygenerowanego przez wartość wyrażenia wygenerowanego przez WW..

Page 18: Wykład 10

Atrybuty dziedziczoneAtrybuty dziedziczone

Wartość atrybutu dziedziczonego w węźle drzewa Wartość atrybutu dziedziczonego w węźle drzewa wyprowadzenia jest zdefiniowana na podstawie atrybutów wyprowadzenia jest zdefiniowana na podstawie atrybutów z rodzica oraz z sąsiadów tego węzła;z rodzica oraz z sąsiadów tego węzła;

Atrybuty dziedziczone przydają się do wyrażenia Atrybuty dziedziczone przydają się do wyrażenia zależności konstrukcji programistycznych od kontekstu, w zależności konstrukcji programistycznych od kontekstu, w jakim się pojawiają;jakim się pojawiają;

Chociaż definicję sterowaną składnią zawsze można Chociaż definicję sterowaną składnią zawsze można przepisać, tak aby używała tylko atrybutów przepisać, tak aby używała tylko atrybutów syntezowanych, często bardziej naturalne jest użycie w syntezowanych, często bardziej naturalne jest użycie w niej atrybutów dziedziczonych.niej atrybutów dziedziczonych.

Zobaczmy na przykładzie jak atrybut dziedziczony Zobaczmy na przykładzie jak atrybut dziedziczony rozprowadza informacje o typach do poszczególnych rozprowadza informacje o typach do poszczególnych identyfikatorów w deklaracji.identyfikatorów w deklaracji.

Page 19: Wykład 10

AD - przykładAD - przykład

Produkcja Reguły semantyczne

D -> T L L.dz := T.typ

T -> int T.typ := integer

T -> real T.typ := real

L-> L1 , id L1.dz = L.dz

dodajtyp(id.wpis, L.dz)

L -> id dodajtyp(id.wpis, L.dz)

Page 20: Wykład 10

AD przykładAD przykład

Deklaracja generowana przez nieterminal Deklaracja generowana przez nieterminal DD w definicji sterowanej składnią w definicji sterowanej składnią zawiera słowa kluczowe zawiera słowa kluczowe intint lub lub realreal oaz występujące po nich listy oaz występujące po nich listy identyfikatorów; identyfikatorów; Nieterminal T ma atrybut syntezowany typ, którego wartość jest wyznaczana Nieterminal T ma atrybut syntezowany typ, którego wartość jest wyznaczana na podstawie słowa kluczowego w deklaracji;na podstawie słowa kluczowego w deklaracji;Reguła semantyczna Reguła semantyczna L.dz := T.typL.dz := T.typ związana z produkcją związana z produkcją D->TLD->TL ustawia ustawia atrybut dziedziczony atrybut dziedziczony L.dzL.dz na typ deklaracji. Następne reguły – przy użyciu na typ deklaracji. Następne reguły – przy użyciu L.dzL.dz – przeprowadzają tę wartość w dół drzewa wyprowadzenia; – przeprowadzają tę wartość w dół drzewa wyprowadzenia;Reguły związane z produkcjami dla Reguły związane z produkcjami dla LL wywołują procedurę wywołują procedurę dodajtypdodajtyp do do dodania typu dla każdego identyfikatora do jego wpisu w tablicy symboli dodania typu dla każdego identyfikatora do jego wpisu w tablicy symboli (wskazanego przez atrybut wpis).(wskazanego przez atrybut wpis).

Produkcja Reguły semantyczne

D -> T L L.dz := T.typ

T -> int T.typ := integer

T -> real T.typ := real

L-> L1 , id L1.dz = L.dz

dodajtyp(id.wpis, L.dz)

L -> id dodajtyp(id.wpis, L.dz)

Page 21: Wykład 10

Drzewo wyprowadzenia z atrybutem Drzewo wyprowadzenia z atrybutem dziedziczonym w każdym węźle dziedziczonym w każdym węźle .

T.typ=real L.dz=real

realL.dz=real id3

L.dz=real id2

id1

D

Drzewo wyprowadzenia z atrybutem dziedziczonym dz w każdym węźle dla L

,

,

Page 22: Wykład 10

Interpretacja:Interpretacja:Na diagramie zaprezentowaliśmy drzewo wyprowa-Na diagramie zaprezentowaliśmy drzewo wyprowa-dzenia z przypisami dla zdania dzenia z przypisami dla zdania real idreal id11 , id , id22 , id , id33. .

Wartość Wartość L.dzL.dz w trzech węzłach w trzech węzłach LL stanowi typ dla trzech stanowi typ dla trzech identyfikatorów identyfikatorów idid11 , id , id22 , id , id33;;

Wartości te sa wyznaczone po obliczeniu wartości Wartości te sa wyznaczone po obliczeniu wartości atrybutu atrybutu T.typT.typ w lewym dziecku korzenia i następnie w lewym dziecku korzenia i następnie przechodzą w dół drzewa – wartość przechodzą w dół drzewa – wartość L.dzL.dz w trzech w trzech węzłach dla węzłach dla LL w prawym poddrzewie korzenia. w prawym poddrzewie korzenia.

W każdym poddrzewie dla W każdym poddrzewie dla LL zostanie wywołana również zostanie wywołana również procedura procedura dodajtypdodajtyp ustawiająca w tablicy symboli typ ustawiająca w tablicy symboli typ realreal dla identyfikatora z prawego dziecka tego węzła. dla identyfikatora z prawego dziecka tego węzła.

Drzewo wyprowadzenia z atrybutem Drzewo wyprowadzenia z atrybutem dziedziczonym w każdym węźledziedziczonym w każdym węźle

Page 23: Wykład 10

AS przykład - drzewo AS przykład - drzewo wyprowadzenia z przypisamiwyprowadzenia z przypisami

Interpretacja:Interpretacja:Na diagramie zaprezentowaliśmy drzewo wyprowadzenia dla wejścia 3*5+4 Na diagramie zaprezentowaliśmy drzewo wyprowadzenia dla wejścia 3*5+4 (3*5+4n, gdzie n –znak końca wiersza);(3*5+4n, gdzie n –znak końca wiersza);

Wynik wypisany w korzeniu drzewa jest wartością Wynik wypisany w korzeniu drzewa jest wartością W.wartW.wart z pierwszego z pierwszego dziecka korzenia;dziecka korzenia;

W celu obliczenia wartości atrybutów rozważamy węzeł najbardziej lewy z W celu obliczenia wartości atrybutów rozważamy węzeł najbardziej lewy z dołu, odpowiadający użyciu produkcji dołu, odpowiadający użyciu produkcji C->C->cyfracyfra. Odpowiadająca jej reguła . Odpowiadająca jej reguła semantyczna semantyczna C.wart:=cyfra.lekswartC.wart:=cyfra.lekswart ustawia na 3 wartość atrybutu ustawia na 3 wartość atrybutu C.wartC.wart w w tym węźle, ponieważ wartością tym węźle, ponieważ wartością cyfracyfra.lekswart .lekswart w dziecku tego węzła jest 3.w dziecku tego węzła jest 3.

Podobnie w rodzicu tego węzła atrybut Podobnie w rodzicu tego węzła atrybut S.wartS.wart ma wartość 3. ma wartość 3.

Rozważmy węzeł dla produkcji Rozważmy węzeł dla produkcji S->S*CS->S*C. Wartośc atrybutu S.wart w tym . Wartośc atrybutu S.wart w tym węźle jest zdefiniowana przez produkcję węźle jest zdefiniowana przez produkcję S->SS->S11*C*C i regułę semantyczną i regułę semantyczną S.wart:=SS.wart:=S11.wart*C.wart.wart*C.wart

Reguła związana z produkcją dla nieterminala startowego Reguła związana z produkcją dla nieterminala startowego L->WL->W n drukuje n drukuje wartość wyrażenia wygenerowanego przez wartość wyrażenia wygenerowanego przez WW..

Page 24: Wykład 10

Grafy zależnościGrafy zależnościJeżeli atrybut Jeżeli atrybut bb w węźle drzewa wyprowadzenia zależy w węźle drzewa wyprowadzenia zależy od atrybutu od atrybutu cc, to reguła dla , to reguła dla bb w tym węźle musi zostać w tym węźle musi zostać wyliczona po regule semantycznej definiującej wyliczona po regule semantycznej definiującej cc. . Wzajemne zależności między atrybutami syntezowanymi Wzajemne zależności między atrybutami syntezowanymi i dziedziczonymi w węzłach drzewa wyprowadzenia i dziedziczonymi w węzłach drzewa wyprowadzenia mogą zostać przedstawione za pomocą grafu mogą zostać przedstawione za pomocą grafu skierowanego zwanego grafem zależności.skierowanego zwanego grafem zależności.Przed skonstruowaniem grafu zależności dla drzewa Przed skonstruowaniem grafu zależności dla drzewa wyprowadzenia każda reguła semantyczna jest wyprowadzenia każda reguła semantyczna jest zapisywana w postaci: zapisywana w postaci:

b:=f(cb:=f(c11,c,c22,...,c,...,ckk))Dla reguł semantycznych składających się z wywołania Dla reguł semantycznych składających się z wywołania procedury wyprowadzany jest sztuczny atrybut procedury wyprowadzany jest sztuczny atrybut syntezowany syntezowany bb. Graf zależności ma węzły dla wszystkich . Graf zależności ma węzły dla wszystkich atrybutów oraz krawędzie z każdego atrybutów oraz krawędzie z każdego bb do każdego do każdego cc takie, że atrybut takie, że atrybut bb zależy od atrybutu zależy od atrybutu cc..

Page 25: Wykład 10

Grafy zależności - algorytmGrafy zależności - algorytm

forfor każdy węzeł każdy węzeł nn w drzewie wyprowadzenia w drzewie wyprowadzenia dodo

forfor każdy atrybut a symbolu gramatyki z każdy atrybut a symbolu gramatyki z nn dodo

utwórz węzeł w grafie zależności dla utwórz węzeł w grafie zależności dla aa;;

forfor każdy węzeł każdy węzeł nn w drzewie wyprowadzenia w drzewie wyprowadzenia dodo

forfor każda reguła semantyczna każda reguła semantyczna b:=f(cb:=f(c11,c,c22,...,c,...,ckk))

związana z produkcją użytą w związana z produkcją użytą w nn dodo

forfor i:=1i:=1 toto kk dodo

skonstruuj krawędź z węzła dla skonstruuj krawędź z węzła dla ccii do węzła dla do węzła dla bb;;

Page 26: Wykład 10

Grafy zależności – przykładGrafy zależności – przykładZałóżmy, że Załóżmy, że A.a:=f(X.x,Y.y)A.a:=f(X.x,Y.y) jest regułą semantyczną dla jest regułą semantyczną dla produkcji produkcji A->XYA->XY;;

Reguła ta definiuje atrybut syntezowany Reguła ta definiuje atrybut syntezowany A.aA.a zależny od zależny od atrybutów atrybutów X.xX.x i i Y.y;Y.y;

Jeśli ta produkcja jest używana w drzewie Jeśli ta produkcja jest używana w drzewie wyprowadzenia, to w grafie zależności znajdą się:wyprowadzenia, to w grafie zależności znajdą się:

- trzy węzły: trzy węzły: A.aA.a, , X.xX.x, , Y.yY.y; oraz; oraz- krawędzie z krawędzie z A.aA.a do do X.xX.x (ponieważ (ponieważ A.aA.a zależy do zależy do X.xX.x) i z ) i z

A.aA.a do do Y.yY.y (ponieważ (ponieważ A.aA.a zalezy od zalezy od Y.yY.y) )

Jeśli produkcja Jeśli produkcja A->XYA->XY miałaby związaną z nią regułę miałaby związaną z nią regułę semantyczną semantyczną X.i:=g(A.a,Y.y)X.i:=g(A.a,Y.y) to istniałyby krawędzie z to istniałyby krawędzie z X.iX.i do do A.aA.a oraz oraz Y.yY.y, ponieważ , ponieważ X.iX.i zależy zarówno od zależy zarówno od A.aA.a, jak , jak i od i od Y.yY.y..

Page 27: Wykład 10

Grafy zależności – przykładGrafy zależności – przykład

Trzy węzły w grafie zależności reprezentują atrybuty syntezowane Trzy węzły w grafie zależności reprezentują atrybuty syntezowane W.wartW.wart, WW11.wart.wart i WW22.wart.wart z odpowiednich węzłów drzewa wyprowadzenia. odpowiednich węzłów drzewa wyprowadzenia.

Krawędź z Krawędź z W.wartW.wart do do WW11.wart.wart oznacza że oznacza że W.wartW.wart zależy od zależy od WW11.wart.wart

Krawędź z Krawędź z W.wartW.wart do do WW22.wart.wart oznacza że oznacza że W.wartW.wart zależy od zależy od WW22.wart.wart

Linie przerywane oznaczają drzewo wyprowadzenia i nie są częścią grafu Linie przerywane oznaczają drzewo wyprowadzenia i nie są częścią grafu zależności.zależności.

Produkcja Reguła semantyczna

W –> W1 + W2 W.wart:= W1.wart + W2.wart

W

W1 W2

wart

wartwart+

Page 28: Wykład 10

Grafy zależności – przykładGrafy zależności – przykład

Drzewo wyprowadzenia

Page 29: Wykład 10

Grafy zależności – przykładGrafy zależności – przykładInterpretacja:Interpretacja:

Węzły w grafie zależności są oznaczone liczbami, które będą Węzły w grafie zależności są oznaczone liczbami, które będą używane do ich numeracji;używane do ich numeracji;

Ponieważ atrybut dziedziczony Ponieważ atrybut dziedziczony L.dzL.dz zależy od atrybutu zależy od atrybutu T.typT.typ z z reguły reguły L.dz:=T.typL.dz:=T.typ dla produkcji dla produkcji D->TLD->TL, więc z węzła 4 dla , więc z węzła 4 dla T.typT.typ istnieje krawędź do węzła 5;istnieje krawędź do węzła 5;

Ponieważ Ponieważ LL11.dz.dz zależy od zależy od L.dzL.dz w regule semantycznej w regule semantycznej LL11.dz:=L.dz.dz:=L.dz dla produkcji dla produkcji L->LL->L11,,idid więc pojawiają się dwie krawędzie więc pojawiają się dwie krawędzie prowadzące od węzłów 7 i 9;prowadzące od węzłów 7 i 9;

Każda z reguł semantycznych Każda z reguł semantycznych dodajtyp(dodajtyp(idid.wpis,L.dz).wpis,L.dz) związana z związana z produkcjami produkcjami LL powoduje utworzenie sztucznego atrybutu; powoduje utworzenie sztucznego atrybutu;

Węzły 6,9 i 10 są tworzone dla sztucznych atrybutów.Węzły 6,9 i 10 są tworzone dla sztucznych atrybutów.

Page 30: Wykład 10

Kolejność obliczeńKolejność obliczeńPorządek topologiczny w acyklicznym grafie Porządek topologiczny w acyklicznym grafie skierowanym jest uporządkowaniem węzłów grafu skierowanym jest uporządkowaniem węzłów grafu mm11,m,m22,...,m,...,mkk, dla którego wszystkie krawędzie grafu , dla którego wszystkie krawędzie grafu prowadzą od wcześniejszych węzłów do późniejszych w prowadzą od wcześniejszych węzłów do późniejszych w tym przypadku. Inaczej mówiąc, jeśli tym przypadku. Inaczej mówiąc, jeśli mmii ->m ->mjj jest jest krawędzią z krawędzią z mmii do do mmjj, to w tym porządku , to w tym porządku mmii występuje występuje przed przed mmjj..

Każdy porządek topologiczny w grafie zależności Każdy porządek topologiczny w grafie zależności dostarcza prawidłowej kolejności obliczeń reguł dostarcza prawidłowej kolejności obliczeń reguł semantycznych związanych z węzłami drzewa semantycznych związanych z węzłami drzewa wyprowadzenia.wyprowadzenia.

W porządku topologicznym atrybuty zależne W porządku topologicznym atrybuty zależne cc11,c,c22,...,c,...,ckk z z reguły semantycznej reguły semantycznej b:=f(cb:=f(c11,c,c22,...,c,...,ckk)) muszą być do- muszą być do-stępne w węźle przed rozpoczęciem obliczania funkcji stępne w węźle przed rozpoczęciem obliczania funkcji f.f.

Page 31: Wykład 10

PodsumowaniePodsumowanieTranslacja specyfikowana przez definicję sterowaną Translacja specyfikowana przez definicję sterowaną składnią może zostać sprecyzowana w następujący składnią może zostać sprecyzowana w następujący sposób:sposób:

- Gramatyka, na której ta definicja bazuje, jest używana Gramatyka, na której ta definicja bazuje, jest używana do konstrukcji drzewa wyprowadzenia dla wejścia;do konstrukcji drzewa wyprowadzenia dla wejścia;

- Graf zależności jest konstruowany w sposób omówiony Graf zależności jest konstruowany w sposób omówiony wcześniej;wcześniej;

- Z porządku topologicznego w grafie zależności Z porządku topologicznego w grafie zależności otrzymujemy kolejność obliczeń dla reguły seman-otrzymujemy kolejność obliczeń dla reguły seman-tycznych;tycznych;

- Obliczenie reguł semantycznych w tej kolejności daje Obliczenie reguł semantycznych w tej kolejności daje translację napisu wejściowego.translację napisu wejściowego.

Page 32: Wykład 10

Kolejność obliczeń - przykładKolejność obliczeń - przykładGraf zależności;Graf zależności;Ponieważ każda krawędź w grafie zależności prowadzi z węzła o Ponieważ każda krawędź w grafie zależności prowadzi z węzła o niższej numeracji do węzła o wyższej numeracji, więc porządek niższej numeracji do węzła o wyższej numeracji, więc porządek topologiczny w grafie zależności można otrzymać zapisując węzły w topologiczny w grafie zależności można otrzymać zapisując węzły w porządku przypisanych im numerów. porządku przypisanych im numerów. Niech Niech aann będzie atrybutem związanym z węzłem o numerze będzie atrybutem związanym z węzłem o numerze nn w w grafie zależności. Wówczas:grafie zależności. Wówczas:

aa44 := real; := real;

aa55 := a := a44;;

dodajtyp(dodajtyp(idid33.wpis, a.wpis, a55););

aa77:=a:=a55;;

dodajtyp(dodajtyp(idid22.wpis, a.wpis, a77););

aa99:=a:=a77;;

dodajtyp(dodajtyp(idid11.wpis, a.wpis, a99););Obliczając te reguły semantyczne, zapisujemy typ Obliczając te reguły semantyczne, zapisujemy typ realreal we wpisach we wpisach w tablicy symboli dla każdego identyfikatora.w tablicy symboli dla każdego identyfikatora.

Page 33: Wykład 10

Obliczanie reguł semantycznychObliczanie reguł semantycznych

Metody obliczania reguł semantycznych:Metody obliczania reguł semantycznych:

- Metody bazujące na drzewach wypro-Metody bazujące na drzewach wypro-wadzenia;wadzenia;

- Metody bazujące na regułach;Metody bazujące na regułach;

- Metody bez pamięci;Metody bez pamięci;

Page 34: Wykład 10

Metody bazujące na drzewach Metody bazujące na drzewach wyprowadzenia wyprowadzenia

W czasie kompilacji metody bazujące na drzewach W czasie kompilacji metody bazujące na drzewach wyprowadzenia wyznaczają kolejność obliczeń wyprowadzenia wyznaczają kolejność obliczeń na podstawie porządku topologicznego z grafu na podstawie porządku topologicznego z grafu zależności dla drzewa wyprowadzenia dla zależności dla drzewa wyprowadzenia dla każdego wejścia. Metody te nie zadziałają każdego wejścia. Metody te nie zadziałają jedynie wtedy, gdy graf zależności dla jedynie wtedy, gdy graf zależności dla rozważanego drzewa wyprowadzenia ma cykl.rozważanego drzewa wyprowadzenia ma cykl.

Page 35: Wykład 10

Metody bazujące na regułachMetody bazujące na regułach

W czasie konstrukcji kompilatora reguły W czasie konstrukcji kompilatora reguły semantyczne związane z produkcjami są semantyczne związane z produkcjami są analizowane ręcznie lub przy użyciu analizowane ręcznie lub przy użyciu wyspecjalizowanych narzędzi. Dla każdej wyspecjalizowanych narzędzi. Dla każdej produkcji porządek obliczeń atrybutów z produkcji porządek obliczeń atrybutów z nią związanych jest wyznaczany w trakcie nią związanych jest wyznaczany w trakcie konstrukcji kompilatora.konstrukcji kompilatora.

Page 36: Wykład 10

Metody bez pamięciMetody bez pamięci

Kolejność obliczeń jest ustalana bez rozważania Kolejność obliczeń jest ustalana bez rozważania reguł semantycznych. Przykładów, jeśli reguł semantycznych. Przykładów, jeśli translacja odbywa się podczas analizy translacja odbywa się podczas analizy składniowej, to porządek obliczeń jest narzu-składniowej, to porządek obliczeń jest narzu-cany przez samą metodę analizy składniowej, cany przez samą metodę analizy składniowej, niezależnie od reguł semantycznych. Taka niezależnie od reguł semantycznych. Taka kolejność obliczeń ogranicza klasę definicji kolejność obliczeń ogranicza klasę definicji sterowanych składnią, które mogą zostać sterowanych składnią, które mogą zostać zaimplementowane.zaimplementowane.

Page 37: Wykład 10

Obliczanie reguł semantycznychObliczanie reguł semantycznychWnioski:Wnioski:

Metody bazujące na regułach i metody bez Metody bazujące na regułach i metody bez pamięci nie konstruują grafu zależności w pamięci nie konstruują grafu zależności w trakcie kompilacji, więc mogą być bardziej trakcie kompilacji, więc mogą być bardziej wydajne pod względem czasu kompilacji i wydajne pod względem czasu kompilacji i wykorzystania pamięci;wykorzystania pamięci;

Metody bazujące na drzewach wyprowadzenia Metody bazujące na drzewach wyprowadzenia nie zadziałają jedynie wtedy, gdy graf zależności nie zadziałają jedynie wtedy, gdy graf zależności dla rozważanego drzewa wyprowadzenia ma dla rozważanego drzewa wyprowadzenia ma cykl (takie definicje sterowane składnią cykl (takie definicje sterowane składnią nazywamy nazywamy cyklicznymicyklicznymi).).

Page 38: Wykład 10

PodsumowaniePodsumowanieWśród definicji sterowanych składnią wyróżniamy dwie Wśród definicji sterowanych składnią wyróżniamy dwie podklasy:podklasy:

- S-atrybutowe – w których używane są jedynie atrybuty S-atrybutowe – w których używane są jedynie atrybuty syntezowane;syntezowane;

- L-atrybutowe – w których każdy atrybut może być L-atrybutowe – w których każdy atrybut może być atrybutem syntezowanym albo atrybutem dziedziczonym atrybutem syntezowanym albo atrybutem dziedziczonym symbolu stojącego po prawej stronie produkcji, który symbolu stojącego po prawej stronie produkcji, który zależy od atrybutów symboli stojących po prawej stronie zależy od atrybutów symboli stojących po prawej stronie produkcji na lewo od niego i od atrybutu dziedziczonego produkcji na lewo od niego i od atrybutu dziedziczonego symbolu stojącego po lewej stronie produkcji;symbolu stojącego po lewej stronie produkcji;

Wniosek:Wniosek:Każda definicja S-atrybutowa jest również L-atrybutowa.Każda definicja S-atrybutowa jest również L-atrybutowa.

Page 39: Wykład 10

Translacja sterowana składnią - Translacja sterowana składnią - LLGENLLGEN

W generatorze LLgen atrybuty symboli są W generatorze LLgen atrybuty symboli są implementowane w dokładnie taki sam sposób implementowane w dokładnie taki sam sposób jak w języku C, czyli jako parametry funkcji:jak w języku C, czyli jako parametry funkcji:

- Atrybuty syntezowane jako parametry wyjściowe Atrybuty syntezowane jako parametry wyjściowe (na poziomie języka C – wskaźniki);(na poziomie języka C – wskaźniki);

- Atrybuty dziedziczone jako parametry wejściowe Atrybuty dziedziczone jako parametry wejściowe (na poziomie języka C – zmienne przekazywane (na poziomie języka C – zmienne przekazywane przez wartość).przez wartość).

Page 40: Wykład 10

Translacja sterowana składnią - Translacja sterowana składnią - LLGENLLGEN

Generator LLgen nie nakłada własnych, dodatkowych Generator LLgen nie nakłada własnych, dodatkowych ograniczeń na liczbę i typ atrybutów ponad te, które ograniczeń na liczbę i typ atrybutów ponad te, które wynikają z użycia języka C;wynikają z użycia języka C;

Przykład:Przykład:

S (int p1,; int p2; int *p3; double *p4;) {int l1; double l2; } : ...S (int p1,; int p2; int *p3; double *p4;) {int l1; double l2; } : ...

Nieterminal S ma w powyższej produkcji:Nieterminal S ma w powyższej produkcji:- Dwa atrybuty dziedziczone (p1, p2);Dwa atrybuty dziedziczone (p1, p2);- Dwa atrybuty syntezowane (p3 i p4);Dwa atrybuty syntezowane (p3 i p4);- Dwie zmienne lokalne (l1 i l2).Dwie zmienne lokalne (l1 i l2).

Page 41: Wykład 10

Translacja sterowana składnią - Translacja sterowana składnią - LLGENLLGEN

Generator LLgen nie nakłada własnych, dodatkowych Generator LLgen nie nakłada własnych, dodatkowych ograniczeń na liczbę i typ atrybutów ponad te, które ograniczeń na liczbę i typ atrybutów ponad te, które wynikają z użycia języka C;wynikają z użycia języka C;

Przykład:Przykład:

S (int p1,; int p2; int *p3; double *p4;) {int l1; double l2; } : ...S (int p1,; int p2; int *p3; double *p4;) {int l1; double l2; } : ...

Nieterminal S ma w powyższej produkcji:Nieterminal S ma w powyższej produkcji:- Dwa atrybuty dziedziczone (p1, p2);Dwa atrybuty dziedziczone (p1, p2);- Dwa atrybuty syntezowane (p3 i p4);Dwa atrybuty syntezowane (p3 i p4);- Dwie zmienne lokalne (l1 i l2).Dwie zmienne lokalne (l1 i l2).

Page 42: Wykład 10

Translacja sterowana składnią - Translacja sterowana składnią - LLGENLLGEN

Atrybuty i zmienne lokalne deklarowane są w produkcji, Atrybuty i zmienne lokalne deklarowane są w produkcji, w której dany nieterminal znajduje się po lewej stronie w której dany nieterminal znajduje się po lewej stronie (jest tylko jedna taka produkcja dla każdego (jest tylko jedna taka produkcja dla każdego nieterminala, ponieważ w LLgenie alternatywne prawe nieterminala, ponieważ w LLgenie alternatywne prawe strony muszą być zapisane po znaku „|”);strony muszą być zapisane po znaku „|”);Atrybuty definiujemy zaraz po nazwie symbolu, w Atrybuty definiujemy zaraz po nazwie symbolu, w nawiasach okrągłych, rozdzielając je średnikami, średnik nawiasach okrągłych, rozdzielając je średnikami, średnik po ostatnim atrybucie jest opcjonalny;po ostatnim atrybucie jest opcjonalny;Zmienne lokalne deklarujemy po nazwie symbolu i Zmienne lokalne deklarujemy po nazwie symbolu i atrybutach – w nawiasach klamrowych.atrybutach – w nawiasach klamrowych.

SS (int p1,; int p2; int *p3; double *p4;) (int p1,; int p2; int *p3; double *p4;) {int l1; double l2; }{int l1; double l2; } : ...: ...

atrybuty Zmienne lokalne

Page 43: Wykład 10

Translacja sterowana składnią - Translacja sterowana składnią - YACCYACC

W generatorze YACC reguły semantyczne są obliczane W generatorze YACC reguły semantyczne są obliczane w trakcie przetrwania wejścia. w trakcie przetrwania wejścia.

Drzewo rozbioru nie jest jawnie konstruowane a Drzewo rozbioru nie jest jawnie konstruowane a kolejność obliczania atrybutów wynika z zasady działania kolejność obliczania atrybutów wynika z zasady działania LR-parsera – akcje są wykonywane tylko w trakcie LR-parsera – akcje są wykonywane tylko w trakcie redukcji.redukcji.

Zaletą takiego podejścia jest prostota i efektywność Zaletą takiego podejścia jest prostota i efektywność translatora (małe narzuty pamięciowe i czasowe).translatora (małe narzuty pamięciowe i czasowe).

Wadą takiego podejścia jest możliwość przetwarzania Wadą takiego podejścia jest możliwość przetwarzania tylko L-atrybutowych definicji sterowanych składnią.tylko L-atrybutowych definicji sterowanych składnią.

Page 44: Wykład 10

Translacja sterowana składnią - Translacja sterowana składnią - YACCYACC

Uwaga:Uwaga:Może się wydawać, że ograniczeniae mozliwości przetwarzania Może się wydawać, że ograniczeniae mozliwości przetwarzania

definicji sterowanych składnią do zbioru tylko L-atrybutowych jest definicji sterowanych składnią do zbioru tylko L-atrybutowych jest istotne. W praktyce jednak rzadko jest to istotny problem.istotne. W praktyce jednak rzadko jest to istotny problem.

Jeżeli definicja sterowana składnia nie jest L-atrybutowa, a chcemy Jeżeli definicja sterowana składnia nie jest L-atrybutowa, a chcemy taki translator w YACC-u skonstruować mamy dwa rozwiązania:taki translator w YACC-u skonstruować mamy dwa rozwiązania:

- przepisać definicję tak, aby była L-atrybutowa (czasem definicję przepisać definicję tak, aby była L-atrybutowa (czasem definicję sterowaną składnią można łatwo zmodyfikować tak, żeby była L-sterowaną składnią można łatwo zmodyfikować tak, żeby była L-atrybutowa (a nawet S-atrybutowa);atrybutowa (a nawet S-atrybutowa);

- Samodzielnie skonstruować niezbedną część (albo całe() drzewo Samodzielnie skonstruować niezbedną część (albo całe() drzewo rozbioru i dokonać ewaluacji wtedy, gdy znane będą już konieczne rozbioru i dokonać ewaluacji wtedy, gdy znane będą już konieczne wartości atrybiutów.wartości atrybiutów.

Page 45: Wykład 10

Translacja sterowana składnią - Translacja sterowana składnią - YACCYACC

W generatorze YACC translację sterowana składnią można realizować w W generatorze YACC translację sterowana składnią można realizować w oparciu o zmienne globalne albo wbudowane mechanizmy atrybutów. oparciu o zmienne globalne albo wbudowane mechanizmy atrybutów. Można stosować także kombinacje tych pojęć;Można stosować także kombinacje tych pojęć;

Mechanizm atrybutów wbudowany w generator YACC jest dostatecznie Mechanizm atrybutów wbudowany w generator YACC jest dostatecznie elastyczny i efektywny, aby implementować z jego użyciem wszystkie elastyczny i efektywny, aby implementować z jego użyciem wszystkie translatory unikając zagrożeń wynikających z używania zmiennych translatory unikając zagrożeń wynikających z używania zmiennych globalnych;globalnych;

W bardziej złożonych specyfikacjach łatwo jest stracić kontrolę nad użyciem W bardziej złożonych specyfikacjach łatwo jest stracić kontrolę nad użyciem zmiennych globalnych, a dodatkowe zagrożenia stanowi ścisłe zmiennych globalnych, a dodatkowe zagrożenia stanowi ścisłe kontrolowanie kolejności wykonywania obliczeń związanej z działaniem LR-kontrolowanie kolejności wykonywania obliczeń związanej z działaniem LR-parsera;parsera;

Wniosek:Wniosek:Lepiej nie korzystać ze zmiennych globalnych ani w samym analizatorze Lepiej nie korzystać ze zmiennych globalnych ani w samym analizatorze

składniowym, ani pośredniczących w przekazywaniu wartości między składniowym, ani pośredniczących w przekazywaniu wartości między skanerem a parserem.skanerem a parserem.

Page 46: Wykład 10

Koniec wykładu dziesiątegoKoniec wykładu dziesiątego