Pok-11-wyk-Slajd19
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).