ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:57.98KB ,
资源ID:6345006      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6345006.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(正规文法转换成正规式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

正规文法转换成正规式.docx

1、正规文法转换成正规式! f诚诃f行璧年级/专业/班:11级计算机类(二)班姓 名: 徐勇兵 学 号: E01114278 实验名称:正规文法转换成正规式实验目的:1.了解并熟悉词法分析中单词的描述工具正规文法和正规式表示单词 的方式及其之间的差异性和等价性。2.利用计算机编程实现正规文法转换成等价的正规式。实验要求:1.正规文法的输入应简便。2.输出的正规式以利用3条转换规则得出为标准。输入:一组产生式所构成的正规文法。输出:对应的等价的正规式。实验原理:1.多数程序设计语言的单词的语法都能用正规文法或3型文法来描述。2.3型文法的特征是P中的每一条规则都有下述形式:A-aB或Aa。 正规文法

2、所描述的是VT上的正规集。3.正规式也称正则表达式,也是表示正规集的工具。也是我们用以描 述单词符号的有效工具。4.正规文法和正规式的等价性:一个正规语言可以由正规文法定义, 也可以由正规式定义,对任意一个正规文法,存在一个定义同一个 语言的正规式;反之,对每个正规式,存在一个生成同一语言的正 规文法,有些语言很容易用文法描述,有些语言更容易用正规式定 义。5.将正规文法转换成正规式的转换规则有三:(1)A-xB, By 对应 A=xy(2)A-xA, Ay 对应 A二x*y(3)A-x, Ay 对应 A=x|y实验算法:实验算法定义一个函数实现转换正规文法为正规式。函数根据三 个转换规则,首

3、先合并形如BaA,BbA的产生式为B-aA|bA的形 式,其中又包括B=A的形式。然后根据转换规则合并形如Sa,Sb 的产生式为S-a | b的形式。再根据转换规则2的A-xA, Ay对应 A=x*y和规则3的A-x, A-y对应A=x|y将文法产生式变换为等价 的正规式。在规则以外还需要另外一个处理,这个处理可以从书本上的例子 中看到,即将公因子提取出来,如A=aA|dA变换为A=(a|d)Ao算法默认开始符号为S且放在第一个产生式,这样就能根据第一 条产生式最终得到等价的一个开始符号定义的正规式。实验结果: Convert Java Application G:MyEclipse Prot

4、essionaT终结符输出如下非终结符输出如下;A A,产生式输出如下:S-aAS-aA-aAA-dAA-d压缩后的产生式输出如下:S-aAA-aAA-dAA-aA-dA的结果是作d)*(a|d)对于S分布求出结果是3 (a|d)*(a|d)求5的第M步结果是a(a|d)*(a|d)the result is:(a)|a(a|d)*(a|d)import java.util.Vector;import javax.swin gOptionPa ne;class Toolspublic Vector addElements(Vector vs,Vectortemp) for(int i=O;it

5、emp.size();i+)/if(!vs.c on tains(temp.get(i)vs.add(temp.get(i);/forreturn vs;/public Vector addElements(Vector vs,Vectortemp) public Vector protection(Vector vs)Vector newvector二new Vector();for(int i=O;ivs.size();i+)n ewvector.add(vs.get(i);return newvector;public VectorVector doubleprotection(Vect

6、orVector vs) VectorVectorString newvector二new VectorVectorString(); for(int i=O;ivs.size();i+)Vector produce=(Vector)vs.get(i);Vector temp 二new Vector();for(int j=0;jproduce.size();j+)temp.add(String)produce.get(j);/forjn ewvector.add(temp);/for ireturn newvector;/class toolsclass Eleme ntsVector en

7、d=new Vector();/表示终结符Vector noend=new Vector();/表示非终结符 VectorVectorString produce=new VectorVector();/产生式 public void setend()/终结符元素添加while(true)String sOptionPane.showInputDialogfnull/请输入终结符); if(s=null) return;/ifend.add(s);/while(/public void addend()/元素添加 public void setnoend()/非终结符元素添加while(tru

8、e)String sOptionPane.showInputDialogfnull/1 非请输入终结符); if(s=null) return;/ifno end.add(s);/while(/public void addnoend()/public void setproduce()while(true)String sOptionPane.showInputDialogfnull/请输入产生式,隔开”); if(s=二null)return;Vector temp 二new Vector();temp.add(s.split(-)0);temp.add(s.split(-)l);prod

9、uce.add(temp);/while(/public void addproduce()public Vector gete nd()return end;public Vector get noen d() return noend;public VectorVectorString getproduce() return this.produce;public void run()*TEST* *end.addCH); end.addC11); noend.add(,Sn);noend.addCA1);Vector temp=new Vector(); temp.add(llSn);t

10、emp.addCaA);produce.add(temp);*Vector temp4=new Vector();temp4.add(,S11);temp4.add(,aH);produce.add(temp4);/ System.out.pri ntln(”producesize()二 ”+produce.size();Vector templ=new Vector(); tempi.add(,A); tempi.add(,dAH); produce.add(templ);/穴*穴*宣*宣*宣穴*宣*宣穴*穴*穴/Vector temp2=new Vector(); temp2.add(,A

11、);temp2.add(,a);produce.add(temp2);Vector temp3=new Vector();temp3.add(,An);temp3.add(d);produce.add(temp3);/ System.out.pri ntln(”produce.size()=+producesize();/* noend.add(HBH);Vector temp6=new Vector(); temp6.add(,A);temp6.add(,aBH);produce.add(temp6);Vector temp5=new Vector();tempS.add(,BH);temp

12、5.add(d);produce.add(temp5);*/this.setend();/this.setnoe nd();/this.setproduce();public boolean lscontainend(String s)判断某个符号是否是终结符 可以是一个字符也 可是字符串 /*System.out.print(输出终结符“);for(int i=O;iend.size();i+)System.out.print(end.get(i);System.out.pri ntln();System.out. printin(传送过来的需要判断的是+s);*/int length=se

13、ngth();for(int i=O;ilength;i+)String a=H,+s.charAt(i); if(end.contai ns(a)continue;else return false;/forreturn true;/public boolean isRGPcontain(String s)public boolean lsNoENd(String s)/判断某个符号是否是非终结符 String ss=HI,+s.charAt(O);if(! Iscontainend(ss)/如果不含有终结符,则为非终结符 return true;return false;/ public

14、booleanpublic void show()System.out.print(H终结符输出如下:”);for(int i=O;iend.size();i+)System.out.print(String)end.get(i)+,/);System.out.println(H );System.out.print(非终结符输出如下:);for(int i=0;inoend.size();i+)System.out.print(String)noend.get(i)+n,);System.out.println(H );System.out.print(产生式输出如下:);for(int i

15、=0;iproduce.size();i+)System.out.println(H );Vector temp=(Vector)produce.get(i);System.out.print(String)temp.get(0)+,-,+(String)temp.get(l); System.out.println(H );/class Elements class Compression Tools tools=new Tools();Elements elements;Vector end二null;Vector noend二null;VectorVector produce=new V

16、ectorVectorString();Vector newend;Vector newnoend;VectorVectorString newproduce;public void showdelete(VectorVector harmzVectorVectorStringunreach,VectorVector unend)讦(harm.isEmpty()System.out.println(没有有害规则被删除”);elseSystem.out.print(被删除的有害产生式输出如下:);for(int i=O;iharm.size();i+)System.out.println(n);

17、Vector temp=(Vector)harm.get(i);System.out.print(Stri ng)temp.get(O)+,-,+(Stri ng)temp.get(l);System.out.printl n();System out printl门(,*)*)*3*)*)*)*)*3*)*3*)*)*)if(un reach.isEmpty()System, out. printin(”没有不可到达规则被删除);elseSystem.out.print(被删除的不可到达产生式输出如下:); for(int i=O;iunreach.size();i+)System.out.

18、println(H M);Vector temp=(Vector) un reach.get(i);System.out.print(Stri ng)temp.get(O)+,-,+(Stri ng)temp.get(l);System.out.println();System out printlnC1*3*3*3*3*3*3*3*3*3*3*3*).if(unen d.isEmpty()System.out.println(没有不可终止规则被删除”);elseSystem.out.print(被删除的不可终止产生式输出如下:); for(int i=0;iunend.size();i+)S

19、ystem.out.println(H);Vector temp=(Vector) unen d.get(i);System.out.print(Stri ng)temp.get(O)+,-,+(Stri ng)temp.get(l);System.out.printl n();System out printlnC1*3*3*3*3*3*3*3*3*3*3*3*).public VectorVector deleteharm(VectorVectorString newproduce)删 除 有害规则VectorVectorString delete二new VectorVectorStri

