第2章 高级语言及其语法描述 2.1 程序语言的定义 2.2 高级语言的一般特征 2.3 程序语言的语法描述.

Slides:



Advertisements
Similar presentations
2.8 函数的微分 1 微分的定义 2 微分的几何意义 3 微分公式与微分运算法则 4 微分在近似计算中的应用.
Advertisements

2.6 隐函数微分法 第二章 第二章 二、高阶导数 一、隐式定义的函数 三、可微函数的有理幂. 一、隐函数的导数 若由方程 可确定 y 是 x 的函数, 由 表示的函数, 称为显函数. 例如, 可确定显函数 可确定 y 是 x 的函数, 但此隐函数不能显化. 函数为隐函数. 则称此 隐函数求导方法.
练一练: 在数轴上画出表示下列各数的点, 并指出这些点相互间的关系: -6 , 6 , -3 , 3 , -1.5, 1.5.
复习: :对任意的x∈A,都有x∈B。 集合A与集合B间的关系 A(B) A B :存在x0∈A,但x0∈B。 A B A B.
圆的一般方程 (x-a)2 +(y-b)2=r2 x2+y2+Dx+Ey+F=0 Ax2+Bxy+Cy2+Dx+Ey+ F=0.
第五章 二次型. 第五章 二次型 知识点1---二次型及其矩阵表示 二次型的基本概念 1. 线性变换与合同矩阵 2.
编 译 原 理 指导教师:杨建国 二零一零年三月.
§1 线性空间的定义与性质 ★线性空间的定义 ★线性空间的性质 ★线性空间的子空间 线性空间是线性代数的高等部分,是代数学
常用逻辑用语复习课 李娟.
第二章 高级语言及其文法 School of Computer Science & Technology
“08高考化学学业水平(必修科目)测试的命题和教学对策研究”
第三节 格林公式及其应用(2) 一、曲线积分与路径无关的定义 二、曲线积分与路径无关的条件 三、二元函数的全微分的求积 四、小结.
2-7、函数的微分 教学要求 教学要点.
初中数学八年级下册 (苏科版) 10.4 探索三角形 相似的条件(2).
编译原理与技术 --文法和分析 2018/9/17 《编译原理与技术》讲义.
第二章 矩阵(matrix) 第8次课.
语法分析在编译程序中的逻辑位置 语 法 分 析 表 处 理 源 程 序 词 法 分 析 语 义 分 析 中 间 代 码 生 成 中 间 代
第二章 高级语言及其语法描述 常用的高级语言 FORTRAN 数值计算 COBOL 事务处理 PASCAL 结构程序设计
管理信息结构SMI.
元素替换法 ——行列式按行(列)展开(推论)
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第3章 文法和语言.
§2 求导法则 2.1 求导数的四则运算法则 下面分三部分加以证明, 并同时给出相应的推论和例题 .
第一章 函数 函数 — 研究对象—第一章 分析基础 极限 — 研究方法—第二章 连续 — 研究桥梁—第二章.
第二、三章习题讲解
第二章 Java语言基础.
2.3 正则表达式 主要内容: 1.正则表达式和正则集; 2.正则表达式和有限自动机的相互转化。.
基于规则抽取的 时间表达式识别.
《编译原理与技术》 期末复习 计算机科学与技术学院 郑启龙 李 诚 25/12/2018.
第三章 语法分析 自顶向下语法分析思想 语法分析方法的分类: 自顶向下语法分析方法(Top-Down) ,亦称面向目标的分析方法;
一个RDF数据自然语言生成器的设计与实现
第4章 非线性规划 4.5 约束最优化方法 2019/4/6 山东大学 软件学院.
第一章 函数与极限.
数列.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
编译原理总结-1 第3~5章.
文法等价变换 文法的等价 对文法G1和G2,若有:L(G1)=L(G2),则称文法G1和G2等价, 记作:G1=G2. 文法等价变换
§4 命题演算的形式证明 一个数学系统通常由一些描述系统特有性质的陈述句所确定,这些陈述句称为假设,
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
复习.
自底向上的语法分析 4.5.
第四章 文法和语言 本章目的 为语言的语法描述寻求工具
第4章 Excel电子表格制作软件 4.4 函数(一).
正切函数的图象和性质 周期函数定义: 一般地,对于函数 (x),如果存在一个非零常数T,使得当x取定义域内的每一个值时,都有
定理21.9(可满足性定理)设A是P(Y)的协调子集,则存在P(Y)的解释域U和项解释,使得赋值函数v(A){1}。
第九节 赋值运算符和赋值表达式.
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
了解介词.
1.2 子集、补集、全集习题课.
1.设A和B是集合,证明:A=B当且仅当A∩B=A∪B
第三章 函数的微分学 第二节 导数的四则运算法则 一、导数的四则运算 二、偏导数的求法.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
2.2矩阵的代数运算.
上杭二中 曾庆华 上杭二中 曾庆华 上杭二中 曾庆华.
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
2.2直接证明(一) 分析法 综合法.
S + Vt. + O (主语+谓语+宾语 句型).
§2 方阵的特征值与特征向量.
2.3.运用公式法 1 —平方差公式.
主讲教师 欧阳丹彤 吉林大学计算机科学与技术学院
美丽的旋转.
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
C 程序设计 吉林大学软件教研室.
第三节 数量积 向量积 混合积 一、向量的数量积 二、向量的向量积 三、向量的混合积 四、小结 思考题.
编译原理实践 6.程序设计语言PL/0.
最小生成树 最优二叉树.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
成本會計 在決策中的功能 第四課 1.
Presentation transcript:

