您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 编译原理课程设计-福建农林大学java
福建农林大学计算机与信息学院计算机类课程设计报告课程名称:编译原理课程设计题目:语法分析器姓名:陈锦灿系:计算机专业:计算机科学与技术年级:2012级学号:3126010067指导教师:林清波2015~2016学年第一学期福建农林大学计算机与信息学院计算机类课程设计结果评定评语:成绩:指导教师签字:任务下达日期:评定日期:目录1正则表达式·································································································11.1正则表达式·························································································11.2确定化(化简)后的状态转换图··································································11.3分析程序代码······················································································11.4程序运行截图······················································································11.5小结:································································································22LL(1)分析···································································································32.1LL(1)文法···························································································32.2LL(1)预测分析表··················································································32.3分析程序代码······················································································32.4程序运行截图······················································································32.5小结··································································································83算符优先分析······························································································93.1算符优先文法······················································································93.2算符优先关系表···················································································93.3分析程序代码······················································································93.4程序运行截图······················································································93.5小结·································································································114LR分析·····································································································124.1LR文法····························································································124.2LR分析表·························································································124.3分析程序代码(代码原创)·······································································124.4程序运行截图·····················································································124.5小结·································································································17参考文献:·······························································································1811正则表达式1.1正则表达式(a|b)*(aa|bb)(a|b)*1.2确定化(化简)后的状态转换图1.3分析程序代码importjava.util.Scanner;publicclassTest4{publicstaticvoidmain(String[]args){int[][]s={{1,2},{3,2},{1,4},{3,5},{6,4},{6,4},{3,5}};System.out.println(文法规则:\n(a|b)*(aa|bb)*(a|b)*);System.out.println(请输入您所要验证的句子:\n);Scannersc=newScanner(System.in);Stringstr1=sc.next();intlen=str1.length();charch;inti,j=0,t,flag,index;i=0;index=0;t=1;//判断输入是否正确flag=0;//判断句子是否正确while(indexlen){ch=str1.charAt(index);if(ch=='a')j=0;if(ch=='b')j=1;if(ch!='a'&&ch!='b'){t=0;break;}index++;abCBADababab2i=s[i][j];}flag=i;if(flag=3&&t==1){//flag2时可终结System.out.println(\n您所要验证的句子正确!\n\n);}else{System.out.println(\n您所要验证的句子错误!\n\n);}}}1.4程序运行截图1.5小结:通过该课程设计,掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程、构造工具及其相关的技术对课本上的知识有了更深的理解。32LL(1)分析2.1LL(1)文法E→TE'E'→+TE'|εT→FT'T'→*FT'|εF→(E)|i2.2LL(1)预测分析表i+*()#EE→TE'E→TE'E'E'→+TE'E'→εE'→εTT→FT'T→FT'T'T'→εT'→*FT'T'→εT'→εFF→iF→(E)2.3分析程序代码publicclassTest{publicstaticvoidmain(Stringa[]){intid=1;intindex1=1;//记录栈最后一个非终结符的位置StringtopStack,topIn,operation;StringBufferinString=null;ArrayListStringlist=newArrayListString();System.out.println(请输入一个语句:);Scannerin=newScanner(System.in);Stringins=in.nextLine().trim();if(ins.indexOf(#)0)//假如最后完了输入#号也没事ins+=#;elseins=ins.substring(0,ins.indexOf(#)+1);//截取#号在内的前部inString=newStringBuffer(ins);4intkong=inString.indexOf();while(kong=0)//去掉输入串表达式中的空格{inString.delete(kong,kong+1);kong=inString.indexOf();}StringBufferstack=newStringBuffer(#E);//分析栈,初始放入EStringll[][]={{,i,+,*,(,),#},{E,E’T/P,,,E’T/P,,},{E’,,E’T/N,,,ε/P,ε/P},{T,T’F/P,,,T’F/P,,},{T’,,ε/P,T’F/N,,ε/P,ε/P},{F,ε/N,,,)E/N,,},{),,,,,ε/N,},{#,,,,,,acc}};//ll(1)分析矩阵System.out.println(LL(1)分析过程如下:);System.out.println(\n序号\t分析栈+getBlank(20)+输入数据+getBlank(20)+动作);StringBufferliutemp=null;while(stack.length()0){intx=0,y=0;//记录在分析表中的的横纵坐标if(stack.toString().endsWith(\')||stack.toString().endsWith(’))//证明是带了一撇的非终结符index1=stack.length()-2;//elseindex1=stack.length()-1;topStack=String.valueOf(stack.substring(index1,stack.length()));//栈顶元素if(inString.length()0)topIn=String.valueOf(inString.charAt(0));//剩余输入串的第一个元素else5topIn=;for(inti=1;ill.length;i++)//计算对应分析表的哪一行if(topStack.equals(ll[i][0])){x=i;break;}for(inti=1;ill[0].length;i++)//计算对应分析表的列数if(topIn.equals(ll[0][i])){y=i;break;}operation=ll[x][y];//动作命令if(operation.length()=3){Stringfirst=operation.subst
本文标题:编译原理课程设计-福建农林大学java
链接地址:https://www.777doc.com/doc-3400967 .html