20、ng();for(int i=0;inewproduce.size();i+)Vector temp 二n ewproduce.get(i);String left=temp.get(O);String right=temp.get(l);if(left.equals(right)/形如 A-An ewproduce.remove(temp); delete.add(temp);return delete;(/public VectorVector deleteharm(VectorVectorString newproduce) public VectorVectorString delet

21、eu nreachable(VectorVectornewproduce)/删除不可到达的规则boolean tag=true;VectorVectorString delete=new VectorVectorString();Vector flag=new Vector();/用以记录那些出现在右部的非终结符 String start_character=,S;flag.add(start_character);while(tag)flag.clear();flag.add(start_character);tag=false;for(int i=0;inewproduce.size();

22、i+)/扫描产生式右部的非终结符Vector temp 二n ewproduce.get(i);String left=temp.get(O);String right=temp.get(l);forfint j=O;jright.length();j+)String s=ll+right.charAt(j);if(elements.lsNoENd(s)flag.add(s);/forj/for ifor(int i=0;inewproduce.size();i+)/开始进行删除Vector temp 二n ewproduce.get(i);String left=temp.get(O);St

23、ring right=temp.get(l);if(flag.contains(left)conti nue;elsetag=true;delete.add(temp);n ewproduce.remove(temp);/for(/whilereturn delete;/publicpublic void shownewproduce()System.out.print(压缩后的产生式输出如下:);for(int i=0;inewproduce.size();i+)System.out.println(H );Vector temp=(Vector) newproduce.get(i);Sys

24、tem.out.print(String)temp.get(0)+,-,+(String)temp.get(l);System.out.println();public VectorVector getproduce() return this.newproduce;public Vector get noen d()return this.noend;public Vector gete nd()return this.end;class UnEndableVectorVectorString the newproduce;VectorVectorString flagtable 二new

25、VectorVector(); public UnEndable()the newproduce=tools.doubleprotectio n(newproduce);/showthe newproduce();initial_table();firststep();sec on dstep();thirdstep(); showflagtable();public void showthenewproduce()System.out.print(最新的产生式输出如下:);for(int i=0;ithenewproduce.size();i+)System.out.println(n);V

26、ector temp=(Vector)the newproduce.get(i);System.out.print(Stri ng)temp.get(O)+,-+(Stri ng)temp.get(l);System.out.printl n();public String whattag(String noendcharacter)/判断某个非终结符在表中的状态,只 有 yes,no unsure 三种for(int i=O;iflagtable.size();i+)Vector temp=( Vector)flagtable.get(i);if(temp.get(O).equals( noen dcharacter)return (String)temp.get;/if/forreturn error11;/public Stri ng whattagpublic void initial_table()for(int i=0;inoend.size();i+)Vector temp 二new Vector();temp.add(String)noe nd.get(i);temp.add(H un sure);flagtable.add(temp);/for/public void initial_table()pub

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1