这个问题是关于我的CS作业,我不知道该怎么做。
考虑语法
S ← ( L )
S ← a
L ← L , S
L ← S
为句子( a , ( a , a ) )
我尝试按照结构进行操作,但我最终得到(L,(L,L))
但这似乎并不正确。有人能把我推向正确的方向吗?
答案 0 :(得分:3)
以下是您所追求的部分内容:
现在你可以做其余的工作了:))
答案 1 :(得分:2)
查看句子(a, (a, a))
。哪个右侧(RHS)可能匹配?只有第一个S ← ( L )
。因此,树的根将是S
- 具有三个子节点的节点:(
- 节点,L
- 节点和)
- 节点。
现在你需要弄清楚L
- 节点的子节点是什么,并且它们必须匹配剩余的输入:a,(a,a)
。请查看LHS上L
的规则。在这些规则中,哪一个规则的RHS可以匹配a,(a,a)
?
答案 2 :(得分:0)
(a,(a,a))
的解析树可以从最左边的(a,(a,a))
推导出来:
S => (L) [S -> (L)]
=> (L,S) [L -> L,S]
=> (S,S) [L -> S ]
=> (a,S) [S -> a ]
=> (a,(L)) [S -> (L)]
=> (a,(L,S)) [L -> L,S]
=> (a,(S,S)) [L -> S ]
=> (a,(a,S)) [S -> a ]
=> (a,(a,a)) [S -> a ]
您的解析树的根目录是S
。对于派生中每个重写非终结符号,在解析树中绘制适当的节点。此外,您的语法不是最佳的,除其他外,包含链规则。删除它们可以防止必须从S
派生L
才能派生a
。