Parsing 构造LR(1)解析状态时处理无限循环

Parsing 构造LR(1)解析状态时处理无限循环,parsing,infinite-loop,states,lr1,Parsing,Infinite Loop,States,Lr1,我目前正在从以下语法构造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

我目前正在从以下语法构造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

那么,我做错了什么?一定有一些细节我遗漏了,但我已经浏览了我的笔记和我的书,要么找不到,要么就是不明白这里出了什么问题。有什么帮助吗?

我很确定我找到了答案。显然,各州可以相互指向,这样就不必在内容已经存在的情况下创建新的州。不过,我还是希望有人能证实这一点