天津大学编译原理讲义-Part3词法分析3
天津大学编译原理讲义-Part3词法分析1资料

一张转换图只包含有限个状态(即有限个结点),其 中一个被人为是初态,而且实际上至少要有一个终态 (用双圆圈表示)。 一个状态转换图可用于识别(或接收)一定的字符串。
状态转换图的实现
ch:字符变量,存放最新读进的源程序字符 strToken:字符数组,存放构成单词符号的字符串 GetChar:子程序过程,将下一个输入字符读到ch中,搜索指 示器前移一个字符位置。 GetBC:子程序过程,检查ch中的字符是否为空白。如果是, 则调用GetChar,直至ch中进入一个非空白字符。 Concat:子程序过程,将ch中的字符连接到strToken之后。 IsLetter和IsDigit: 布尔函数过程,它们分别判断ch中的字符 是否为字母和数字。 Reserve:整型函数过程,对strToken中的字符串查找保留字 表,若它是一个保留字则返回它的编码,否则返回0值。 Retract:子程序过程,将搜索指示器回调一个字符位置,将 ch置为空白字符
词法分析是编译过程中的一个阶段,在语法分析前进行 。也 可以和语法分析结合在一起作为一遍,由语法分析程序调用 词法分析程序来获得当前单词供语法分析使用。
源程序
词法分析器
记号
取下一 个记号
语法分析器
符号表
词法分析程序的功能
词法分析:根据词法规则识别及组合单词,进行词法检查 对数字常数完成数字字符串到二进制数值的转换 删去空格字符和注释
1.DO99K = 1, 10 2.IF(5.EQ.M) I = 10 3.DO99K = 1.10 4.IF(5.EQ.M) = 55 其中,语句1和2是DO和IF语句,他们都是以基本字开 头的,语句3和4是赋值语句,都是以用户自定义的标 识符开头的。
编译原理课件-词法分析

號等記號的文法
—— 正規文法
語法:借助於記號來描述語言的結構的文法
—— 上下文無關文法
21/76
二、記號的文法
識別字 常數
–整數 –無符號數
運算符 分界符 關鍵字
22/76
Wensheng Li BUPT @ 2008
識別字
識別字定義為“由字母打頭的、由字母或數字組成
的符號串”
正規運算式?
描述識別字集合的正規運算式:
9/76
Wensheng Li BUPT @ 2008
3.2 詞法分析程式的輸入與輸出
一、詞法分析程序的實現方法 二、設置緩衝區的必要性 三、配對緩衝區 四、詞法分析程序的輸出
10/76
Wensheng Li BUPT @ 2008
一、詞法分析程式的實現方法
利用詞法分析程序自動生成器
–從基於正規運算式的規範說明自動生成詞法分析程序。 –生成器提供用於根源程式字元流讀入和緩沖的若干副程
記號的屬性
詞法分析程式在識別出一個記號後,要把與之有關 的資訊作為它的屬性保留下來。 記號影響語法分析的決策,屬性影響記號的翻譯。 在詞法分析階段,對記號只能確定一種屬性
–識別字:單詞在符號表中入口的指針 –常數:它所表示的值 –關鍵字:(一符一種、或一類一種) –運算符:(一符一種、或一類一種) –分界符:(一符一種、或一類一種)
4/76
Wensheng Li BUPT @ 2008
3.1 詞法分析程式與語法分析程式的關係
詞法分析程式與語法分析程式之間的三種關係
–詞法分析程式作為獨立的一遍 –詞法分析程序作為語法分析程序的副程式 –詞法分析程序與語法分析程序作為協同程式
分離詞法分析程序的好處
编译原理课堂讲义解析