第2章 高级语言及其语法描述 2.1 程序语言的定义 2.2 高级语言的一般特征 2.3 程序语言的语法描述

2.1 程序语言的语法和语义 1 语法 任何语言均可看作一个集合。这个集合中的每个元素都是在一定符号集 (字母表)上的一个符号串。 对于自然语言来说,它们是定义在某个字母表上的句子的集合。 对于程序语言来说,它们也是定义在某个字母表上的句子的集合。这里 的句子,就是一个源程序。 词法规则 单词符号是语言中具有独立意义的最基本单位。语言的单词符号是由词法 规则所确定的,即词法规则规定了单词符号的形成规则。 语法规则 上下文无关文法

“我是大学生”。是汉语的一个句子 用语法来描述: 〈句子〉∷=〈主语〉〈谓语〉 〈主语〉∷=〈代词〉|〈名词〉 〈代词〉∷=我|你|他 〈名词〉∷=王明|大学生|工人|英语 〈谓语〉∷=〈动词〉〈直接宾语〉 〈动词〉∷=是|学习 〈直接宾语〉∷=〈代词〉|〈名词〉

2 语义 定义程序的意义。 没有公认的形式系统描述语义。

3 高级语言的分类 强制式语言 (Imperative Language) / 过程式语言 FORTRAN , C, Pascal 3 高级语言的分类 强制式语言 (Imperative Language) / 过程式语言 FORTRAN , C, Pascal 应用式语言(Applicative Language) / 函数式语言 LISP 基于规则的语言(Rule-based Language) Prolog 面向对象语言(Object-oriented Language)

2.3 程序语言的语法描述 一、字母表和符号串 字母表:符号的非空有限集合 例:={a,b,c} 符号:字母表中的元素 例: a,b,c 符号串:符号的有穷序列 例:a, aa, ac, abc,.. 空符号串:无任何符号的符号串(ε) 符号串集合:由符号串构成的集合。

二、符号串和符号串集合的运算 1.符号串相等:若x、y是集合上的两个符号串,则x=y iff(当且仅当)组成x的每一个符号和组成y的每一个符号依次相等。 2.符号串的长度:x为符号串,其长度|x|等于组成该符 号串的符号个数。 例: x=STV , |x|=3

3.符号串的连接:若x、y是定义在Σ上的符号串,且x=XY,y=YX,则x和y的连接 xy=XYYX也是Σ上的符号串。 注意:一般xy≠yx,但εx=xε 4. 符号串集合的乘积运算:令A、B为符号串集合,定义 AB={ xy |x∈A,y∈B} A={u,v},B={m,n}, AB={um,un,vm,vn} 因为εx=xε=x,所以{ε}A={ε}A=A {ac,ad,bc,bd} 因为εx=xε=x,所以{ε}A={ε}A=A 例:A={a,b},B={c,d}, AB= ?

5. 符号串集合的幂运算:有符号串集合A,定义 A0 ={ε}, A1=A, A2=AA, A3=AAA, …… …… An=An-1A=AAn-1 ,n>0 6.符号串集合的闭包运算:设A是符号串集合,定义 A+= A1 ∪ A2 ∪ A3 ∪……∪ An ∪…… 称为集合A的正则闭包。 A*= A0 ∪A+ 称为集合A的闭包。 例:A={x,y} A+=? A*= ? {x,y, xx,xy,yx,yy , xxx,xxy,xyx,xyy, ……} A1 A2 A3 {ε, x,y, xx,xy,yx,yy , xxx,xxy,xyx,xyy, ……} A0 A1 A2 A3

