- 1、本文档共71页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 4.5 正规文法与有穷自动机的等价性 一、定理: 对于给定的正规文法G[R],可以直接构造一个NFA M,使得L(M)=L( R )。 对于?上的任一个NFA M ,可以直接构造正规文法G[R] ,使得L( R )=L( M )。 二、把给定的正规文法G[R]转换为一个?上的NFA M构造规则: 设G[R]=(VN,VT,P,R), NFA M=( K,Σ,f,S,Z) 1.令 Σ= VT; 2. K = VN,S = R;即对G中的每个非终结符生成M的一个状态(不妨取相同的名字,G的开始符号是M的初态; 3.增加一个新状态Z,作为NFA M 的终态,Z∈K; 4.对G中的形如A?tB(其中t为终结符或ε;A和B为非终结符)的产生式,构造M的一个转换函数f(A,t)=B; 5.对G中的形如A?t(其中t为终结符或ε;A和B为非终结符)的产生式,构造M的一个转换函数f(A,t)=Z; 三、把给定的?上的NFA M转换为一个正规文法G[R]的构造规则: 设NFA M=( K,Σ,f,S,Z),G[R]=(VN,VT,P,R), 1.令 VT = Σ ; 2.令VN = K即对G中的每个非终结符生成M的一个状态(不妨取相同的名字,G的开始符号是M的初态; 3.令R= S(如果M有多个初态,应先拓广自动机,引入新初态x); 4.对M 的终态Z增加一个产生式: Z?ε; 5.对M的每一个转换函数f(A,t)=B可写G的一个产生式A?tB(其中t为终结符或ε;A和B为非终结符); 4.6 词法分析程序的构造 词法分析总控程序见图4.15。 界限符 运算符 字母 数字 结束符“#” 开始 到输入流中读下一字符?Char Char是什么? 初始化 标识符和关键字 词法分析子程序 无符号数 词法分析子程序 运算符 词法分析子程序 界限符 词法分析子程序 结束 图4.15 词法分析总控程序 若对自动机的每一个状态赋予一定的功能,并把其边上的符号视为转移条件,那么自动机就成为一个程序了。以无符号数为例:给定语法图4.16,构造自动机见图4.17。 d . d e + - d 图4.16 无符号数的语法图 图4.17 无符号数的自动机 1 2 3 4 5 6 0 ? d d + ε - . e d . other other d d other e d 7 e 开始 0?N,P,j; 1?e 数字?d; N*10+d?N 是数字? Y 读字符?char N Y N 整型量 标记?C1 是’-’吗? 读字符?char 是’e’吗? 是’-’吗? -1?e 读字符?char Y N Y N 读字符?char 是数字? Y 数字?d;N*10+d?N; j+1?j 是数字? Y 读字符?char ERROR N N 实型量 标记?C1 是数字? Y 数字?d; P*10+d?P Y 读字符?char ERROR N N 实型量标记?C1 N*10e*P-j? t 结束 Y N 整数部分 小数部分 是’.’吗? 是数字? 指数部分 N 图4.18 无符号数词法分析流程图 最后可得到无符号数分析算法流图见图4.18。 实验一 实验题目:单词的词法分析程序设计 实验要求:请同学们务必在实验开始前完成程序的编写工作,到实验室时主要是进行调试和验收,不参加验收则不能获得实验成绩。 作业 72页练习:2题,4题 * * * * * * * * * * * * * * * * * * * * * * * * 显然,一个DFA可用一个矩阵表示,该矩阵的行表示状态,列表示输入字符,即k行a列的 矩阵元素表示f(k,a)的值。这个矩阵称为状态转换矩阵。 状态 a b ? S U V U Q V V U Q - Q Q Q 对于上例,有如下状态转换矩阵 注意:在状态矩阵中 初态结点的旁边标以 ? ; 终态结点旁边标 — 。 f(S,a)=U f(V,a)=U f(S,b)=V f(V,b)=Q f(U,a)=Q f(Q,a)=Q f(U,b)=V f(Q,b)=Q 一个DFA也可表示成一张(确定的)状态转换图。 注意:初态结点的旁边标以? ; 终态结点则用双圈表示。 假定DFA M含有 m个状态和 n个输入字符,那么,这个图含有m个状态结点,每个结点顶多有n条箭弧射出和别的结点相连接,每条箭弧用Σ中的一个不同输
文档评论(0)