编译原理-第二章解读

合集下载

编译原理第二章小结

编译原理第二章小结

本章小结
N→SE | E S→SD | D E→0 | 2 | 4 | 6 | 8 | 10 D→0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
分析 因为对文法的 句子10有两棵不同的 语法树与之对应,所 以该文法是二义的
N E 10
N SE D0 1
本章小结
N→SE | E
从句型的语法树求
短语: (A((SaA)(b))) ((SaA)(b)) (SaA)
( S a A )( b )
直接短语:(SaA)、(b) 句柄:(SaA)
(b)
本章小结
4.文法二义性的判断 一个文法存在某个句子对应两棵不
同的语法树或对应两个不同的最左(最 右)推导,则该文法是二义性的。
本章小结
本章小结
例2 已知文法G[S]:S→(AS) | (b) A→(SaA) | (a)
试找出符号串(a)和(A((SaA)(b)))的短语﹑ 直接短语和句柄(如果有的话)。 分析 ∵ S(AS)((a)S)/ (a)
∴ 符号串(a))不是文法的句型,因此 它没有短语﹑直接短语和句柄。
本章小结
L2={ab,abb,abbb, …aabb,aabbb,aabbbb, … aaabbb, aabbbb,…}
P2: S→AB A→aAb | ab B→bB |ε
本章小结
例2. 给出语言 L1={a2n+1|n≥0} 的文法 分析 根据语言句子的结构特征,设计出相 应规则
L1={a, aaa, aaaaa, aaaaaaa, aaaaaaaaa,…}
第二章小结
本章重点介绍了语言的语法结构的形式描述、 语法树以及文法的二义性, 主要内容有:

编译原理第二章 文法和语言资料

编译原理第二章  文法和语言资料

第二章文法和语言本章讲述目前广泛使用的上下文无关文法。

即用上下文无关文法作为程序设计语言语法的描述工具。

阐明语法的一个工具是文法。

本章将介绍文法和语言的概念。

本章重点:上下文无关文法及其句型分析中的有关问题。

第一节文法的直观概念当我们表述一种语言时,无非是说明这种语言的句子,如果语言只含有有穷多个句子,则只需列出句子的有穷集就行了,但对于有无穷句子的语言来讲,存在着如何给出它的有穷表示的问题。

以自然语言为例,人们无法列出全部句子,但是人们可以给出一些规则,用这些规则来说明(或者定义)句子的组成结构,比如:“我是大学生”。

是汉语的一个句子。

汉语句子可以是由主语后随谓语而成,构成谓语的是动词和直接宾语,我们采用EBNF来表示这种句子的构成规则:〈句子〉∷=〈主语〉〈谓语〉〈主语〉∷=〈代词〉|〈名词〉〈代词〉∷=我|你|他〈名词〉∷=王明|大学生|工人|英语〈谓语〉∷=〈动词〉〈直接宾语〉〈动词〉∷=是|学习〈直接宾语〉∷=〈代词〉|〈名词〉“我是大学生”的构成符合上述规则,而“我大学生是”不符合上述规则,我们说它不是句子。

这些规则成为我们判别句子结构合法与否的依据。

一旦有了一组规则以后,我们可以按照如下方式用它们去推导或产生句子。

我们开始去找∷=左端的带有〈句子〉的规则并把它表示成∷=右端的符号串,这个动作表示成:〈句子〉⇒〈主语〉〈谓语〉,然后在得到的串〈主语〉〈谓语〉中,选取〈主语〉或〈谓语〉,再用相应的规则∷=右端代替之。

比如,选取了〈主语〉,并采用规则〈主语〉∷=〈代词〉,那么得到:〈主语〉〈谓语〉⇒〈代词〉〈谓语〉,重复做下去,我们得到句子:“我是大学生”的全部动作过程是:〈句子〉⇒〈主语〉〈谓语〉⇒〈代词〉〈谓语〉⇒我〈谓语〉⇒我〈动词〉〈直接宾语〉⇒我是〈直接宾语〉⇒我是〈名词〉⇒我是大学生符号⇒的含义是,使用一条规则,代替⇒左边的某个符号,产生⇒右端的符号串。