为什么对符号、符号串、符号串集合以及它们的运算感兴趣? 若A为某语言的基本字符集 A={a,b,……z,0,1,……,9, +,-,×,_/, ( , ), =……} B为单词集 B ={begin, end, if, then,else,for,……,<标识符>,<常量>,……} 则B  A* 。 语言的句子是定义在B上的符号串。 若令C为句子集合,则C  B * , 程序 C

三 文法的直观理解 1. 文法:文法是描述语言的语法结构的形式规则(即语法规则) 所谓上下文无关文法是这样一种文法,它所定义的语法范畴 三 文法的直观理解 1. 文法:文法是描述语言的语法结构的形式规则(即语法规则) 所谓上下文无关文法是这样一种文法,它所定义的语法范畴 (或语法单位)是完全独立于这种范畴可能出现的环境的。 例:有一句子:“我是大学生” 。这是一个在语法、语义上都正确定句子,该句子的结构(称为语法结构)是由它的语法决定的 。在本例中它为“主谓结构”。 如何定义句子的合法性? 有穷语言 无穷语言

2.语法规则:我们通过建立一组规则(产生式),来描述句子 的语法结构。规定用“::=”表示“由……组成”。 <句子>::=<主语><谓语> <主语>::=<代词>|<名词> <代词> ::=你|我|他 <名词>::= 王民|大学生|工人|英语 <谓语>::=<动词><直接宾语> <动词>::=是|学习 <直接宾语>::=<代词>|<名词>

由产生式推导句子:有了一组产生式之后,可以按照一定的 方式用它们去推导或产生句子。 推导方法:从一个要识别的符号开始推导,即用相应产生式 的右部来替代产生式的左部,每次仅用一条产生式去进行推导。 <句子> => <主语><谓语> <主语><谓语> => <代词><谓语> …… …… 这种推导一直进行下去,直到所有带< >的符号都由终结符号替代为止。

<句子> => <主语><谓语> 推导方法:从一个要识别的符号 开始推导,即用相应产生式的 右部来替代产生式的左部,每 次仅用一条产生式去进行推导。 <句子>::=<主语><谓语> <主语>::=<代词>|<名词> <代词> ::=你|我|他 <名词>::= 王民|大学生|工人|英语 <谓语>::=<动词><直接宾语> <动词>::=是|学习 <直接宾语>::=<代词>|<名词> <句子> => <主语><谓语> => < 代词><谓语> => 我<谓语> =>我<动词><直接宾语> =>我是<直接宾语> =>我是<名词> =>我是大学生

例:有一英语句子:The big elephant ate the peanut. <句子>::=<主语><谓语> <主语>::=<冠词><形容词><名词> <冠词> ::=the <形容词>::=big <名词>::=elephant <谓语>::=<动词><宾语> <动词>::=ate <宾语>::=<冠词><名词> <名词> ::=peanut

<句子> => <主语><谓语> <句子>::=<主语><谓语> <主语>::=<冠词><形容词><名词> <冠词> ::=the <形容词>::=big <名词>::=elephant | peanut <谓语>::=<动词><宾语> <动词>::=ate <宾语>::=<冠词><名词> <句子> => <主语><谓语> => <冠词><形容词><名词><谓语> => the <形容词><名词><谓语> => the big <名词> <谓语> => the big elephant <谓语> => the big elephant <动词><宾语> => the big elephant ate <宾语> => the big elephant ate <冠词><名词> => the big elephant ate the <名词> => the big elephant ate the peanut

上述推导可写成<句子> => the big elephant ate the peanut + 说明: (1) 有若干语法成分同时存在时,我们总是从最左的语法成 分进行推导,这称之为最左推导,类似的有最右推导(一般推 导)。 (2) 从一组产生式可推出不同的句子,如以上产生式还可推 出“大象吃象”、“大花生吃象”、“大花生吃花生”等句子, 它们 在语法上都正确,但在语义上都不正确。 所谓文法是在形式上对句子结构的定义与描述,而未 涉及语义问题。

4.语法树:我们用语法树来描述一个句子的语法结构。 语法成分(在形式 语言中又称“非终 结符”) <句子> <主语> <谓语> <冠词> <形容词> <名词> <动词> <宾语> The big elephant ate the peanut 单词符号(在形 式语言中又称 “终结符号”)

