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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(编译原理课程设计语法分析器Word文档格式.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

编译原理课程设计语法分析器Word文档格式.docx

1、参考文献: 81 正则表达式1.1 正则表达式 ab(a|b)*ba1.2 确定化(化简)后的状态转换图1.3 分析程序代码import java.util.Scanner;import java.util.regex.Matcher;import java.util.regex.Pattern;/导入所需要的包public class RegTest /创建类RegTest static boolean test(String s1,String s2) /*编写测试函数返回布尔类型,用于验证输入字符串与要验证的表达式是否符合*/ Pattern p=Ppile(s1);/正则表达式 Mat

2、cher m=p.matcher(s2);/操作字符串 boolean b=false; /p=Ppile(s1); / /m=p.matcher(s2); b=m.matches(); /判断是否满足是则返回true否返回false if(b=false) System.out.println(您输入的不符合您要求的正则表达式); else符合您所输入的正则表达式 return b; public static void main(String args) / 主函数 Scanner cin=new Scanner(System.in); /用于输入字符串 String s; while(t

3、rue) System.out.println(请输入正则表达式: String s1=cin.nextLine();请输入字符串: String s2=cin.nextLine(); /输入表达式和要验证的字符串 test(s1,s2); /调用函数,测试是否符合要验证的表达式 while(true) System.out.println(是否继续验证该表达式?(yes/no) s=cin.nextLine(); /如果还想继续验证刚才输入的表达式,可以继续输入字符串 if(!s.equals(yes) break; s2=cin.nextLine(); test(s1,s2); /调用函数

4、,测试是否符合要验证的表达式 是否继续验证正则表达式? /如果需要验证其他字符串的话,可以继续输入 1.4 程序运行截图1.5 小结总的来说对于正则表达有一定的了解,正则表达简单来说不算难,但是要深入就很难。通过这次的报告,我清楚了解到正则表达式在实际的生活中其实还是很有用的,需要用的地方很多,编译原理,不止在编程上有用处,在实际生活中也是用处很大的。对于现在的我来说正则表达式,只能算是了解,还得继续学习。2 LL(1)分析2.1 LL(1)文法 ETE E+TE| TFT T*FT F(E)|i2.2 LL(1)预测分析表i+*()#EETEETTFTTFFiF(E)2.3 分析程序代码im

5、port java.util.ArrayList;public class LL1Analysis public static void main(String a) int id=1; int index1=1;/记录栈最后一个非终结符的位置 String topStack,topIn,operation; StringBuffer inString=null; ArrayList list = new ArrayList(); System.out.println(请输入一个语句: Scanner in = new Scanner(System.in); String ins=in.nex

6、tLine().trim(); if(ins.indexOf(#)=0)/去掉输入串表达式中的空格 inString.delete(kong,kong+1); kong=inString.indexOf( StringBuffer stack=new StringBuffer(#E/分析栈,初始放入E String ll=,i+*(), EET/PEET/N/PTTF/PTTF/NF/N)E/Nacc ;/ll(1)分析矩阵 System.out.println(LL(1)分析过程如下:n序号t分析栈+getBlank(20)+ 输入数据动作 StringBuffer liutemp = nu

7、ll; while(stack.length()0) int x=0,y=0;/记录在分析表中的的横纵坐标 if(stack.toString().endsWith()|stack.toString().endsWith()/证明是带了一撇的非终结符 index1 = stack.length()-2;/ else index1=stack.length()-1; topStack=String.valueOf(stack.substring(index1,stack.length();/栈顶元素 if(inString.length() topIn=String.valueOf(inStri

8、ng.charAt(0);/剩余输入串的第一个元素 else topIn= for(int i=1;i=3) String first=operation.substring(0,operation.length()-2);/替换部分 String last=operation.substring(operation.length()-2,operation.length();/是否换行部分 if(first.equals()/如果是空字符,有不要加入栈 first= if(operation.equals() if(stack.length()=1&inString.length()=1)

9、System.out.println(id+t+stack+getBlank(21-stack.length()-inString.length()+inString+getBlank(11-operation.length()+operation); stack.delete(0,1); inString.delete(0,1);匹配成功! else+stack+getBlank(21-stack.length()-inString.length()+inString+getBlank(6)+error不能完整匹配! else if(last.equals(/P System.out.pri

10、ntln(id+ stack.replace(index1,index1+topStack.length(),first);/把栈顶元素替换为分析表中值 if(first.equals( list.add(llx0+- else liutemp = new StringBuffer(first);+reverse(liutemp); id+; else if(last.equals(/N/相当于读下一个元素 list.add(llx0+topIn+reverse(liutemp); if(stack.toString().endsWith( index1 = stack.length()-2;

11、/重新设置index1值 else index1=stack.length()-1; else 分析表构造出错! System.exit(0); else if(y=0) System.out.println(id+输入的符号不符合规定文法! System.exit(0); else if(x!=0&y!operation.length()=0)+stack+getBlank(21-stack.length()-inString.length()+inString+inString+getBlank(6)+输入符号串不完整!n该语句自顶向下构建语法树过程: for(int i = 0;list

12、.size();i+) System.out.println(list.get(i); public static StringBuffer reverse(StringBuffer buffer)/字母、运算符倒置 StringBuffer buf = new StringBuffer(); int ix=-1; int length=0; if(buffer.indexOf(0&buffer.indexOf( buf.append(buffer.reverse(); else while(buffer.length()0) length = buffer.length(); if(buff

13、er.charAt(length-1)=|buffer.charAt(length-1)= buf.append(buffer.substring(length-2,length); buffer.delete(length-2,length); buf.append(buffer.charAt(length-1); buffer.delete(length-1,length); return buf; public static String getBlank(int n)/得到n个连续空格 String blank= for(int i=0;n; blank+= return blank;2.4 程序运行截图2.5 小结 对于LL(1)分析法有一定了解,对于完成整个算法还是挺吃力的,查看的相当的一些资料,才慢慢理解,并且慢慢的想出其算法。最后才能根据算法写出来,并运行。总的来说对于算法有了更深刻的理解。算法在计算机中用处还真是挺大的。1 杨德芳主编.编译原理实用教程M.北京:中国水利水电出版社,2007

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2