显然,按照上述办法,不仅生成“我是大学生”这样的句子,还可以生成“王明是大学生”,“王明学习英语”,“我学习英语”,“他学习英语”,“你是工人”,“你学习王明”等几十个句子。

编译原理―第2章 前后文无关文法和语言课件

编译原理―第2章 前后文无关文法和语言课件
?一组终结符号不能被替换的符号单词符号?一组非终结符号能够被替换为终结符号或非终结符号语法单位?一个开始符号从这个符号开始替换最大语法单位程序?一组产生式替换规则把左边的字符串替换为右边的字符串222文法和语言的形式定义19?关键思路?从文法的开始符号出发?反复使用产生式对非终结符进行替换展开?直到整个字符串中不再包含非终结符?这时得到了这个文法的一个句子一个程序?这个过程称为推导222文法和语言的形式定义20?文法的形式定义?产生式规则?产生式是一个有序对通常写作或
符号串集合的方幂: 设A是符号串的集合,则称Ai为符号串集A的 方幂,其中i是非负整数。具体定义如下:
A0 ={ε} A1 =A, A2=AA Ak= AA......A(k个)
11
2.2.1 基本概念和术语
集合的闭包
闭包
集合Σ的闭包Σ*定义如下:Σ*=Σ0∪Σ1∪Σ2∪Σ3∪… 例:设有字母表Σ={0,1},则
从文法的开始符号出发 反复使用产生式,对非终结符进行替换(展开) 直到整个字符串中不再包含非终结符 这时,得到了这个文法的一个句子(一个程序) 这个过程称为推导
19
2.2.2 文法和语言的形式定义
文法的形式定义
产生式(规则)
产生式是一个有序对(α, β),通常写作α→β(或α::=β)
Σ*=Σ0∪Σ1∪Σ2∪…={ε,0,1,00,01,10,11,000,…},即Σ*表示Σ上所有有穷长 的串的集合。
正闭包
Σ+ = Σ1∪Σ2∪Σ3∪…称为Σ的正闭包。 +表示上的除ε外的所有用穷长串的集合。
Σ*= Σ0∪Σ+ Σ+=ΣΣ*=Σ*Σ
12
2.2.1 基本概念和术语
例题 定义标识符是由字母开头、后跟字母或数字的任意组合构成, 设A={a,b,…,z},B={0,1,…,9},将所有标识符的集合用A和B的运算 来表示。

《编译原理》第2章 编译基础-形式语言与有穷自动机

《编译原理》第2章 编译基础-形式语言与有穷自动机
整理课件
句型、推导
G[E]: E→E+T|T T→T*F|F F→(E)|a
对于句子a+a*a 有不同 的推导
EE+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a
EE+T E+T*F E+T*a E+F*a E+a*a T+a*a F+a*a a+a*a
整理课件
例:奇偶测试器
0
0
1
q0
q1

1
自动机:M=(Q,∑ ,δ ,q0,Z)
Q={ q0, q1}
∑ ={0,1}
q0=q0 Z={q1}
整理课件
映射函数:
δ( q0,0)= q0 0
0
δ( q0,1)= q1
1
δ( q1,0)= q1 q0
q1
δ( q1,1)= q0
1
例:000110001
整理课件
第四节 正规文法与有穷自动机 1、正规文法 产生的语言的推导 例:文法 G=(VN,VT,P,S) 其中: VN={A,B,C}
VT={a,b,c} S=A P:A →aB A →aA
B →bB B →bC C →cC C →c
整理课件
A=>aA=>aaA=>…..=>aa…aB =>aa…abB=>aa…abb…bC =>aa…abb…bcC=> aa…abb…bccC => aa…abb…bcc…c
D→ε
Aa→bD
自然语言属于上下文有关文法
整理课件
文法的类型

编译原理chapter2 语言的基本知识

编译原理chapter2  语言的基本知识
10
2.2 文法和语言的定义
2 . 2 . 1 引子 2 . 2 . 2 文法和语言的定义 一. 文法和语言的定义 二. 推导 三. 语言 四. 最左推导和最右推导 五。短语,直接短语,句柄
11
引子 分析:The grey wolf will eat the goat
〈句子〉
〈主语〉
〈谓语〉
〈冠词〉〈形容词〉〈名词〉 〈动词〉 〈直接宾语〉
7
三.符号串的运算 1.连接:设x和y是符号串,它们的连接 xy 是把y的符号写在x的符号之后得到的符号 串。例如,x=ba,y=nana,xy=banana.
2.方幂:x0= ; x1=x; x2=xx;
……;xn=xn-1x;
例如, x=ba,
x1= ba, x2=baba, x3=bababa,…...
3
2.1.1 字母表
字母表是符号的非空有穷集合。任何程序
语言都有自己的字母表,例如:
1.计算机语言:由符号“0”和“1”组成
的字
母表,∑={0,1}
2. ASCII字符集;
3. Pascal字母表为: ∑=
{AZ, az, 09, +, -, *, /, <, =, >,
:, ',', ; ,., , (, ), {, }, [, ] }
直接宾语 , 助动词 ,动词原形 } 语法规则集P={句子 主语谓语,……} 开始符号S= 句子
14
句子根据规则推导出来
句子主语 谓语
冠词 形容词 名词 谓语
the 形容词 名词 谓语
the grey名词 谓语
the grey wolf 谓语
the grey wolf 动词 直接宾语

编译原理 第二章

编译原理 第二章

词法分析程序GETSYM将完成下列任务:
(1) 滤空格:空格在词法分析时是一种不可缺少的界符,而在语法分析时则是 无用的,所以必须滤掉。 (2) 识别保留字:设有一张保留字表。对每个字母打头的字母、数字字符串要 查此表。若查着则为保留字,将对应的类别放在SYM中。如IF对应值IFSYM,THEN 对应值为THENSYM。若查不着,则认为是用户定义的标识符。 (3) 识别标识符:对用户定义的标识符将IDENT放在SYM中,标识符本身的值放 在ID中。 (4) 拼数:当所取单词是数字时,将数的类别NUMBER放在SYM中,数值本身的值 存放在NUM中。 (5) 拼复合词:对两个字符组成的算符如:>=、∶=、<= 等单词,识别后将 类别送SYM中。 (6) 输出源程序:为边读入字符边输出(可输出在文件中)。
(1) 说明部分的分析
对每个过程(包括主程序,看成一个主过程)的说明对象造名字表TABLE,填写登录 所在的层次、标识符的属性和分配的相对位置。登录信息是调用ENTER过程完成的。 说明部分的处理对主程序看成是第0层过程,主程序定义的过程为第1层,随着嵌套 的深度增加而层次数加大。PL/0允许最大层次为3。 所造名字表放在全程量一维数组TABLE表中。TX为索引表的指针,表中的每个元素 为记录型数据。LEV给出层次,DX给出每层局部量当前已分配到的相对位置,可称地址 指示器,每说明完一个变量后DX指示器加1。 例如:
2.5 PL/0编译程序的目标代码结构和代码生成
编译程序的目标代码是在分析程序体时生成的,在处理说明部分时并不 生成目标代码,而当分析程序体中的每个语句时,当语法正确则调用目标代 码生成过程以生成与PL/0语句等价功能的目标代码,直到编译正常结束。 PL/0编译程序所产生的目标代码是一个假想栈式计算机的汇编语言,可 称为类PCODE指令代码,它不依赖任何具体计算机,其指令集极为简单,指令 格式也很单纯,其格式如下:

编译原理第二章解析

编译原理第二章解析

0 jmp 0 8 1 jmp 0 2 2 int 0 3 3 lod 1 3 4 lit 0 10 5 opr 0 2 6 sto 1 4 7 opr 0 0 8 int 0 5 9 opr 0 16 10 sto 0 3 11 cal 0 2 12 lod 0 4 13 opr 0 14 14 opr 0 15 15 opr 0 0

8
PL/0的语法描述图
分程序 程序
分程序
const
ident
=
number
.
,
;
var

ident
;
;
procedure
ident
;
分程序
语句
9
PL/0语言文法的EBNF表示

BNF与EBNF的介绍
BNF引入的符号: < > 用左右尖括号括起来的语法成分为非终结符 ∷= ‘定义为’ | ‘或’ EBNF引入的符号: { } 表示花括号内的语法成分可重复内的成分优先
3
认识源语言PL/0与目标代码 pcode及它们之间的映射
何为PL/0语言? 认识目标代码pcode PL/0程序到pcode代码的映射

4
何为PL/0语言?
PL/0语言:PASCAL语言的子集,功能简单, 结构清晰,可读性强,具备了一般高级语 言的必备部分 PL/0程序示例 PL/0的非形式描述 PL/0的语法描述图 PL/0语言文法的EBNF表示
0 l l l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
a a a a a a a 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

编译原理教程 第二章

编译原理教程 第二章
图2-2 不同输入字符的状态转换
第2章 词法分析
状态(即结点)数是有限的,其中必有一初始状态以及若 干终止状态,终止状态(终态)的结点用双圈表示以区别于其 它状态。图2-3给出了用于识别标识符、无符号整数、无符 号数的状态转换图,其初始状态均用0状态表示。
第2章 词法分析
(a) 标识符;(b) 无符号整数;(c) 无符号数
第2章 词法分析
对于给定的字母表Σ,正规式和正规集的递归定义如下: (1) ε和Ф都是Σ上的正规式,它们所表示的正规集分别 为{ε}和Ф。 (2) 对任一个a∈Σ,a是Σ上的一个正规式,它所表示的 正规集为{a}。 (3) 如果R和S是Σ上的正规式,它们所表示的正规集分 别为L(R) 和L(S),则: ① R∣S是Σ上的正规式,它所表示的正规集为 L(R)∪L(S); ② R·S是Σ上的正规式,它所表示的正规集为L(R) L(S); ③ (R)*是Σ上的正规式,它所表示的正规集为(L(R))*; ④ R也是Σ上的正规式,它所表示的正规集为L(R)。
第2章 词法分析
为了理解正规式与正规集的含义,我们以程序语言中的 标识符为例予以说明。程序语言中使用的标识符是一个以字 母开头的字母数字串,如果字母用letter表示,数字用digit表 示,则标识符可表示为
letter (letter∣digit)* 其中,letter与 (letter∣digit)*的并置表示两者的连接;括号 中的“∣”表示letter或digit两者选一;“ * ”表示零次或多 次引用由“ * ”标记的表达式;(letter∣digit)*是letter∣digit 的零次或多次并置,即表示一长度为0、1、2、…的字母数 字串;letter (letter∣digit)*表示以字母开头的字母数字串, 也即标识符集。letter (letter∣digit)*就是表示标识符的正规 式,而标识符集就是这个正规式所表示的正规集。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TJNU-COCIE 高级语言的定义

高级程序设计语言必须要有明确而确切的定义 语言的初等成分的实际含义是什么? 如何有意义的使用它们? 怎样以有意义的方式组合它们? 程序设计教材中描述的是语言成分的意义,不能 作为构造编译程序的基础

2018/12/28

2018/12/28
TJNU-COCIE-WJW
11
例:有些语言,语法单位形式相同,但语义规则不同 ALGOL语言和FORTRAN语言中,符号串: X+F(X)+Y 表示表达式 不同的语义规则: ALGOL:左结合计算其值 FORTRAN:交换律和结合律(左右结合) ALGOL:允许F(X)产生副作用,也就是说F(X)可以 改变X或Y的值 FORTRAN:不允许F(X)产生副作用,也就是说F(X) 不能改变X或Y的值
2018/12/28 TJNU-COCIE-WJW 12
四、程序的层次结构
程序
子程序 或 语句 表达式 数据引用 算符 函数调用 分程序
字母表中的字母
2018/12/28 TJNU-COCIE-WJW 13
2.2 高级语言的一般特征

高级程序设计语言最基本的、共有的技术特征
2018/12/28
TJNU-COCIE-WJW
TJNU-COCIE-WJW
4

一个程序语言:一个记号系统 程序语言的定义: 语法 语义 语用 有关程序设计技术和语言成分的使用方法,它 使语言的基本概念和语言的外界(数学概念或 计算机的对象和操作)联系起来。(如:面向 对象OO中的类、对象和事物的联系)
我们重点讨论语法和语义
2018/12/28
TJNU-COCIE-WJW
5
一、几个概念
1.字母表:一个有限的字符集 例子:C语言的字母表 (1)大小写英文字母 a ~ z, A ~ Z (2)数字 0 ~ 9 (3)特殊字符 空格 ! # % ^(上箭头) & * _(下划线) + - = ~ < > / \ | . , : ; ? ‘ “ () [] {} 任何语言:一定字符集(字母表)上的字符串(有 限序列) 6 TJNU-COCIE-WJW 2018/12/28




