【发布时间】:2011-12-16 23:22:16
【问题描述】:
这个问题是我的 CS 作业,我不知道该怎么做。
考虑语法
S ← ( L )
S ← a
L ← L , S
L ← S
为句子( a , ( a , a ) )绘制解析树
我尝试遵循结构,最终得到(L,(L,L)),但这似乎不正确。谁能把我推向正确的方向?
【问题讨论】:
标签: parsing tree grammar parse-tree
这个问题是我的 CS 作业,我不知道该怎么做。
考虑语法
S ← ( L )
S ← a
L ← L , S
L ← S
为句子( a , ( a , a ) )绘制解析树
我尝试遵循结构,最终得到(L,(L,L)),但这似乎不正确。谁能把我推向正确的方向?
【问题讨论】:
标签: parsing tree grammar parse-tree
这是您所追求的部分内容:
现在你可以完成剩下的工作了 :)
【讨论】:
看句子(a, (a, a))。它可能匹配哪个右手边(RHS)?只有第一个,S ← ( L )。因此,树的根将是一个具有三个子节点的 S-node:(-node、L-node 和 )-node。
现在你需要弄清楚L-node 的子节点是什么,它们必须匹配剩余的输入:a,(a,a)。因此,请查看 LHS 上具有L 的规则。在这些规则中,哪一个的 RHS 可以匹配 a,(a,a)?
【讨论】:
(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。对于推导中非终结符号的每次重写,在解析树中绘制适当的节点。此外,您的语法不是最佳的,除其他外,还包含链式规则。删除它们将避免必须从 L 派生 S 以派生 a。
【讨论】: