汪道之

有人的地方就有江湖

0%

编译原理第四章

程序语言的设计

1. (程序设计)语言的定义

语言=语法(规则)+语义(规则)

语法:构造程序及其成分(单词、语法单位)的规则集合

语义:定义语言的单词符号和语法单位的作用和意义的规则组合

  • 可以从生成(文法)和识别(语法图)的角度描述语法

    1.1 文法描述语法规则:生成角度

    <标识符>→<字母>
    <标识符>→<标识符><字母>
    <标识符>→<标识符><数字>
    <字母>→A|…|Z|a|…|z
    <数字>→0|…|9

    <表达式>→<标识符>
    <表达式>→(<表达式>)
    <表达式>→<表达式><运算符><表达式>
    <运算符>→+|-|*|/

    注意:这里没有考虑运算符的优先级

    1.2 语法图描述语法规则:识别角度

    image-20210413153851229

    image-20210413153918317

    image-20210413153937838

    image-20210413154819595

    识别原则:
    • 终结符框:标识的终结符与被识别的终结符刚好符合
    • 非终结符框:由该非终结符的语法图识别
    • 分支:若遇到分支,则任选一分支识别;
    • 回溯:若一个分支识别不成功,则选另一分支识别
    • 若一个终结符序列是合法的:
      那么,必须从语法图的入口边通过语法图而到达出口边,
      且在通过的过程中,恰恰能识别该终结符序列。
    • 语言:语法图能识别的所有终结符序列的集合。称为语言。
    语法图的构造

    image-20210413155020391

    1.3 高级语言语法规则描述方法

    FORTRAN采用自然语言描述语法;
    ALGOL 60首次用BNF对语法进行形式描述,为语言定义做出了重要贡献;
    Pascal首次采用语法图来定义语言,给出了较为直观的语法结构。

    1.4 语法描述方法等价

    文法和语法图是语言语法的等价表示
    文法从产生的观点来定义语言的语法,通用性好。
    语法图以识别的观点定义语言的语法,更直观和清晰。

    1.5 语法的作用

    ①表达语言设计者的意图和设计目标;
    ②指导语言的使用者编写正确的程序;(先使用语义规则后使用语法规则)
    ③指导语言的实现者识别所有语法单位。(先使用语法规则后使用语义规则)

  • 本章语义使用自然语言描述、下篇语义以操作语义学的方法描述

2. 文法

定义:文法是描述语言语法结构的形式规则

优点:通用、准确、易于理解、描述能力强

文法G是一个四元式,G=(VT ,VN ,S ,P )

VT 是有限字符的集合,元素称为字母或者终结符

VN 是有限字符的集合,元素称为变量或非终结符

S∈V,称为文法的开始符号

P是产生式α->β的集合

α∈(VT U VN )^+^ ,至少包含一个非终结符,α∈V^^ VN V^^

β∈(VT U VN )^*^

α->ε,称为空串产生式或者ε产生式

2.1 候选式

image-20210420083948266

2.2 文法的分类
  1. 0型文法(PSG)

    α->β

  2. 1型文法(上下文有关文法CSG)

    |α|<=|β| (S->ε例外)

    标准形式:

    yAz->yωz

    其中:

    A∈VN ;

    y,z∈(VT U VN )^*^ ;

    ω∈(VT U VN )^+^ ;

    (S->ε例外)

  3. 2型文法(上下文无关文法CFG)

    A->β

  4. 3型文法(正则文法RG,或右线性文法RLG)

    A->u或A->wB

    其中u∈VT ^*^ ,w∈VT ^+^

3. 文法产生的语言

3.1 推导与归约
  1. 直接推导

    wαv=>wβv,即由产生式右边替换产生式左边

  2. 任意步推导

    y=>^*^ z

  3. 多步推导

    y=>^+^ z

eg:已知文法G(E)

E->E+E|E*E|(E)|i

  1. i+i*i的(其中一种)最左推导过程

    E=>E+E=>i+E=>i+E*E=>i+i*E=>i+i*i

    E=>E*E=>E+E*E=>i+E*E=>i+i*E=>i+i*i

  2. i+i*i的最右推导(规范推导)

    E=>E+E=>E+E*E=>E+E*i=>E+i*i=>i+i*i

    E=>E*E=>E*i=>E+E*i=>E+i*i=>i+i*i

3.2 句型和句子

文法G=(VT ,VN ,S,P)

S=>^*^ w

若w∈V^*^ ,则w为文法G的一个句型

若w∈VT ^*^ ,则w是一个句子(只含终结符的句型就是一个句子)

所有句子的集合称为文法G产生的语言记为L(G)

即L(G)={α|S=>^+^ α且α∈VT ^*^ }

3.3 文法的重要特性

有限规则描述无穷语言

3.4 文法等价

两个文法G和G^’^ ,如果有L(G)=L(G^’^ ),则称G和G^’^ 等价

4. 推导树(语法树)

定义:推导树是一颗有序的标记树,每个结点的标记是文法G的非终结符或终结符或空串ε。其中标记为A的内部结点从左到右有子结点x1、x2、……xn,则A->x1……xn是一个产生式。

4.1 推导树的边缘

定义:推导树所有叶节点从左到右的连接

4.2 文法的二义性

定义:一个句子有两颗不同的推导树

4.3 短语、直接短语、句柄

详见第八章

5. 语言的设计

eg:

表达式的设计:

  1. 逻辑表达式
  2. 关系表达式
  3. 算术表达式

image-20210426173640256

image-20210426173737710

image-20210426173753654