Pok-11-wyk-Slajd36
Gramatyka niejednoznaczna – przypadki specjalne
Gramatyki niejednoznaczne pozwalają również na relatywnie łatwe dołączenie nowej produkcji opisującej specjalny przypadek konstrukcji opisanych pozostałymi produkcjami. Uzyskanie tego samego efektu przy użyciu gramatyki jednoznacznej jest niezwykle trudne.
Uwzględnienie przypadku specjalnego w gramatyce niejednoznacznej można pokazać na przykładzie preprocesora EQN służącego do składania wzorów matematycznych. Preprocesor EQN (autorstwa Kernighana i Cherry’ego) pozwala m. in. na stosowanie indeksów dolnych (sub ) i górnych (sup ). Konieczne jest wyróżnienie szczególnego przypadku, gdy wzorzec ma zarówno indeks dolny jak i górny (produkcja E ?–> E sub E sup E), aby nadać mu odpowiednią postać graficzną.
Fragment gramatyki języka preprocesora przedstawiony w przykładzie jest niejednoznaczny z kilku powodów. Terminale (operatory) sup i sub nie mają zdefiniowanej ani łączności, ani priorytetów. Konsekwencją tego są podobne konflikty przesunięcie/redukcja jak w gramatyce dla wyrażeń arytmetycznych.
Aby gramatyka odzwierciedlała semantykę języka należy nadać terminalom sup i sub prawostronną łączność i ten sam priorytet (przy okazji pozbywamy się konfliktów przesunięcie/redukcja).