Pok-11-wyk-Slajd3
Gramatyki jednoznaczne i niejednoznaczne
W ramach dotychczasowych wykładów rozważana była tylko implementacja gramatyk jednoznacznych w YACCu.
Gramatyka jest jednoznaczna wtedy i tylko wtedy, gdy dla każdego zdania języka wejściowego istnieje tylko jedno drzewo składniowe (wywodu). W przeciwnym przypadku gramatyka jest niejednoznaczna.
Słowo „niejednoznaczna” sugeruje, że jest to „gorsza” gramatyka niż jednoznaczna. Jak zobaczymy, w praktyce zastosowanie gramatyki niejednoznacznej może okazać się lepszym rozwiązaniem niż równoważnej jednoznacznej.
Trzeba także pamiętać, że drzewo składniowe (jak sama nazwa zresztą wskazuje) opisuje składnię a nie znaczenie (semantykę) zdania. Nie odzwierciedla więc kolejności zastępowania symboli w formach zdaniowych (porządku wykonywania akcji).
Każdemu drzewu wywodu odpowiada jedno unikalne wyprowadzenie prawostronne (jedno lewostronne zresztą też – ale w ramach wykładu rozważamy LR-parsery wygenerowane przez YACCa, które konstruują odwrotność prawostronnego wywodu).