编译第3次课:内容:1、上下文无关文法与语言的关系(第二章内容)2、词法分析器设计及其与语法分析器的关系(第三章内容)3、状态转换图与词法分析器实现(第三章内容,看同学前面知识的接受程度与进度再决定该部分内容是否本节课上讲)重点:1、上下文无关文法与语言的关系2、语法树与二义性3、状态转换图过程:1、开场,本节知识在编译中的作用2、中间与学生交互(语言中句子的个数?如何达到无穷个的?语法的二义及其原因?)3、总结:1)指出本节的重点1、上下文无关文法与语言的关系;2、语法树与二义性;3、状态转换图;2)下节内容简介编译第4次课:内容:1、词法分析器设计的相关问题(第三章)2、状态转换图与词法分析器实现(第三章)3、正规式与正规集(第三章)4、确定有限自动机重点:1、状态转换图及其在词法分析中的作用2、正规式与正规集(特殊字集的重要性)3、确定有限自动机(状态转换图)与正规式的关系过程:1、开场,高级程序设计语言-文法-编辑程序的关系2、中间与学生交互1)词法分析与语法分析的关系2)词法分析器中存在的问题?3)提示:自动机(状态转换图)、正规式、3型文法都是语言(字集-单词)的描述3、总结:1)指出本节的重点2)下节内容简介编译第5次课:内容:1、非确定有限自动机-》确定有限自动机(确定化与化简)2、正规文法与有限自动机3、正规式与有限自动机重点:1、非确定有限自动机的确定化与化简2、正规式与有限自动机过程:1、开场,非确定有限自动机与确定有限自动机的区别2、各个步骤中发挥学生的主动思考(提问)提问1:在DFA化简时,开始设置的两个可区别的子集如何确定?3、总结:1)指出本节的重点2)下节内容简介编译第6次课:内容:1、确定有限自动机的与化简2、语法分析器功能及分析方法的引出3、LL(1)分析法重点:1、LL(1)分析法过程:1、开场,确定有限自动机的化简(状态等价与可区分性的含义)提问1:如何形成初始的两个子集的划分,即如何区分全部状态中的可区别性2、语法分析器功能及分析方法的引出(提问)强调:语法分析器的输入与输出,即与词法分析及后续处理的关系。
【考研计算机专业课】天津大学 编译原理讲义 第三章文法和语言

L(G)={anbncn|n≥1}
2型文法也称上下文无关文法,用于描述多数 现今程序设计语言的语法结构。
例,文法G =({S},{a,b},P,S) P定义为: S→aSb|ab L(G)={anbn|n≥1}
3型文法也称正则文法,由其产生的语言叫做 正规语言,即正规集。
例,文法G =({S},{0,1},P,S) P定义为: S→0S|1S|0|1 L(G)=(0|1)*
例,文法G的产生式为: E→T|E+T T→F|T*F F→(E)|i E E+T E+F E+i3 T+i3 T*F+i3 T*i2+i3 F*i2*,i3 ,i1*i2 ,i1*i2+ i3都是句型i1*i2+i3的短语。
i1 ,i2,i3 均为直接短语。
i1是句柄。
i2+i3是否句型i1*i2+i3的短语?
+ 不是,尽管有E i2+i3,但不存在从E到i1*E的推导。
3.1.2 文法的Chomsky分类
0型文法(短语结构文法):
设文法G=(VN,VT,P,S) ,其产生式形式为: α →β α ∈V*VNV* ,β ∈V*
如果对 0 型文法分别加上以下的第 i 条限制,则我们 就得到 i 型文法。 1.G的任何产生式α →β 均满足|α |<|β |,S→ε除外;
1. 文法是描述语言的语法结构的形式规则(即 语法规则)。
文法是一个四元组: G[S]=(VN,VT,P,S) VN为非终极符集合; VT为终极符集合; VN∩VT =Ф ; 一般令V= VN∪VT ,V中的符号称为文法符号; P为产生式集合; P中的每个产生式写为: α →β ;α ∈V*VNV*, β ∈V* S为开始符号。
编译原理第3篇

