编译原理课设—正规式r与正规文法G相互转换的程序设计.doc

编译原理课设—正规式r与正规文法G相互转换的程序设计.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理课设—正规式r与正规文法G相互转换的程序设计

目录 1、 引言 1 2、 设计原理 1 2.1、正规文法的定义 1 2.2、正规式的定义 2 2.3、正规文法和正规式的等价性 2 2.3.1、将正规式转换成正规文法 2 2.3.2、将正规文法转换成正规式 3 3、 总体算法设计 3 3.1、正规式转化为正规文法的算法 3 3.2、正规文法转化为正规式的算法 4 4、 详细设计 5 4.1、算法涉及到的各个结构体 5 4.1.1、每个文法规则右部非终结符前面的终结符串 5 4.1.2、每个文法规则右部结构体 6 4.1.3、每条文法规则结构体 6 4.1.4、文法规则结合 6 4.2、主要函数 7 4.2.1、创建文法的一条规则 7 4.2.2、合并规则右部相同非终结符的项 8 4.2.3、规则的替换 9 5、调试与运行结果 10 5.1、 调试方法记录 10 5.2 、实验结果记录 10 5.2.1、第一组测试数据 10 5.2.2、第二组测试数据 11 5.2.3、第三组测试数据 12 6、 课程设计总结与心得体会 13 7、参考文献 13 正规式r与正规文法G相互转换的程序设计 摘要:在计算机编译理论中,正规式、正规文法、自动机的理论以及它们之间的 等价性问题是编译理论的等价基础,其中正规式和自动机,正规文法和自动机之间的等价性问题,已经得到了比较圆满的解决。本文主要讨论正规式和正规文法之间相互转换的方法。 关键字:编译原理 正规式 正规文法 相互转换 引言 程序设计语言中的单词是基本语法符号。单词符号的语法可以用有效的工具加以描述,并且基于这类描述工具,可以建立词法分析技术,进而可以建立词法分析程序的自动构造方法。多数程序设计语言的单词的语法都能用正规文法或3型文法来描述。正规式也称正则表达式,是表示正规集的工具,也是我们用以描述单词符号的方便工具。因此,熟练掌握正规文法、正规式以及它们之间的相互转化是非常必要的。 设计原理 2.1、正规文法的定义 正规文法是左线性文法和右线性文法的统称。它们都是Chomsky分类下的3型文法。由正规文法产生的语言称为正规集。 1、右线性文法   设G[S]=(VN,VT,P,S),若P中的产生或均有如下的形式: A→aB或A→a(A∈VN,a∈VT)则称G为右线性文法。 例如,文法G1[S]=({S,A,B},{a,b},P1,S) 其中P1={S→aA,A→aA,A→bB,A→b,B→bB,B→b}为一右线性文法 2.1.2、左线性文法   若一个文法G[S]=(VN,VT,P,S)中的产生式均有如下的形式: A→Ba或A→a(A,B∈VN,a∈VT)则称G为左线性文法。 例如,文法G2[S]=({S,A},{a,b},P2,S)   其中P2={S→Sb,S→Ab,A→Aa,A→a}为一左线性文法 [注:]由于左线性文法和文法是等价的,本次课程设计为简化需要,只考虑右线性文法正规式的转换。 正规式是描述程序语言单词的表达式,对于字母∑,其上的正规式及其表示的正规集可以递归定义如下   ① ε是一个正规式,它表示集合L(ε)={ε}。   ② 若a是∑上的字符,则a是一个正则式,它所表示的正规集L(a)={a}。   ③ 若正规式r和s分别表示正规集L(r)=L(s),则   (a)r|s是正规式,表示集合L(r)∪L(s);   (b)r·s是正规式,表示集合L(r)L(s);   (c)r*是正规式,表示集合(L(r))*;   (d)(r)是正规式,表示集合L(r)。 仅由有限次地使用上述三个步骤定义的表达式才是∑上的正规式。 运算符“|”、“·”、“*”分别称为“或”、“连接”和“闭包”。在正规式的书写中,连接运算符“·”可省略。运算符的优先级从高到低顺序排列为:“*”、“·”、“|”。 文法产生式正规式.1.1、每个文法规则右部非终结符前面的终结符串 .1.2、每个文法规则右部结构体 .1.3、每条文法规则结构体 .1.4、文法规则结合 .2.1、创建文法的一条规则.2.2、合并规则右部相同非终结符的项.2.3、规则的替换用A→→abA|cdC 中的A,替换后为S→abaB|abcD|cdC HeadG * replaceG(HeadG *head1,HeadG *head2) //用head2规则替换head1中含有head2左部的项 while(th1!=NULL th1-VNA!=head2-VNA)//找到head1中有head2左部得项 { if (th1!=head1-nextg) preth1=preth1-nextg; th1=th1-nextg; } if(th1!=NULL)//找到了 while(ta1!=NULL)//串接起来 { wh

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档