Как разобрать заданную грамматику LALR (1) - PullRequest
0 голосов
/ 05 ноября 2019

У меня проблемы с синтаксическим анализом следующей грамматики с использованием метода LALR.

s -> y
y -> dX | ydX
X -> e | Zd
z -> F | epsilon

В начале все нормально, вот состояние элемента 0: (, разделяет состояния предпросмотра)

s -> .y, $
y -> .dX, $d
y -> .ydX, $d

Теперь это нормально, но когда вы переходите в состояние 1 на рекламном терминале, я запутываюсь. Моя книга имеет состояние 2, как показано ниже:

y -> d.X, $d
X -> .e, $d
X -> .Zd, $d
Z -> .f, d
Z -> ., d

Откуда исходит прогнозный терминал "d" в нетерминале X? Я думал, что dX произошел от .dX, у которого были терминалы предпросмотра "$" и $ d ". Но при выполнении E-замыкания разве не следует, что предпросмотры должны быть первыми из $ d, который равен" $ "? Почему это" $ ",или "d"? Я думал, что это может быть из другого состояния, так как это LALR, но состояние, с которым я в конечном итоге объединяю состояние 1, также не имеет объявления в предвкушении. Может кто-нибудь объяснить мне, почему существует пара "d"с "$" в предвидении этого состояния? Спасибо.

1 Ответ

0 голосов
/ 05 ноября 2019

S $ -> Y $ -> dX $ в этой последовательности деривации после того, как d в последующем d будет {$}

S $ -> Y $ -> ydX $ -> dXdX $ в этом деривации послепервый d, следующий за X - это {d}

обе последовательности деривации находятся в одном и том же состоянии после покрытия первого символа во входном файле '

...