Czym jest gramatyka niedeterministyczna?
Poniżej znajduje się przykład reguły niedeterministycznej.
Zwróć uwagę na to, że ciągi wychodzące z S posiadają wspólny prefiks . To właśnie sprawia, że reguła ta jest niedeterministyczna.
Pozbywanie się niedeterminizmu z gramatyki
Zazwyczaj jeśli się spotkasz z gramatyką niedeterministyczną na zajęciach, to zapewne będziesz musiał się tego niedeterminizmu w jakiś sposób pozbyć. Czemu zależy nam na pozbyciu się go?
Jeśli chcesz zbudować parser rekurencyjnie zstępujący (recursive descent parser), czyli rodzaj parsera top-down, to Twoja gramatyka musi spełnić dwa warunki.
-
Gramatyka nie posiada lewostronnej rekurencji
-
Gramatyka jest deterministyczna
My w tym artykule omawiamy punkt 2. Więcej o gramatykach oraz parserach możesz przeczytać w naszych innych artykułach lub zobaczyć w naszym kursie na dole.
metoda
Aby przekształcić taką niedeterministyczną regułę do reguły deterministycznej, musimy wprowadzić nowy nieterminal. U nas będzie się on nazywał .
Gramatyka 1: niedeterministyczna (występuje wspólny prefiks )
Gramatyka 2: deterministyczna (wspólny prefiks został zastąpniony pośrednią produkcją )
Generalnie, chodzi tutaj o to, że nie zmieniamy w żaden sposób tego, co nasza gramatyka produkuje. Jedyne co robimy, to wprowadzamy pośrednią regułę z nowym znakiem nieterminalnym, która sprawia, że w jednej linijce nie pojawiają się słowa zaczynające się od tego samego znaku lub ciągu znaków.
Gramatyka 1 jest równoważna gramatyce 2.
przykład 1
Przekształć gramatykę 1 do gramamatyki deterministycznej
Gramatyka 1
Skąd w ogóle wiemy, ze ta gramatyka jest niedeterministyczna? Występują tutaj w jednej linice wspólne prefiksy. Tym razem nie jest to jeden znak, lecz ciąg znaków. Zaznaczyłem ten pefiks kolorem fioletowym
Gramatyka 2 (po usunięciu niedeterminizmu)

