高级语言及其语法描述

程序语言的定义

1、常用的高级程序设计语言

语言 特点
FORTRAN 数值计算
COBOL 事务处理
PASCAL 结构化程序设计
LISP 函数式程序设计
PROLOG 逻辑程序设计
C 系统程序设计
Smalltalk 面向对象程序设计
Java Internet应用,可移植性
Python 解释型

2、程序语言由语法、语义和语用三个方面定义。

  • 语法
    (1)程序本质上是一定字符集上的字符串。
    (2)定义:一组规则,用它可以形成和产生一个合式(well-formed)的程序
    (2)语法的规则:词法规则和语法规则(产生规则)
    ①词法规则:描述语言单词符号(语言的单词符号包括:标识符常数、运算符等)构成规则的称为词法规则;词法规则的描述工具通常为正规文法(正规式,有限自动式)
    ②语法规则(产生规则) :描述语言语法单位(语言的语法单位包括:表达式、语句、函数、过程等 )构成规则的称为语法规则;语法规则的描述工具通常为上下文无关文法。

注意:
(1)语法规则和词法规则定义了程序的形式结构
(2)定义语法单位的意义属于语义问题

  • 语义
    (1)定义:一组规则,用它可以定义一个程序的意义。
    (2)描述方法:
    ①自然语言描述:二义性、隐藏错误和不完整性
    ②形式描述:操作语义、指称语义、代数语义

3、程序语言的基本功能和层次结构
(1)程序语言的基本功能:描述数据和对数据的运算。
(2)程序的层次结构:
编译原理笔记:高级语言及其语法描述
4、程序语言成分的逻辑和实现意义
(1)抽象的逻辑的意义:数学意义
(2)计算机实现的意义:具体实现

程序语言的特性

1、高级语言的分类:

名称 特点
强制式语言(过程式语言) 命令驱动,面向语句
应用式语言 注重程序所表示的功能,而不是一个语句接一个语句的执行
基于规则的语言 检查一定的条件,当它满足值,则执行适当的动作
面向对象语言 封装、继承和多态

2、程序类型三要素:属性+值+操作
(1)用于区别这种类型数据对象的属性
(2)这种类型的数据对象可以具有的值
(3)可以作用于这种类型的数据对象的操作

程序语言的语法描述

1、语言的文法:语言的文法是一组规则,包含:词法规则和语法规则。
(1)词法规则:描述语言单词符号(语言的单词符号包括:标识符常数、运算符等)构成规则的称为词法规则;词法规则的描述工具通常为正规文法(正规式,有限自动式)
(2)语法规则 :描述语言语法单位(语言的语法单位包括:表达式、语句、函数、过程等 )构成规则的称为语法规则;语法规则的描述工具通常为上下文无关文法。

2、字母表与符号串
1)相关概念:
(1)字母表:字母表Σ是符号元素的非空集合。
(2)符号:字母表中的元素。
(3)符号串:字母表中的符号所组成的任意有穷序列。
Eg:若字母表Σ={a,b}
则:a,b是字母表Σ中的符号,而a,b,aa,ab,ba,aaa…都是符号串。
(4)空符号串:不含任何符号的符号串,用ε表示。

2)符号串及符号串集合的运算
(1)符号串的长度:符号串中符号的个数为符号串的长度,若x是符号串,则|x|表示符号串的长度。
Eg:|asdaf|= 5 |ε|= 0
(2)符号串的连接:符号串x和y的连接,是将符号串y连接在符号串x后面而组成的新符号串,用xy表示。
Eg:符号串x=a,y=b,则:xy=ab,yx=ba
注意:符号串的连接不满足交换律
Eg:U={ a,aa } V= { b,bb}
UV= { ab,abb,aab,aabb}
(3)符号串的幂运算:设x是符号串,则x的幂运算定义为:xn(x的n次)=x…x。
其中x0(x的0次幂)={ε}
(4)符号串集合的乘积运算:设A、B为符号串集合,两个符号串集合的乘积定义为:AB={xy|x∈A , y∈B}
Eg:符号串集合A={aa,bb},B={cc,dd}
解:AB={aacc, aadd, bbcc, bbdd},
BA={ccaa, ccbb, ddaa, ddbb}。
(5)符号串集合的幂运算:符号串集合A的幂运算定义为:
编译原理笔记:高级语言及其语法描述
(6)符号串集合的闭包:符号串集合A的闭包定义如下:
A的正则闭包: A+ =A1∪A2∪…
A的闭包: A* =A0∪A1∪A2∪…
推论:A*=A0∪A+

