Dangling else problem

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

Dangling else problem to problem niejednoznaczności spotykanych w praktyce gramatyk bezkontekstowych.

Niech polecenie redukuje się do if (warunek) polecenie, do if (warunek) polecenie else polecenie oraz do jakiegoś innego polecenia, np. zmienna = wyrażenie.

Weźmy teraz polecenie:

if (warunek1) if (warunek2) zmienna = wyrażenie else zmienna = wyrażenie

Gramatyka w żaden sposób nie rozstrzyga do którego if odnosi się to else:

if (warunek1) { if (warunek2) zmienna = wyrażenie else zmienna = wyrażenie }

czy też:

if (warunek1) { if (warunek2) zmienna = wyrażenie } else zmienna = wyrażenie

Gramatykę taką zawszę można przekształcić w gramatykę jednoznaczną, zwykle zakładając że else dotyczy najwewnętrzniejszego wolnego if (czyli pierwsza z podanych wyżej interpretacji). Jest to również rozwiązanie najlepsze ze względu na strukturę analizatora składni: aby skojarzyć napotkany else z właściwym if nie potrzeba sprawdzać liczby else-ów następujących w dalszej części analizowanego napisu.