首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >语法分析树?

语法分析树?
EN

Stack Overflow用户
提问于 2011-10-28 09:14:57
回答 3查看 2K关注 0票数 2

这个问题在我的CS作业中,我不知道该怎么做。

考虑一下语法

代码语言:javascript
复制
S ← ( L ) 
S ← a
L ← L , S 
L ← S 

为句子( a , ( a , a ) )绘制一个解析树

我试着遵循这个结构,但最终得到的(L,(L,L))似乎并不正确。有没有人能把我推向正确的方向?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-28 09:30:58

这是你想要的一部分:

现在你可以做剩下的工作了:)

票数 3
EN

Stack Overflow用户

发布于 2011-10-28 09:24:56

看看(a, (a, a))这句话。右手边(RHS)中的哪边可能匹配?只有第一个,S ← ( L )。因此,树的根将是一个具有三个子元素的S-node :一个(-node、一个L-node和一个)-node。

现在,您需要找出L-node的子项是什么,并且它们必须与剩余的输入匹配:a,(a,a)。所以看看在LHS上有L的规则。在这些规则中,哪一个具有与a,(a,a)匹配的RHS

票数 2
EN

Stack Overflow用户

发布于 2011-10-29 03:15:20

可以从最左侧的(a,(a,a))派生获得(a,(a,a))的解析树

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7924182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档