560 likes | 702 Views
编译原理. 主 讲:温 璞 责任教师:蒋慧平. 第三讲 有穷自动机 (II) 及 词法分析. 本讲主要内容. 正规文法与有穷自动机 正规表达式与有穷自动机 DFSA 在计算机中的表示 词法分析. 有穷自动机 (II). 正规文法与有穷自动机 正规表达式与有穷自动机 DFSA 在计算机中的表示. 正规文法与有穷自动机. 正规文法: 规则形式 AV 或 A 其中 A, V V N , V T . 由正规文法 G 可以直接构造一个有穷自动机 A ,使 L(A)=L(G). 由正规文法到 FSA 的构造步骤.
E N D
编译原理 主 讲:温 璞 责任教师:蒋慧平
第三讲 有穷自动机(II)及 词法分析
本讲主要内容 • 正规文法与有穷自动机 • 正规表达式与有穷自动机 • DFSA在计算机中的表示 • 词法分析
正规文法与有穷自动机 • 正规表达式与有穷自动机 • DFSA在计算机中的表示
正规文法与有穷自动机 • 正规文法:规则形式AV或A 其中A, V VN, VT. • 由正规文法G可以直接构造一个有穷自动机A,使L(A)=L(G).
由正规文法到FSA的构造步骤 • 令正规文法G的终结符号集VT作为自动机A的字母表; • 文法G的每一个非终结符都作为自动机A的一个状态,文法的开始符号作自动机A的开始状态; • 在自动机A中增加一个新状态Z作为自动机的终止状态; • 对于文法G的形如UaV (a∈ VT ,V VN)的产生式,在自动机A中构造形如t(U,a)=V的映射; • 对于文法G的形如Ua (a∈ VT)的产生式,在自动机A中构造t(U,a)=Z的映射.
例3.10由正规文法构造自动机 字母表={+, -, d},状态Q={S, N, F}
正规文法:规则形式AV或A 其中A, V VN, VT. • 由有穷自动机A可以直接构造一个正规文法G A,使L(G)=L(A).
由FSA到正规文法的构造步骤 • 自动机的每一个状态都作为正规文法的一个非终结符,自动机的开始状态作文法的开始符号;自动机的输入字母表中的所有符号作为正规文法的终结符; • 对于自动机的映射t(U,a)=V(其中,U、V为自动机的状态;a为输入符号),构造文法的一条产生式UaV,U、V为文法的非终结符,a为终结符; • 对于自动机的终止状态Z,在正规文法中增加一条产生式Z
正规文法与有穷自动机 • 正规表达式与有穷自动机 • DFSA在计算机中的表示
正规表达式与有穷自动机 • 正规语言是正规集,正规表达式是描述正规集的一种表示形式 • 正规表达式定义
令∑={a,b}, ∑上的正规表达式和相应的正规集的例子有: 正规表达式 正规集a {a}a|b {a,b}ab{ab}(a|b)(a|b){aa,ab,ba,bb}a*{ε,a,a, ……任意个a的串}(a|b)*{ε,a,b,aa,ab,ba ……所有由a和b组成的串}(a|b)*(aa|bb)(a|b)* {∑*上所有含有两个相继的a或 两个相继的b组成的串}
等价正规集 • 定义3.10 设e1和e2是上的两个正规表达式,若L(e1)=L(e2),则称e1与e2等价,记为e1 = e2 . • 例如: e1= (a|b), e2 = b|a 又如: e1= b|(ab)* ,e2 =(ab)*| b 再如: e1= (a|b)* ,e2 =(a* |b* )* • 程序设计语言的单词符号都能用正规表达式来定义
正规表达式与FSA的对应性 • 上一个符号串集V是正规的,当且仅当存在一个上的确定有穷自动机M,使得 V=L(M).
NDFSA M到正规表达式的转换 • 对NDFSA M进行拓广,新设置一个唯一的开始状态S和一个唯一的终止状态Z,并允许状态转换图弧上可以为正规表达式; • 从S到原来所有的开始状态连接弧,从原来所有的终止状态连接弧到Z; • 利用图3.23的替换规则,逐步消去状态转换图中的节点和有关连线,直到只剩下状态S和Z.
习题3.9 • 构造图3.26所示NDFSA A的正规文法G,使得L(G)=L(A).
正规文法与有穷自动机 • 正规表达式与有穷自动机 • DFSA在计算机中的表示
DFSA在计算机中的表示 • 只要表示映射就可以了 • 矩阵表示法 • 表结构 • 程序表示法
词法分析 • 明确词法分析在编译过程所处的阶段和作用 • 掌握词法分析程序的手工实现方法 • 理解通常的单词分类和构词规则 • 会使用单词的描述和识别机制 • 掌握词法分析程序的自动构造原理
词法分析概述 • 词法分析程序完成的是编译第一阶段的工作 • 词法分析程序主要任务是对源程序进行扫描,从中识别出单词符号 • 词法分析工作可以是独立的一遍,实现源程序的全部词法分析工作 • 也可将词法分析程序设计成一个子程序,每当语法分析程序需要一个单词符号时,则调用该子程序。词法分析程序每得到一次调用,便从源程序字符串中读入一些字符,直到识别出一个单词符号,并把它交给语法分析程序
词法分析程序的主要功能是从字符流的源程序中识别单词符号,它要从左至右逐个字符地扫描源程序词法分析程序的主要功能是从字符流的源程序中识别单词符号,它要从左至右逐个字符地扫描源程序 • 还可完成其它一些任务 • 可以滤掉源程序中的注释和空白(由空格,制表或回车换行字符引起的空白); • 为了使编译程序能将发现的错误信息与源程序的出错位置联系起来,词法分析程序负责记录新读入的字符行的行号,以便行号与出错信息相联; • 再有,在支持宏处理功能的源语言中,可以由词法分析程序完成其预处理等
单词符号 • 单词符号是语言的基本单位,具有独立的意义且不可再分 • 程序设计语言的单词符号可分成下列5种: • 标识符,用来表示各种名字,如常量名、变量名和过程名等 • 保留字,也称关键字,如PASCAL语言中的begin,end,if,while和var等,是标示符的子集 • 整数,如123,38,0等 • 单分界符,如+,-,*,/,(,),;等 • 复合分界符,如**,/*,:=等
状态转换图的实现:使每个状态对应一小段子程序,通过case语句将各段程序连成一个完整的程序状态转换图的实现:使每个状态对应一小段子程序,通过case语句将各段程序连成一个完整的程序 • 一些工作变量和子程序的定义
标识符的处理 • 标识符的处理主要包括 • 语义表示 • 作用域表示 • 符号表构造 • 内存单元分配
类型的机内表示 • 五种类型
数组信息表 • 记录信息表