Работа с бесконечными циклами при построении состояний для разбора LR(1)
В настоящее время я строю состояния LR(1) из следующей грамматики.
S->AS
S->c
A->aA
A->b
where A,S are nonterminals and a,b,c are terminals.
Это конструкция I0
I0: S' -> .S, epsilon
---------------
S -> .AS, epsilon
S -> .c, epsilon
---------------
S -> .AS, a
S -> .c, c
A -> .aA, a
A -> .b, b
И I1.
From S, I1: S' -> S., epsilon //DONE
И так далее. Но когда я приступаю к строительству I4...
From a, I4: A -> a.A, a
-----------
A -> .aA, a
A -> .b, b
Проблема в A -> .aA
Когда я пытаюсь построить следующее состояние из a, я собираюсь снова получить точно такое же содержимое I4, и это продолжается бесконечно. Аналогичная петля происходит с
S -> .AS
Итак, что я делаю не так? Должна быть какая-то деталь, которую я упускаю, но я просмотрел свои заметки и свою книгу и либо не могу найти, либо просто не понимаю, что здесь не так. Любая помощь?
1 ответ
Я почти уверен, что понял ответ. Очевидно, что состояния могут указывать друг на друга, что устраняет необходимость создавать новые, если их контент уже существует. Я все еще хотел бы, если кто-то может подтвердить это, все же.