Pok-11-wyk-Slajd19

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

Gramatyka niejednoznaczna


Skoro wykazaliśmy już, że użycie gramatyk niejednoznacznych daje wymierne (a nie tylko teoretyczne) korzyści zobaczmy w jaki sposób rozstrzygać konflikty z użyciem słów kluczowych YACCa.

Powróćmy w tym celu do niejednoznacznej gramatyki dla wyrażeń (liczb) rozdzielonych znakami odejmowania.

Jeżeli chcemy określić, że jakiś operator (token) ma mieć lewostronne wiązanie należy mu je przypisać za pomocą słowa kluczowego % left . Przy okazji nadajemy operatorowi również relatywny priorytet – kolejne tekstowo deklaracje wiązań będą przypisywały operatorom coraz wyższe priorytety.

W jednej deklaracji można także przypisać to samo wiązanie wielu operatorom wymieniając je po % left i rozdzielając białymi spacjami – wszystkie wymienione na liście operatory będą miały wtedy ten sam priorytet.

Na podstawie deklaracji:

%left ‘-’

YACC rozstrzygnie konflikt w sytuacji E –> E – E . - E zgodnie z naszymi oczekiwaniami na korzyść redukcji (czyli lewostronnego wiązania).


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