Σ上的“数”的全体。
第23页
编译原理
词法分析
若两个正规式所表示的正规集相同,则认为二者等价。两个 等价的正规式U和V记为
U =V。 例如,b(ab)*=(ba)*b,
(a|b)*=(a*b*)*。 令U、V和W均为正规式,显而易见,下列关系普遍成立: (1)U|V=V|U(交换律); (2) U|(V | W)=(U | V) | W(结合律) (3) U(VW)=(UV)W(结合律); (4) U(V | W)=UV | UW(分配律)
转换图是一张有限方向图。在状态转换图中,结点 代表状态,用圆圈表示。状态之间用箭弧连结。箭 弧上的标记(字符)代表在射出结点(即箭弧始结 点)状态下可能出现的输入字符或字符类。
一张转换图只包含有限个状态(即有限个结点), 其中有一个被认为是初态,而且实际上至少要有一 个终态(用双圈表示)。一个状态转换图可用于识 别(或接受)一定的字符串。
(1)假定NFA M=<S,∑,δ,s0,F>,对M的状态转换图进行以下 改造:
①引进新的初态结点X和终态结点Y, X,Y∈S, 从X到s0中任意状态结点连一条ε箭弧,从F中
任意状态结点连一条ε箭弧到Y。
②对M的状态转换图进一步施行图3.7所示的替换.其中k是 新引入的状态。重复这种分裂过程直至状态转换图中的每条 箭弧上的标记或为ε,或为∑中的单个字母。将最终得到的 NFA记为M ' ,
即δ: S × ∑*→2的s次方 (4) S0⊆S,是一个非空初态集; (5) F⊆S,是一个终态集(可空)。
第31页
编译原理
词法分析
一个含有m个状态和n个输入字符的NFA可表示成 如下的状态转换图:
该图含有m个状态结点,每个结点可射出若干条箭 弧与别的结点相连接,每条弧用∑*中的一个字(不 一定要不同的字而且可以是空字ε)作标记(称为 输入字),整张图至少含有一个初态结点以及若干 个(可以是0个)终态结点。某些结点既可以是初 态结点也可以是终态结点。
编译原理第三版 第三章 词法分析

