编译原理笔记【第四章 程序语言的设计】

第一节 程序设计语言的定义

1.1 语言的定义

  • 语言 = 语法(规则)+ 语义(规则)+ 语用(规则)+ 其他规则

  • 语法
    规定单词符号和语法单位(表达式、语句、程序单元、程序)的形成的规则集合

  • 语义
    规定语法正确的单词符号和语法单位的含义规则集合

1.2 语法描述

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

  1. 文法描述语法规则:生成角度
    在这里插入图片描述
    在这里插入图片描述

  2. 语法图描述语法规则:识别角度
    在这里插入图片描述- 文法和语法图的比较

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

    采用生成的方法还是采用识别的方法来描述语言的语法,由语言的设计者确定。

  • 语法的作用
    (1) 表达语言设计者的意图和设计目标
    (2) 指导语言的使用者编写正确的程序
    (3) 指导语言的实现者识别所有语法单位

1.3 语义描述

  • 文法语法图已成为语法描述的典型工具,但语义描述至今尚无人们普遍接受的典型描述工具。
  • 许多语言仍采用自然语言描述语义
  • (本章的)语言设计,采用自然语言来描述语义
    (下篇)语言实现,涉及到的语义,将以操作语义学的方法来描述
  • 操作语义学:以抽象机行为描述语言的语法单位的作用和意义
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

自然语言描述和操作语义学的描述区别
前者从人的正常思路角度考虑,后者从机器指令角度考虑

第二节 形式语言与文法

2.1 形式语言与自动机理论

  • 形式语言与自动机理论
    研究计算的数学模型的定义和性质

    这些模型在计算机科学的若干应用领域中起着重要作用
    其应用范围已被扩展到生物工程、自动控制系统、图像处理与模式识别等许多领域

  • 形式语言中的语言
    任意字符的集合是一个字母表。常用的字母表如:
    26个英文字母表
    10个阿拉伯数字字母表
    24个希腊字母表
    二进制字母表
    字母表有非空性有穷性单一性,使用 ∑ \sum 表示字母表

    字符串
    字母表中的字母按照某种顺序排列而成的字符序列(允许有重复的字母)。
    ε \varepsilon ε代表空串(长度为0的串)

    语言:
    任意多个字符串的集合

  • 常用术语
    (1) { ε \varepsilon ε}表示仅含有空串的集合
    (2) 用 ϕ \phi ϕ代表空集,表示一个元素都不包含的集合
    (3) 用 ∑ \sum 代表字母表
    (4) 用 α β \alpha\beta αβ代表两个字符串 α \alpha α β \beta β的连接(并置)
    在这里插入图片描述
    (5) 用AB代表集合A与B的连接
    在这里插入图片描述
    在这里插入图片描述(6) A n A^n An代表集合A的n次连接(n次幂)
    在这里插入图片描述
    (7) A ∗ A^* A代表A上所有字符串的集合

    在这里插入图片描述(8) A + A^+ A+代表A的正闭包
    即不包括 A ∗ A^* A中的 A 0 A^0 A0
    在这里插入图片描述
    (9) 给定字母表 ∑ \sum ,则 ∑ ∗ \sum^* 的任意子集L称为字母表 ∑ \sum 上的一个语言
    在这里插入图片描述
    (10) 设 ∑ \sum 是一个字母表, ∀ L ⫅ ∑ ∗ \forall L\subseteqq\sum^* L
    ∀ x ∈ L \forall x\in L xL, x称为L的一个句子

  • 语言的乘积
    在这里插入图片描述

  • 统一 的理论
    形式语言与自动机作为统一的理论,实际上包括3方面内容:
    (1) 形式语言理论(产生语言)
    (2) 自动机理论(接收语言)
    (3) 形式语言与自动机的等价性理论

2.2 语言的形式定义

递归地定义
本部分视频链接

以括号匹配串的语言为例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 文法和语言

对于语言,根据语言句子的结构特点,可以定义一个产生该语言的文法
使用文法作为语言的有穷描述,不仅可以描述出语言的结构特征,而且可以产生这个语言的所有句子

文法是描述语言语法结构的形式规则
通用,准确,易于理解,描述能力强
可以参考上节内容

2.3.1 文法的定义

