语法解析树?

时间:2011-10-28 01:14:57

标签: parsing tree grammar parse-tree

这个问题是关于我的CS作业,我不知道该怎么做。

考虑语法

S ← ( L ) 
S ← a
L ← L , S 
L ← S 

为句子( a , ( a , a ) )

绘制一个解析树

我尝试按照结构进行操作,但我最终得到(L,(L,L))但这似乎并不正确。有人能把我推向正确的方向吗?

3 个答案:

答案 0 :(得分:3)

以下是您所追求的部分内容:

enter image description here

现在你可以做其余的工作了:))

答案 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