四 文法和语言的形式定义 V=VN∪VT 称为文法的字汇表 1文法的定义 定义1: 文法G=(VN,VT,P,Z) VN :非终结符号集 Z:开始符号(识别符号) Z∈VN 产生式:U :: x U ∈VN, x∈V* 其中: A.产生式:产生式是一个有序对(U, x), 通常写为: U :: x 或U  x; | U| = 1 |x|  0 B.非终结符号:出现在产生式的左部,且能推出符号或符号串的 那些符号。其全体构成非终结符号集,记为VN 。 C.终结符号:不出现在产生式的左部,且不能推出符号或符号串 的那些符号。其全体构成终结符号集,记为VT 。

例:无符号整数的文法: G[<无符号整数>]=(VN,VT,P,Z) VN={<无符号整数>,<数字串>, <数字>} VT = {0,1,2,3,……9} P = {<无符号整数> → <数字串> ; <数字串> → <数字串> <数字> ; <数字串> → <数字> ; <数字> →0; <数字> →1; ………… <数字> →9; } Z = <无符号整数>;

几点说明: 产生式左边符号构成集合VN,且 Z ∈VN 文法的BNF表示 有些产生式具有相同的左部,可以合在一起 例、<无符号整数> → <数字串> ; <数字串> → <数字串> <数字> | <数字> ; <数字> →0 | 1 | 2 | 3 | …… | 9 给定一个 文法,实际只需给出产生式集合,并指定识别符号 例、 G[<无符号整数>] <无符号整数> → <数字串> ; <数字串> → <数字串> <数字> | <数字> ; <数字> →0 | 1 | 2 | 3 | …… | 9

2 推导与归约 x和y是符号串,若使用一次产生式可以从x变换出y,则称x直接推导出y(或者说y是x的直接推导),记为x y。

当符号串已没有非终结符号时,推导就必须终止。因为 终结符不可能出现在产生式左部,所以将在产生式左部出现的 符号称为非终结符号。 例如:G[N]: N → ND | D D → 0| 1| 2| 3| 4| 5| 6| 7| 8| 9 N ND NDD ND9 N09 D09 109 (6) ==> (1) (3) (4) (2) (5) 当符号串已没有非终结符号时,推导就必须终止。因为 终结符不可能出现在产生式左部,所以将在产生式左部出现的 符号称为非终结符号。

+推导:x和y是符号串,若使用若干次产生式可以从x变换出y,则称x推导出y(或者说y是x的推导),记为x y。 定义3: +推导:x和y是符号串,若使用若干次产生式可以从x变换出y,则称x推导出y(或者说y是x的推导),记为x y。 + 或者说:若有直接推导序列:x=U0==>U1==>U2==>……==>Un=y,则 x==>y 。 + 例: N ND NDD ND9 N09 D09 109 (6) ==> (1) (3) (4) (2) (5) + N==>109 则: 定义4: *推导:x和y是符号串,若使用0次或若干次产生式可以从x变换出y,则称x*推导出y(或者说y是x的*推导),记为x y。 * * N==>109 * N==>N 则:

定义5: 最右推导:若符号串α中有两个以上的非终结符时,对推导的每一步坚持把α中的最右非终结符进行替换,称为最右推导。 最左推导:若符号串α中有两个以上的非终结符时,对推导的每一步坚持把α中的最左非终结符进行替换,称为最左推导。 规范推导=最右推导 定义6: 推导的逆过程称之为归约。 例:x ==>y,可称为x直接推导出y,也可称为y直接归约出x。 + x ==>y ,可称为x推导出y,也可称为y归约出x。

(2)句子:x是句子  Z  x, 且x∈VT*; (3)语言:L(G[Z])={x| Z  x, x∈VT* }; 3 语言的形式定义 定义7:文法G[Z] (1)句型:x是句型  Z  x,且x∈V*; (2)句子:x是句子  Z  x, 且x∈VT*; (3)语言:L(G[Z])={x| Z  x, x∈VT* }; + * 文法G[Z]所产生的 所有句子的集合

例:{abna|n≥1},构造其文法 G1[Z]: Z→aBa, B→b|bB G2[Z]: Z→aBa, B→b|Bb 定义8. G和G'是两个不同的文法,若 L(G) = L(G') , 则G和G’为等价文法。

编译感兴趣的问题是: 给定终极符x, 文法G, 求x  L(G) ? G y x 算法1 x  L(G) ? 算法2 停机 n 出错处理

4 文法分类 形式语言:用文法和自动机所描述的没有语义的语言。 语言定义: L(G[Z])={x| Z==>x , x∈VT*, } + 文法定义:乔姆斯基将所有文法都定义为一个四元组: G=(VN,VT,P,Z) VN:非终结符号集 VT:终结符号集 P:产生式或规则的集合 Z:开始符号(识别符号) Z∈VN