G   =   ( V T ,   V N ,   S ,   P ) G\ =\ (V_T,\ V_N,\ S,\ P) G = (VT, VN, S, P)
V T V_T VT是有限字符的集合(字母表),元素称为字母或者终结符
V N V_N VN是有限字符的集合——非终结符集合,元素称为变量或者非终结符
S ∈ V N S\in V_N SVN,称为文法的开始符号
P P P产生式 α → β \alpha \rightarrow \beta αβ的集合,其中:
在这里插入图片描述

  • 产生式的简化
    在这里插入图片描述

  • 文法的描述
    描述文法,直接给出产生式集合即可

    大写字母为非终结符号,箭头和竖为原符号,其他为终结符号,就不再生成了

    在这里插入图片描述

  • 文法的分类
    根据产生式的不同特征,分为以下几类:
    (1) 0型文法(无限制文法PSG)
    α → β \alpha\rightarrow\beta αβ

    0型文法的能力相当于图灵机(Turing)。或者说,任何0型文语言都是递归可枚举的,反之,递归可枚举集必定是一个0型语言。0型文法是这几类文法中限制最少的一个,所以一般见到的至少是0型文法。

    (2) 1型文法(上下文有关文法CSG)
    ∣ α ∣ < = ∣ β ∣ |\alpha|<=|\beta| α<=β S → ε S\rightarrow\varepsilon Sε例外
    (即左边长度小于等于右边长度)

    1型文法也叫上下文有关文法,此文法对应于线性有界自动机。它是在0型文法的基础上每一个α→β,都有|β|>=|α|。这里的|β|表示的是β的长度。

    如有A->Ba则|β|=2,|α|=1符合1型文法要求

    在这里插入图片描述
    (3) 2型文法(上下文无关文法CFG)
    A → β A\rightarrow\beta Aβ

    2型文法也叫上下文无关文法,它对应于下推自动机。2型文法是在1型文法的基础上,再满足:每一个α→β都有α是非终结符。如A->Ba,符合2型文法要求。
    如Ab->Bab虽然符合1型文法要求,但不符合2型文法要求,因为其α=Ab,而Ab不是一个非终结符。

    如有:A->Ba

    (4) 3型文法(正则文法RG, 或右线性正则文法RLG)
    A → u A\rightarrow u Au A → w B A\rightarrow wB AwB
    其中, u ∈ V T ∗ ,   w ∈ V T + u\in V_T^*,\ w\in V_T^+ uVT, wVT+

    3型文法也叫正规文法,它对应于有限状态自动机。它是在2型文法的基础上满足:A→α|αB(右线性)或A→α|Bα(左线性)。

    如有:A->a,A->aB,B->a,B->cB

  • 推导的定义
    在这里插入图片描述

  • 推导的实质
    推导是用产生式的右边替换产生式的左边

    推导的逆过程——归约
    归约是用产生式的左端替换产生式的右端,是推导的逆过程

    非终结符代表在推导的过程中可以被代替的符号
    终结符代表在推导的过程中不可被替代的符号

  • 多步推导(至少一步)
    在这里插入图片描述

  • 任意步推导(包括0步)
    在这里插入图片描述

  • 推导实例

    说再多不如一个例子明白的彻底
    在这里插入图片描述

  • 句型和句子

    在这里插入图片描述

2.3.2 语言的定义

在这里插入图片描述

  • 注意
    在这里插入图片描述

  • 语法树
    在这里插入图片描述

    存在二义性在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

第三节 高级程序设计语言的设计

设计的依据:面向的问题和面向的机器
设计内容(语法):表达式语句程序单元程序
描述方式:
语法——BNF
语义——自然语言

BNF
巴科斯范式 以美国人巴科斯(Backus)和丹麦人诺尔(Naur)的名字命名的一种形式化的语法表示方法,用来描述语法的一种形式体系,是一种典型的元语言。又称巴科斯-诺尔形式(Backus-Naur form)。它不仅能严格地表示语法规则,而且所描述的语法是与上下文无关的。它具有语法简单,表示明确,便于语法分析和编译的特点。BNF表示语法规则的方式为:非终结符用尖括号括起。每条规则的左部是一个非终结符,右部是由非终结符和终结符组成的一个符号串,中间一般以“::=”分开。具有相同左部的规则可以共用一个左部,各右部之间以直竖“|”隔开。

3.1 表达式的设计

(1)逻辑表达式
在这里插入图片描述
(2)关系表达式

在这里插入图片描述

(3)算术表达式
在这里插入图片描述

3.2 语句的设计

(1)说明语句

在这里插入图片描述
(2)执行语句
在这里插入图片描述

3.3 程序单元的设计

在这里插入图片描述
形参可以没有;
如果有,可以是变量、数组、过程
必须说明类型及与实参的绑定方式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4 程序的设计

在这里插入图片描述

第四节 高级程序设计语言实例

问题:最小的语言设计:仅能计算阶乘n!
如:if n<= 0 then F:=1 else F:=n*F(n-1)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

求n!程序实例
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值