文章目录
第一节 程序设计语言的定义
1.1 语言的定义
-
语言 = 语法(规则)+ 语义(规则)+ 语用(规则)+ 其他规则
-
语法
规定单词符号和语法单位(表达式、语句、程序单元、程序)的形成的规则集合 -
语义
规定语法正确的单词符号和语法单位的含义的规则集合
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 ∀x∈L, 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
S∈VN,称为文法的开始符号
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 A→u或 A → w B A\rightarrow wB A→wB
其中, u ∈ V T ∗ , w ∈ V T + u\in V_T^*,\ w\in V_T^+ u∈VT∗, w∈VT+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!程序实例