3、乔姆斯基将文法分为四种类型:0型、1型、2型、3型。
(1)0型文法也称短语文法。一个非常重要的理论结果是:0型文法的能力相当于图灵机(Turing)。或者说,任何0型文语言都是递归可枚举的,反之,递归可枚举集必定是一个0型语言。0型文法是这几类文法中,限制最少的一个。
(2)1型文法也叫上下文有关文法,此文法对应于线性有界自动机。
(3)2型文法也叫上下文无关文法,它对应于下推自动机,是描述程序语言语法的有效工具。
(4)3型文法也叫正规文法,它对应于有限状态自动机,是描述程序语言词法的有效工具。

4、文法和语言的形式定义
(1)定义1 产生式(或规则) :产生式是一个有序对(A,α),通常写为: A→α(或A∷=α),|A|=1,|α|≥0 其中:A称为产生式的左部符号; α为产生式的右部有穷符号串; “→”表示“定义为”或“由…组成”。
(2)文法
编译原理笔记:高级语言及其语法描述
Eg:G1 =({N},{0,1},{N→0N,N→1N,N→0,N→1},N)
另一种写法:
G1[N]:
N→0N
N→1N
N→0
N→1
(3)推导与归约
编译原理笔记:高级语言及其语法描述
(4)规范推导与规范归约:
对于直接推导xAy⇒ xβy,如果y为终结符号串或空符号串,则这种直接推导就称为规范推导(最右推导,也就是每次对符号串中最右非终结符号进行替换
);与其对应的归约称为规范归约(最左归约),且记作:
编译原理笔记:高级语言及其语法描述
Eg:
规范推导:
<无符号整数>⇒<数字串>
⇒<数字串> <数字>
⇒<数字串> 6
⇒<数字>6
⇒26

非规范推导:
<无符号整数>⇒<数字串>
⇒<数字串> <数字>
⇒<数字> <数字>
⇒2<数字>
⇒26

若推导:编译原理笔记:高级语言及其语法描述
中的每一步直接推导都是规范的,则把该推导称为规范的,且记作:编译原理笔记:高级语言及其语法描述
规范推导所得的句型称为规范句型(最右句型)。

注意:给定一个文法G,就能从结构上唯一的确定其语言。给定语言L,可以确定其文法,但是不是唯一的。

(5)等价文法:G1,G2是两个不同的文法,如果L(G1)=L(G2) ,则称 G1和G2为等价文法。

(6)递归产生式和递归文法:
编译原理笔记:高级语言及其语法描述
递归文法:含有递归产生式的文法称为递归文法; 含直接递归产生式的文法称为直接递归文法。

(7)语法树(Parse Tree):语法结构的图形表示。语法树展示了例句的语法结构,同时也体现了其推到的过程。
编译原理笔记:高级语言及其语法描述
(8)短语、直接短语和句柄
编译原理笔记:高级语言及其语法描述
①短语:
编译原理笔记:高级语言及其语法描述
②直接(简单)短语
编译原理笔记:高级语言及其语法描述
③句型的最左直接短语称为该句型的句柄
Eg:
<无符号整数>⇒<数字串>⇒<数字串><数字>⇒<数字串>6⇒<数字>6
所以:
6是句型<数字>6的相对于<数字>的短语;
<数字>是句型<数字>6的相对于<数字串>的直接短语,并且是句柄;
<数字>6是句型<数字>6的相对于<数字串>的短语。
(9)文法的二义性:若文法中存在一个句子对应两棵不同的语法树,则称此文法是二义性文法。
Eg:编译原理笔记:高级语言及其语法描述
(10)句子和句型
编译原理笔记:高级语言及其语法描述
Eg:
编译原理笔记:高级语言及其语法描述
<数字串><数字>、<数字>9 都是文法G的一个句型 56、39 都是文法G的一个句子。

课后作业

相关文章: