《编译原理》3章 词法分析与有穷自动机.ppt

《编译原理》3章 词法分析与有穷自动机

S.P;第3章 词法分析;3.1 词法分析的任务 3.2 词法分析程序的输出形式 3.3 词法分析程序的设计与实现 3.4 正规式与有穷自动机 3.5 词法分析程序的自动生成工具LEX 3.6 PL/0编译程序的词法分析;(1)分析和识别单词及属性, 包括识别语言的关键字、标识符、常数、 运算符等; (2)跳过各种分隔符,如空格,回车,制表符等; (3)删除注释; (4)进行词法检查,报告所发现的错误; (5)建立符号表。;main( )/*ADD*/ {int x=10,y=20,sum; sum=x+y; };实现方案:基本上有两种;单词的种类 (1)关键字:if、for、while (2)标识符: (3) 常数: (4) 运算符:+、-、* (5)分界符:, 、;、(、);词法分析程序的输出形式-----二元式;3.3 词法分析程序的设计与实现;结点代表状态,用圆圈表示,为非终结符 有向弧表示状态转移 弧上的标记表示在射出弧的结点状态下可能出现的输入字符,为终结符;【例3.1】某语言的标识符可使用以下正规文法G[S]来定义:;2.由正规文法构造状态图;(2)对于左线性文法 步骤1 增加结点S为初态; 步骤2 将每个非终结符号设置为一个对应的状态; 步骤3 对于A→a,引一条从S到A的弧,弧上标记为a;而对于A→Ba,引一条从B到A的弧,弧上标记为a。 ;词法规则 状态图 词法分析程序; 标识符 关键字(标识符的子集) 常数 运算符 + * = = 分界符 , ;;(1)根据词法规则写出正规文法;;合并 ① 将初始状态合并为一个唯一的初态; ② 化简调整状态冲突并对冲突状态重新编号; ③ 如有必要,增加出错状态。 ;;(3)将状态图转换成流程图,如图3.5;0;3.5;正规式中的运算符: | -----或(选择) ? ----连接 * 或 { } ---重复 () ----括号;【例3.3】设Σ={a,b};【例3.3】使用正规式来表示例3.2中的相应单词符号。 ;设r,s,t均是正规式,则有以下性质: (1)交换律: r|s= s|r (2)结合律: r|(s|t)=(r|s)|t (rs)t=r(st) (3)分配律: (r|s)t=rt|st (4)同一律: εr= rε= r ;1.正规文法?正规式;【例3.5】G[S]: S→aA|a A→dA|d;2.正规式?正规文法;【例3.6】求正规式(a|b)(a|b|0|1)*对应的正规文法;下面是用正规式表示的变量声明: ( int | float ) id (, id )* 请改用上下文无关文法表示,也就是写一个上下文无关文法,它和该正规式等价。 ;3.4.3 有穷自动机;有穷自动机是一种数学模型,具有离散的输入与输出,系统可处于有穷状态中的任何一个 它能准确地识别正规集,即识别正规文法所定义的语言和正规式所表示的集合 引入有穷自动机这个理论,正是为词法分析程序的自动构造寻找特殊的方法和工具;;1.确定的有穷自动机(DFA) M=(Σ, Q, f,S, Z) ;状态转移函数f可用一矩阵来表示: 输入 字符 状态 a b 0 1 2 1 3 2 2 1 3 3 3 3;一个DFA也可以用一状态转换图表示:;换言之:若存在一条初始状态到某一终止状态的路径,且这条路径上所有弧的标记符号连接成符号串α,则称α为DFA M(接受)识别。; δ(0,abaab) =δ(1,baab) =δ(2,aab) =δ(1,ab) =δ(3,b) =3 (接受);f是一个多值函数,是从Q×Σ*到Q的子集的映射: f:Q×Σ→Q’ 其中Q’是Q的幂集,即Q中所有子集组成的集合。 ;例: NFA N=({a,b,c} ,{1,2,3,4}, f,{1},{4}) 符号 状态 ε a

文档评论(0)

1亿VIP精品文档

相关文档