Pok-11-wyk-Slajd32
Gramatyka niejednoznaczna – „wiszące else”(1)
Załóżmy, że rozpatrywanym językiem jest Pascal. Składnia instrukcji warunkowej różni się co prawda nieco od np. języka C (w C nie ma słowa kluczowego then , ale jest ‘;’ przed słowem kluczowym else ), ale nie zmienia to istoty problemu ani metody jego rozwiązania.
Do zademonstrowania problemu wystarczy użyć zagnieżdżonej instrukcji warunkowej przedstawionej w przykładzie. Taka instrukcja może być interpretowana na dwa sposoby – zestawione w tabeli (instrukcje bloku begin-end wstawiono, aby podkreślić sposób interpretacji). Tylko jedna z tych interpretacji jest zgodna z definicją języka.
W pierwszej interpretacji testujemy warunek, a następnie traktujemy kolejną część if oraz następującą po niej część else jako jedną całość.
Druga interpretacja traktuje drugą gałąź if jako oddzielną instrukcję, a część else wiąże z pierwszą instrukcję if .