Parsing 在LR解析中解决此示例有困难吗?

Parsing 在LR解析中解决此示例有困难吗?,parsing,lr,Parsing,Lr,语法是: → (L)| id L→ S | L,S 我正在尝试使用LR解析计算给定语法的闭包和转到 我们的老师解决了这个问题,但在第一步中,他没有使用第二个产品L-->S|L,S,我不知道为什么。 因此,我解决了相同的示例,但在第一步中使用了完整的语法。 这样一来,最初的步骤只有9步,而我的步骤是10步。 我的问题是,我的解决方案正确吗?我想我做了LR(1)。 1) 讲座中的解决方案--------2)我的解决方案。 您的解决方案不正确 启动配置为: S' → . S $ 然后递归地扩展该

语法是:

→ (L)| id
L→ S | L,S

我正在尝试使用LR解析计算给定语法的闭包和转到

我们的老师解决了这个问题,但在第一步中,他没有使用第二个产品
L-->S|L,S
,我不知道为什么。 因此,我解决了相同的示例,但在第一步中使用了完整的语法。
这样一来,最初的步骤只有
9步
,而我的步骤是
10步。

我的问题是,我的解决方案正确吗?我想我做了LR(1)。


1) 讲座中的解决方案--------2)我的解决方案。
您的解决方案不正确

启动配置为:

S' → . S $
然后递归地扩展该状态以包括所有产品
A→ ω
其中
A
紧跟在位置标记后面。最初,点后面唯一的非终端是
S
,因此我们添加了
S
的所有产品:

S' → . S $
S  → . ( L )
S  → . id
点后面不再有非端子,因此状态为完成

现在,对于
后面的每个符号,我们通过在符号上移动点来构造跟随状态。这里唯一有趣的是第二个,它将说明闭包规则。我们从以下几点开始:

S → ( . L )
现在我们有了一个产品,
L
紧跟着点,所以我们将
L
扩展到状态:

S → ( . L )
L → . S
L → . L , S
我们还没有完成,因为现在在点之后还有另一个非终端,
S
。因此,我们还必须添加这些产品:

S → ( . L )
L → . S
L → . L , S
S → . ( L )
S → . id

现在,紧跟在
之后的每个非终端的产品都包含在状态中,因此状态已完成。

+1,感谢您的回答。我构建了解析表并解析了考试中的句子
id+id*(id)
。老师应该把整个问题标错还是只把第一部分标错?再次感谢您的注释。@Caffè:我对您老师的评分算法没有任何评论:)您的状态表将(可能)构造正确的解析,因为尽管您错误地将
L->(L)| id
放入状态1,但不会尝试对该状态进行
GOTO(L)
。(你知道为什么不吗?)。因此,您的状态10是不可访问的,在这个特定的情况下,错误是无关的。但是,一般来说,此错误可能会导致明显的移位/减少或减少/减少冲突,这显然会影响解析。不管怎样,祝你好运。是的,你是对的。我也注意到,这并没有影响我的解析表。我希望他能理解我的所作所为。