Pok-11-wyk-Slajd26

Z Studia Informatyczne
Wersja z dnia 19:12, 30 sie 2006 autorstwa Complak (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Gramatyka niejednoznaczna – operatory bez wiązania

Gramatyka niejednoznaczna – operatory bez wiązania


W celu określenia, że jakiś operator nie ma wiązania używamy słowa kluczowego % nonassoc . Wiązania nie ma np. operator porównania (=) w języku Pascal (podobnie jest np. w Fortranie z . EQ .).

Brak wiązania oznacza, że można konstruować wyrażenie o postaci: a = b

ale nie: a = b = c

które należy zapisać np. jako ( a = b ) = c .

W celu wprowadzenia do gramatyki operatora porównania, który nie ma mieć wiązania używamy deklaracji:

%nonassoc ‘=‘

i zazwyczaj nadajemy mu niski priorytet po to, aby w wyrażeniach typu:

(a + b) = (c + d)

można było opuścić nawiasy.

Dodajemy również produkcję E : E ‘=‘ E i kojarzymy z nią odpowiednie akcje semantyczne. Konieczne jest oczywiście również odpowiednie rozszerzenie analizatora leksykalnego.

W niektórych językach operator porównania jest łączny. Np. język C dopuszcza konstrukcję:

0 == 3 == 0 (natomiast bardzo specyficzna jest jej semantyka – ten warunek jest prawdziwy !).

Ciekawy jest fakt, że z technicznego punktu widzenia % nonassoc nie rozstrzyga konfliktu przesuń/redukuj. Skoro operator ‘=‘ nie ma mieć łączności, to sytuacja E –> E '=' E . '=', to po prostu błąd składniowy.


<< Poprzedni slajd | Spis treści | Następny slajd >>