编译原理_2

Posted by wzc on 2021-04-07

编译原理


1.字母表上的运算

  • 字母表的乘积

  • 字母表的n次幂

  • 字母表的正闭包:字母表正数次幂的并集

  • 字母表的克林闭包:正闭包的基础上再加上空

2.串

串是字母表中符号的一个有穷序列

串s的长度,通常记作|s|,是指s中符号的个数,例如:|aab|=3

空串是长度为0的串,用epsilon表示

3.串上的运算

乘法可看作连接

4.文法

形式化定义:G=(VT,VN,P,S)

终结符和非终结符不相交。

5.语言的定义

6.文法分类体系

  • 0型文法
    • 0型文法形成的语言称为0型语言
  • 1型文法
    • 上下文有关文法
  • 2型文法
    • 上下文无关文法
  • 3型文法
    • 正则文法
      • 右线性文法
      • 左线性文法

7.上下文无关文法的分析树/CFG的分析树

上下文无关文法可以描述大部分语法构造,被研究的做多。

分析树:

  • 根节点的标号为文法开始符号
  • 内部节点表示对一个产生式A->𝛃的应用,该节点的标号是此产生式左部A,该结点的子结点的标号从左到右构成了产生式的右部𝛃
  • 叶结点的标号既可以是非终结符,也可以是终结符,从左到右排列叶结点得到的符号串称为是这棵树的产出或边缘。

短语:

分析树中每一棵子树的边缘称为该句型的一个短语

直接短语:

如果子树只有父子两代,其边缘则为直接短语

【直接短语一定是某产生式的右部】

【但产生式的右部不一定是给定句型的直接短语】

二义性文法:一个句子可能对应多于一个语法树

【有歧义的文法】

【解决方法】每个else和最近的尚未匹配的if匹配

总结:

分析树能反映句型的推导过程,也能反映句型的结构。然而实际上,我们往往不关心推导的过程,而只关心推导的结果。因此,我们要对分析树进行改造,得到语法树。语法树中全是终结符,没有非终结符。而且语法树中没有括号。