文法和语言分类:0型、1型、2型、3型 这几类文法的差别在于对产生式施加不同的限制。 定义9:0型文法: P: u → v 其中u∈V+,v∈V* 0型文法称为短语结构文法。产生式的左部和右部都可 以是符号串,一个短语可以产生另一个短语。 0型语言:L0 这种语言可以用图灵机(Turing)接受.

定义10: 1型文法: P: xUy → xuy 其中 U∈VN, x、y、u∈V* 称为上下文敏感或上下文有关。也即只有在x、y这样的 上下文中才能把U改写为u 1型语言:L1 这种语言可以由一种线性界限自动机接受.

定义11:2型文法: P: U → u 其中 U∈VN, u∈V* 称为上下文无关文法。也即把U改写为u时,不必考虑上下文。 注意:2型文法与BNF表示相等价。 2型语言:L1 这种语言可以由下推自动机接受.

定义12: 3型文法: (左线性) P: U → T 或 U → wT 其中 U、w∈VN T∈VT (右线性) P: U → T 或 U → Tw 其中 U、w∈VN T∈VT 3型文法称为正则文法。它是对2型文法进行进一步限制。 3型语言:L3 又称正则语言、正则集合 这种语言可以由有穷自动机接受.

根据上述讨论,L0 L1 L2 L3 0型文法可以产生L0、L1、L2、L3,但2型文法只能产生L2,不能产生L1。 ∪

5 语法树与二义性文法 Z U V a 1 推导与语法树 语法树:句子结构的图示表示法,通常表示成一棵倒立的树。 结点:符号 b c d 5 语法树与二义性文法 1 推导与语法树 语法树:句子结构的图示表示法,通常表示成一棵倒立的树。 结点:符号 根结点:识别符号 中间结点:非终结符 叶结点:终结符或非终结符 边:表示结点间的派生关系。

句型的推导及语法树的生成(自顶向下) 给定G[Z],句型w: 可建立推导序列,Z==>w 可建立语法树,以Z为树根结点,每步推导生成语法树的一枝,最终可生成句型的语法树。 * 注意一个重要事实:文法所能产生的句子,可以 用不同的推导原则(使用产生式顺序不同)将其 推导出来。语法树的生成规律不同,但最终生成的语 法树形状完全相同。某些文法有此性质,而某些文法 不具此性质。

树与推导 句型推导过程 句型语法树的生长过程 由推导构造语法树 从识别符号开始,自左向右建立推导序列。 由根结点开始,自上而下建立语法树。 1 从识别符号开始,自左向右建立推导序列。 由根结点开始,自上而下建立语法树。

2 文法的二义性 定义 若对于一个文法的某一句子存在两棵不同的语法树, 则该文法是二义性文法,否则是无二义性文法。 换而言之,无二义性文法的句子只有一棵语法树,尽管推导过程可以不同。 下面举一个二义性文法的例子: G[E]: E:= E+E | E*E | (E) | i VN ={E} VT ={ +, * , ( , ) , i }

对于句子S=i+i * i ∈ L(G[E] ),存在不同的规范推导: (1) E==>E+E==>E+E*E ==>E+E*i ==>E+i*i ==> i+i * i (2) E==> E*E ==> E*i ==> E+E*I ==> E+i*i ==> i+i * i 这两种不同的推导对应了两种不同的语法树 E + * i E * + i

定义 若一个文法的某句子存在两个不同的规范推导,则 该文法是二义性的,否则是无二义性的。

若文法是二义性的,则在编译时就会产生不确定性,遗憾的是在理论上已经证明:文法的二义性是不可判定的,即不可能构造出一个算法,通过有限步骤来判定任一文法是否有二义性。 现在的解决办法是:提出一些限制条件,称为无二义性的充分条件,当文法满足这些条件时,就可以判定文法是无二义性的。 由于无二义性文法比较简单,我们也可以采用另一种解决办法:即不改变二义性文法,而是确定一种编译算法,使该算法满足无二义性充分条件。

E::= E+E | E*E | (E) | i E::= E+T | T T ::= T*F | F F ::= (E) | i 例:算术表达式的文法 E::= E+T | T T ::= T*F | F F ::= (E) | i E::= E+E | E*E | (E) | i 例:Pascal 条件语句的文法 <条件语句>::= If <布尔表达式>then<语句> | If <布尔表达式> then <语句> else <语句> <语句> ::= <条件语句> | <非条件语句> |…….

小 结 掌握符号串、文法、句型、句子和语言的定义 几个重要概念:语法树、文法的二义性等。 了解文法分类。

本 章 作 业 P36:6#,7#,8#, 9#