编译原理:短语、直接短语、句柄、素短语

概念

如果S->* αAβ and A->+γ,则称γ是句型αγβ的相对于变量A的短语
如果S->* αAβ and A->γ,则称γ是句型αγβ的相对于变量A的直接(简单)短语 最左直接短语叫做句柄

其实最简单的判断方法直接画出语法树了。

文法

S->(L)|aS|a
L->L,S|S
分析(S,(a))


1.先画出语法树

这里写图片描述

2.判断短语

一个句型的语法树中任一子树叶节点所组成的符号串都是该句型的短语。

  1. 很明显的,最下面的a是S的叶子节点、最左边的S是L的叶子节点。
  2. 其他的叶子节点从左往右分别是(,,,(,),)
  3. 在树的第四层的(,L,)都是子树S的孩子,因为短语都是叶子节点,所以这边的短语有(a)
  4. 在树的第三层的L,,,S都是子树L的孩子,因为短语都是叶子节点,所以这边的短语有S,(a)
  5. 在树的第二层的(,L,)都是根节点S的孩子,因为短语都是叶子节点,所以这边的短语有(S,(a))

    所以短语有a (a) S,(a) (S,(a)) S

3.判断直接(简单)短语

当子树不包含其他更小的子树时,该子树叶节点所组成的字符串就是该句型的直接短语

短语包含直接短语,我们可以直接在短语中判断。
这里只有第五层的S和第三层的L不包含其他更下的子树,所以有a和S是直接短语。
其中(a)的父节点S包含L,S,(a)的父节点L包含L和S, (S,(a))的父节点S包含L

4.判断句柄

句柄是最左边的直接短语

因为S处于最左边,所以S是直接短语。

5.判断素短语

素短语是一个短语,它至少含有一个终结符,而且除他之外不含有其他素短语。

短语包含素短语,我们可以直接在短语中判断。
因为S可以推导出其他字符,(a);S,(a);(S,(a))都包含其他素短语,所以符合条件的只有a。

你可能感兴趣的:(编译原理)