注重程序表示的功能,而不是程序的一个个 语句执行时状态的变化 程序的开发过程是从前面已有的函数出发构 造出更复杂的函数,对初始数据集进行操作 直至最终的函数,算出结果 语法形式: 函数n(…函数2(函数1(数据))…) LISP、ML
2018/12/28
TJNU-COCIE-WJW
16
基于规则的语言:
编译原理
第二章 高级语言定义和一般特征
王金伟 计算机与信息工程学院 天津师范大学
2018/12/28
TJNU-COCIE-WJW
1
第二章 高级语言的定义和一般特征
2.1 高级语言的定义 2.2 高级语言的一般特征

2018/12/28
TJNU-COCIE-WJW
2
世界上已有上千种高级语言

例如: FORTRAN:面向科学计算 COBAL:面向事务处理 PROLOG,LISP:人工智能 Ada:大型嵌入式实时处理 SNOBAL:符号处理 C++,C:通用 …
2.单词符号(单词) 是语言中具有独立意义的最基本结构 一般包括:常数,标识符,基本字、算符和界符 例:0.5是一个实型常数 :=是赋值符号 3.语法单位 由单词符号构成的更大的结构 一般包括:表达式、语句、分程序({ }内的一段 程序,如for的循环体, switch 后面)、函数(有 返回值)、过程(一系列操作)、程序
2018/12/28 TJNU-COCIE-WJW 7
二、语法
语法:一组规则,用这组规则可以产生合式的程序 (形式上正确的程序) 词法规则 语法 语法规则 词法规则:合法单词的构成规则,也就是如 何从字母表中选择字符构成一个合法单词。
语法规则:合法程序的构成规则,也就是如 何把各个单词符号组成更大的语法单位(语 句、程序)


通过检查某一个条件是否被满足来决定相应 的动作是否被执行 语法形式: 条件1-〉动作1 条件2-〉动作2 … 条件n-〉动作n
Prolog、YACC等

2018/12/28
TJNU-COCIE-WJW
17
面向对象的语言:


封装性:类和对象 继承性:子类 多态性:操作符或子程序名能够根据参数和 结果的数据类型,引用某些函数定义中的任 意一个。 Smalltalk、C++、Ada等
14
一、高级语言的分类
强制式语言:过程式语言


2018/12/28
命令驱动、面向语句(由一系列语句构成) 每个语句的执行引起若干存储单元的值的改 变,其语法形式通常为: 语句1; 语句2; … 语句n; C、FORTRAN、Pascal、Ada等
TJNU-COCIE-WJW 15
应用式语言:函数式语言
2018/12/28
TJNU-COCIE-WJW
9
例2:字符串:0.5*X1+C
单词符号(单词):由词法规则所确定 常数:0.5 标识符:X1和C 算符:*、+
语法范畴(语法单位):由语法规则所确定 表达式: 0.5*X1+C
2018/12/28
TJNU-COCIE-WJW
10
三、语义

语义 构成程序的各个语法成分的意义 定义了单词符号和语法单位的意义 一个语言的语义: 是指这样一组规则,使用它可以定义一个程序的 意义。这些规则称为语义规则
2018/12/28 TJNU-COCIE-WJW 8
例 1: C语言的标识符的定义是一个词法规则 标识符是是字母(A~Z,a~z)、数字(0~9)、下 划线( _ )组成的字符串,并且其第一个字符必须 是字母或下划线 常数的定义… 算符的定义…
C语言的表达式的定义是一个语法规则 表达式是由运算符和操作数组成的式子 语句的定义…
2018/12/28
TJNU-COCIE-WJW
18
二、数据类型与操作
一个数据类型通常包括以下三种要素 (1)用于区别这种类型的数据对象的属性 (2)这种类型的数据对象可以具有的值 (3)可以作用于这种类型的数据对象的操作 例:unsigned int a; 属性:a是一个32位无符号整型数 值的范围:0~232-1 操作:+、-、*、/
相关文档
最新文档