超前搜索
例:FORTRAN语言中关键字的识别: DO99K=1,10 识别DO为关键字要搜 DO99K=1.10 索到“,” FORTRAN语言中常数的识别:
5.EQ.M, 5.E08
识别5为常数要搜索到Q
2、状态转换图
大多数程序设计语言中单词符号的词法规则可 以用正规文法描述。如: <标识符>→ 字母|<标识符>字母|<标识符>数字 <整数>→数字|<整数>数字 <运算符>→+|-|×|÷„ <界符>→; |, |( | )|„
#
3.3 正规表达式与有限自动机
目的: 形式化地描述词法规则和词法分析程序 词法分析程序的自动生成 主要内容 正规式与正规集 确定有限自动机 (DFA) 非确定有限自动机(NFA) 正规式与有限自动机的等价性 确定有限自动机的化简
正规文法
多数程序设计语言单词的语法都能用正规文法 (3型文法)描述 正规文法回顾 文法的任一产生式α→β的形式都为
单词符号的种类
(3) 常数 常数的类型一般有整型、实型、布 尔型、字符型等。
(4) 运算符 如 +,-,*,/等,对具体语言个 数是确定的。 (5) 界符 如 , ;()等,对具体语言个数是 确定的。
单词符号的表示形式
词法分析器所输出的单词符号常常表示成如下的 二元式:<单词种别,单词符号的属性值> 单词种别:由语法分析阶段使用的抽象符号。如: 用整数编码。 最简单的编码方案为一类一码,种别编码可设为: 1,2,3,4,5。 另一种编码方案(如本教材中): 标识符:列为一种,用一个整数编码表示; 常数:按类型分种编码; 关键字、运算符、界符:采用一字一种编码。
编译原理chapter3 词法分析
一 设计一个奇偶校验器
DFA是由集合,序列和函数定义的数学模型, 它对于 上的w,判定是可接受的还是不可 接受的。例如,设计一个DFA m ,奇偶校验 器,首先,w是由0,1组成的字符串,因此, 1. ={0 ,1}且w在一条输入带上。
0 1 0 1 1$
读头
精品文档
11
2. 状态集:它记忆已读入w子串的状态,m是 奇偶校验器,它应该记住,初始序列是奇数 个1还是偶数个1。因此,m有even和odd两个 状态. 3 .even为开始状态。
词法分析器
‘while’,‘i’,‘<>’,‘j’, ‘do’, ‘if’,‘i’,‘>’,‘j’,‘then’, 'i', ':=’ , 'i', ’-’ , 'j', 'else', 'j', ':=', 'j', '-', ‘i'
精品文档
4
词类和属性
computator n. Calcculating machine.
3.1.1 词法分析程序的功能 源程序 单词词序法列分析器
3.1.2 单词的词类和属性 (词类符号,单词的属性值)
3.1.3 词法分析程序作为一个独立子程序 (1)语法分析程序的子程序; (2)组 织成一遍扫描。
精品文档
3
While i<>j do if i>j then i:=i-j else j:=j-I
三 一个DFA有三种表示:
(1)象上面,用转换函数;
精品文档
14
转移矩阵
状态转换图
a
b
0
1
2
a
编译原理-第三章词法分析-3.4词法单元的识别
编译原理-第三章词法分析-3.4词法单元的识别词法单元的识别
词法单元的识别
⼀、状态转换图
定义
状态转换图描绘词法分析器被语法分析器调⽤时,词法分析器为返回下⼀个记号所做的动作
表⽰
圆圈:表⽰状态,开始状态由⼀条没有出发节点、标号为“开始”的边指明
双层圆圈:表⽰接受状态,表⽰已识别⼀个记号;若返回,则返回⼀个词法单元和其相关属性
有向边:表⽰从⼀个状态到另⼀状态
每条边的标号包含⼀个或多个符号,若离开状态s的某边上标号为other,则它表⽰离开s的其他边所指⽰的字符以外的任意字符*:表⽰输⼊指针必须回退的转态
⽰例
1.关系符转换图
2.标识符和保留字的转换图
3.空⽩符的状态转换图
4.⽆符号数的状态转换图
⼆、基于状态转换图的词法分析器的体系结构
上述实例的合并转换图
参考——慕课-苏州⼤学。
《编译原理》第三章 词法分析器
有限自动机模型
Finite Automata (FA):
一个有限自动机的模型如下所示:
... ... head finite control input tape
输入带被分成一个个的小单元来装输入符号, 其右边是无限延伸的。 有限状态控制器由有限个状态组成,并根据读 入字符将当前状态转换成下一个状态
有限自动机与正规式的等价性证明
• 证明一: 对于∑上的NFA M,我们来构造∑上的正规式r, 使得L(r)=L(M)。 首先,我们将状态图的概念拓广,令每条弧可 用正规式作标记。并在M的转换图上加进两个 结点,一个为X,一个为Y。从X用ε弧连接到Y, 从而形成一个新的NFA,记为M’,它只有一个初 态X和一个终态Y。显然L(M)=L(M’)。即,这 两个NFA是等价的。 现在来逐步消去M’中的所有结点,直至只剩下 X和Y为止。
有限自动机接受的语言
The language accepted by FA
一个FA 能够接受的语言定义如下:
• 对于一个 DFA M, 可接受的语言表示为: L(M)={ x | x∈Σ* and f(s0 , x)∈Z} • 对于一个 NFA M, 其接受的语言为: L(M)={x | x∈Σ*and f(s0, x)∩Z≠Φ} • 两个 FA M and M’ 是等价的当且仅当 L(M) = L(M’)
M
M
a
M
假设对于任意 正规式 r1 and r2, 如果 |r1| < k 而 且 |r2| < k, 那么就于一个NFA M1 and M2 对应 于r1 和 r2. 所以对于任意 RE r, |r| = k, 我们有:
• 这个自动机所接受的语言是所有被3整除 以后余数为2的二0, q1, q2, q3}, {0, 1}, f1, q0 {q3} ) . 其中f1如下所示 :
编译原理课件(三)词法分析
为了讨论词法分析器的自动生成,还需要将转换
图的概念形式化。
为此我们引入:正规式,正规集,自动机等概
念。
3.3.1 正规式与正规集
1. ε 和都是 Σ 上的正规式,他们所表示的正规集分别为{ε } 和 ; 2. 任何a Σ , a是Σ 上的一个正规式,它所表示的正规集为{a};
若M的初态结点同时又是终态结点,则为空字可以为M
所识别。DFA M所能识别的字的全体记为L(M).
DFA及其所识别的语言描述
[M=({0,1,2,3},{a,b},,0,{3}) 其中: (0,a)=1; (0,b)=2 (1,a)=3; (1,b)=2 (2,a)=1; (2,b)=3 (3,a)=3; (3,b)=3 问:L(M)=?
输入字符 状态 s1 s2 s1 s2 s2 s1 a b
DFA的(确定的)状态转换图表示
• 假定DFA M 含有m个状态n个输入字符,
– 那么,这张图含有m个状态结点,
– 每个结点顶多有n条箭弧射出和别的结点相连接,
– 每条箭弧用上的一个不同字符作标记, – 整张图含有唯一的初态和若干个(可以是0个)终 态结点。
留字i表进行。
1 DO99K=1,10 2 IF(5.EQ.M)I=10 3 DO99K=1.10 4 IF(5)=55
标识符的识别
• 标识符的定义:字母开头,字母和数字的 组合 • 标识符后通常有界符
常数的识别
• 算术常数有时需要超前搜索
– 5.EQ. M
• 逻辑常数:.T. , .F., 有界符,容易识 别
3.1.2 词法分析器的构造方式-词法分析器 作为独立子程序
词法分析器安排成语法分析的子程序。 好处在于:编译器结构清晰。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
词法分析器
输出端是Token流
将tokens和终态联系在一起。 当到达一个终态时,就将相应的token输出。
最长匹配
当到达一个终态时,要查看是否存在更进一步的转换。 如果不存在,则返回当前终态对应的token
优先级规则
当终态对应多个token的时候,有可能会有相同的最长 匹配的token 将这个终结状态和最高优先级的token联系起来。
Part3词法分析
授课:胡静
内容提要
词法分析器的作用 词法分析程序的设计与实现——状态图 词法分析程序的自动生成——X工作过程
首先,使用LEX语言写一个定义词法分析器的源程序 lex.l。 然后利用LEX编译器将lex.l转换成C语言程序lex.yy.c。 它包括从lex.l的正规表达式构造的状态转换图的表格 形式以及使用该表格识别词素的标准子程序。 与lex.l中正规表达式相关联的动作是C代码段,这些 动作可以直接加入到lex.yy.c中。 最后,lex.yy.c通过C编译器生成目标程序,这个目标 程序就是把输入流转换成记号序列的词法分析器。
LEX工作过程
Lex源程序
Lex编译程序
词法分析器L
词素
输入缓冲区
FA模拟器
词法分析器
转换表
LEX的实现
单个正则表达式
词法分析器
处理多样的REs
将所有的正则表达式的NFA联合在一起,变成一个单 一的有限自动机
LEX二义性的处理方法
RE’s + 优先匹配原则 + 最长匹配规则 = 词法分析器的定义
LEX举例
LEX举例
NFA确定化 给出状态转换表
LEX程序举例
词法分析总结
DFA最小化
Thanks for your time! Questions & Answers