编译原理:高级语言形式化

文法

描述语言的语法结构的形式规则

字母表():

  • 集合
  • 非空
  • 有穷

符号:字母表中的元素

符号串(字):符号构成的一个有穷序列

空字 ε:不包含任何符号的序列

φ:不含任何元素的空集

闭包

集合 Σ 的闭包 Σ 与正闭包 Σ+ ,基于字母表 Σ 的全体符号串

Σ={a,b} 则:

  • 正规闭包:Σ+=a,b,aa,ab,ba,bb,aaa,...
  • 闭包:Σ=Σ+{ε}

如果 Σ 原来没空字,则正规闭包中没有空字

上下文无关文法

G=(VT,VN,S,P)

VT 终结符(非空),VN 非终结符(非空),VTVN=ϕS 文法的开始符号,P 产生式集合(有限)

产生式

Pα

PVN, α(VTVN)(也就是由终结符和非终结符组成的任意字符串)

产生式表达的是从非终结符转化终结符

S 为开始符号,S 必须在某个产生式的左部出现一次

注意:上下文无关文法的产生式的左边为 单个 非终结符

BNF

Pα1|α2|α3|...

推导

若存在产生式

Aγ

则满足:

αAβαγβ

代表定义, 代表直接推出\Rigtarrow

如果

α1α2α3α4...αn

则称 α1 可以推导αn。其中每一次变化都是直接推出

基于文法 G 的语言 L(G)

L(G)={α|S+α,αVT}

+ 代表可以从 S 开始经过一步或多步(1)推导出

代表可以从 S 开始经过0步或多步(0)推导出

最左推导:任何一步 αβ 都是对 α 中的最左非终结符进行替换

最右推导:任何一步 αβ 都是对 α 中的最右非终结符进行替换

句子、句型、短句、直接短句、句柄

G=(VT,VN,P,S)SαAγ

SB ,则称 B 为一个句型 (就是可以由开始符号推出来的任意串包括开始符号本身)

仅含终结符号的句型为句子 (就是可以由开始符号推出,且只有终结符号)

A+β,则 β 是句型 αβγ 相对于非终结符 A短语

Aβ,则 β直接短语

句柄:一个句型的最左直接短语

归约

推导的逆过程

αββ.α
  • 最左规约
  • 最右规约

语法树与二义性

用一张图表示一个句型的推导,这张图称为语法树,也称为推导树

image-20220103165411534

二义性:文法存在某个句子对应两棵不同的语法树

  • 无法在有限时间内判断是否具有二义性
  • 有判断无二义性的充分非必要条件

若一个文法无二义性,对一个句型的多种推导,采用的各种推导过程,画出来的语法树是一样的。语法树并没有描述具体的推导过程,是不同推导过程的抽象共性。

子树:语法树中的一个节点及其 全部 后裔

短语:子树末端形成的符号串

直接短语:简单子树(只有二级)末端形成的符号串

句柄:位于最左边的简单子树的所有叶节点自左向右排列

乔姆斯基对语言的分类

G=(VT,VN,S,P)

产生式形如:

αβ

0 型

α,β(VTVN)

α 至少含有一个非终结符号

1 型 (上下文有关)

|α||β|Sε

2型(上下文无关)

AβAVN;β(VTVN)

3 型(正规文法、有限自动机)

右线性文法

AαB\orAααVT;A,BVN

左线性文法

ABα\orAααVT;A,BVN

总结

0 型只要求产生式左边包含非终结符

1 型还要求左边的长度要小于右边的长度

2 要求左边只能由一个非终结符组成

3 型要求右边如果有非终结符,只能出现在最左或最右