【问题标题】:Dealing with infinite loops when constructing states for LR(1) parsing为 LR(1) 解析构建状态时处理无限循环
【发布时间】:2010-04-28 12:57:32
【问题描述】:

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

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

【问题讨论】:

    标签: parsing infinite-loop states lr1


    【解决方案1】:

    我很确定我找到了答案。显然,状态可以相互指向,因此如果内容已经存在,则无需创建新状态。不过,如果有人能证实这一点,我仍然会喜欢它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-09
      • 2020-08-27
      相关资源
      最近更新 更多