当前位置:文档之家› FOR循环语句翻译程序设计简单优先法三地址码JAVA

FOR循环语句翻译程序设计简单优先法三地址码JAVA

学号:27课内实践报告课程名称编译原理题目FOR循环语句的翻译程序设计(简单优先法、输出三地址码)学院计算机科学及技术专业计算机科学及技术班级1201姓名李潇颖指导教师林泓2014年12月9日课内实践任务书学生姓名:李潇颖专业班级:计算机1201班指导教师:林泓工作单位:计算机科学及技术学院题目: FOR循环语句的翻译程序设计(简单优先法、输出三地址码)初始条件:理论:学完编译课程,掌握一种计算机高级语言的使用。

实践:计算机实验室提供计算机及软件环境。

如果自己有计算机可以在其上进行设计。

要求完成的主要任务:(包括课内实践工作量及其技术要求,以及说明书撰写等具体要求)(1)写出符合给定的语法分析方法的文法及属性文法。

(2)完成题目要求的中间代码三地址码的描述。

(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。

(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。

(5)设计报告格式按附件要求书写。

课内实践报告书正文的内容应包括:1 系统描述(问题域描述);2 文法及属性文法的描述;3 语法分析方法描述及语法分析表设计;4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;5 编译系统的概要设计;6 详细的算法描述(流程图或伪代码);7 软件的测试方法和测试结果;8 研制报告(研制过程,本设计的评价、特点、不足、收获及体会等);9 参考文献(按公开发表的规范书写)。

时间安排:设计安排一周:周1、周2:完成系统分析及设计。

周3、周4:完成程序调试及测试。

周5:撰写课内实践报告。

设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。

设计报告书收取时间:设计周的次周星期一上午10点。

指导教师签名:年月日系主任(或责任教师)签名:目录1 系统描述(问题域描述)41.1设计目的41.2设计内容描述42.文法的描述53 语法分析方法描述及语法分析表设计63.1语法分析方法描述63.2 分析法操作步骤73.3优先关系矩阵84 中间代码形式的描述105 编译系统的概要设计(主要函数)106 详细的算法描述(流程图)126.1词法分析过程126.2语法分析过程136.3三地址码的输出137 测试方法和测试结果148.心得体会189.代码(完整)1910.本科生课内实践成绩评定表37FOR循环语句的翻译程序设计(简单优先法、输出三地址码)1 系统描述(问题域描述)1.1设计目的通过学习编译原理的相关内容,设计并编写FOR循环语句的翻译程序,使用简单优先法,按三地址码输出,能够实现词法分析,语法和语义的分析,加深对所学知识的理解,并且能够熟练运用到实际当中。

1.2设计内容描述FOR循环语句的基本格式如下:FOR(表达式1;表达式2;表达式3){赋值语句}根据所给题目要求,设计出符合FOR循环语句的文法及属性文法的描述,语法分析方法以及三地址码的输出方式,罗列出词法分析和语法分析的流程,根据语法规则设计输入输出方法,简单优先法中的优先关系表格。

设计好并且进行编译,设计若干输入输出用例(包括正确的输入和错误的输入,用来检查程序的完整性)。

2.文法的描述根据For语句的特点,制定的产生式规则及由产生式对应的语义动作如下:H->f(G;A;B){S;}G O T O H->f(G;C;D){S;}G O T O G->i1=i 2 i1.C O D E=i2.C O D E A->i1<i2I F i1.C O D E>=i2.C O D E G O T O O V E R B->i d i.C O D E=i.C O D E+1 C->i1>i2I F i1.C O D E<=i2.C O D E G O T O O V E R D->i a i.C O D E=i.C O D E-1 S->j=M j.C O D E=M.C O D E M-> E M.C O D E=E.C O D E E->W E.C O D E=W.C O D E W->W+UW.C O D E=W.C O D E+U.C O D E W->W-U W.C O D E=W.C O D E-U.C O D E W->U W.C O D E=U.C O D E U->T U.C O D E=T.C O D E T->T* F T.C O D E=T.C O D E”F.C O D E T->T/ F T.C O D E=T.C O D E/F.C O D E T-> F T.C O D E=F.C O D E F->(E) F.C O D E=(E.C O D E) F->j F.C O D E=j.C O D E (备注:其中d表示--,a表示++)3 语法分析方法描述及语法分析表设计3.1语法分析方法描述本次课内实践要求使用简单优先关系方法。

简单优先分析法的基本思想史对一个文法按照一定原则求出该文法所有符号即包括终结符和非终结符之间的优先关系确定归约过程中的句柄,它的归约实际上是一种规范归约。

一个文法是简单优先文法必须满足以下条件(1)在文法符号集V中,任意两个符号之间最多只有一种优先关系成立;(2)在文法中任意两个产生式没有相同的右部。

三种优先关系及其判定方法如下所示:(1)X=Y 表示X和Y的优先关系相等,当且仅当G中存在产生式规则A→…XY…;(2)X<Y表示X的优先性比Y的优先性小,当且仅当G中存在产生式规则A→…XB…,且B Y…;(3)X>Y表示X的优先性比Y的优先性大,当且仅当G中存在产生式规则A→…BD…,且B…X和D Y…;(4)对任何X,若文法开始符号S→X...,则#<X,若S→ (X)则X>#。

3.2 分析法操作步骤由简单优先分析法的基本思想设计的如下算法,首先要构造优先关系矩阵(如3.3所示),并将文法产生式保存,设置符号数组S:(1)将输入符号串a1a2…a n# 依次逐个保存符号数组S中,直到遇到数组中第一个符号a i的优先性>下一个待输入符号a j为止。

(2)数组当前符号a i为句柄尾,由此向左在数组中找句柄的头符号a k,即找到a k-1<a k为止。

(3)由句柄a k…a i在文法的产生式中查找右部为a k…a i的产生式,若找到则用相应左部代替句柄,找不到则为出错,这是可断定输入串不是该文法的句子。

(4)重复(1)(2)(3),直到归约完输入符号串,数组中只剩文法的开始符号为止。

3.3优先关系矩阵空白表示,没有优先级关系4 中间代码形式的描述三地址码是由下面一般形式的语句构成的序列:x:=y op z其中,xyz为名字、常数或变量;op代表运算符。

对于本程序的具体三地址码输出,预计显示结果如下:给定输入程序for(i=0;i<10;i++){j=b+c;}三地址码输出为<1> i=0<2> goto <5><3> i++<4> if i<10 goto<5> else goto<7><5> j=b+c<6> goto<3><7> end5 编译系统的概要设计(主要函数)主要函数及对应实现的功能如下表所示:6 详细的算法描述(流程图)6.1词法分析过程给定输入程序for(i=0;i<10;i++){j=b+c;}词法分析结果为关键字为:1;标识符为:2;常数为:3;运算符为:4;界符为:5<for 1><( 5><i 2><= 4><0 3><; 5><i 2><< 4><10 3><; 5><i 2><++ 4><) 5><{ 5> <j 2> <= 4><b 2><+ 4><c 2><; 5><} 5>6.2语法分析过程6.3三地址码的输出给定输入程序for(i=0;i<10;i++){j=b+c;}三地址码输出为<1> i=0<2> goto <5><3> i++<4> if i<10 goto<5> else goto<7><5> j=b+c<6> goto<3><7> end7 测试方法和测试结果计算机系统:Windows 7编译调试环境:Eclipse程序语言:JAVA设计测试用例:(1)data.txt中保存如下程序段for(i=0;i<10;i++){j=b+c;}输出如下结果(2)data.txt 中保存如下程序段for(i=5;i>0;i--){j=a*(h+c);} 输出如下结果8.心得体会经过这次课内实践,使我更加扎实的掌握了有关编译原理方面的知识,在编写程序的过程中遇到了许多问题,但经过一遍遍的调试终于使得程序可以顺利运行。

但是程序中存在着很大的不足:例如在for 循环语句的循环体中只能有一个赋值语句。

对for()括号中的格式也有着严格的输入要求等等,这些都是以后要改进的地方。

过而能改,善莫大焉。

在课内过程中,我们不断发现错误,不断改正,不断领悟,不断获取。

最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。

这次课内实践终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。

在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!回顾这次课内实践,是一个痛并快乐的过程,在构造简单优先文法的矩阵时我尝试了5次构造,花费了许多时间,但是当成功构造出来时那种喜悦也是难以言表的。

学习是个不断提升自我的过程。

9.代码(完整)package lxy;import java.io.;import java.io.IOException;import java.io.InputStreamReader;import java.io.Reader;import java.util.*;publicclass Bianyiyuanlikeshe{publicstatic String sy[]=new String[100];staticint js=0;static String m[]=new String[4];publicstatic String sh=new String(); publicstaticvoid main(String[] args) {String s[]=new String[19];s[0]="f(G;A;B){S;}";s[1]="f(G;C;D){S;}";s[2]="i=i";s[3]="i<i";s[4]="id";s[5]="i>i";s[6]="ia";s[7]="j=M";s[8]="E";s[9]="W";s[10]="W+U";s[11]="W-U"; s[12]="U";s[13]="T";s[14]="T*F";s[15]="T/F";s[16]="F";s[17]="(E)";s[18]="j";char ss[]=newchar[19];ss[0]='H';ss[1]='H';ss[2]='G';ss[3]='A';ss[4]='B';ss[5]='C';ss[6]='D';ss[7]='S';ss[8]='M';ss[9]='E';ss[10]='W';ss[11]='W';ss[12]='W';ss[13]='U';ss[14]='T';ss[15]='T';ss[16]='T';ss[17]='F';ss[18]='F';cifafenxi();String pp=new String();pp="";for(int i=0;i<sh.length();i++){if(!sy.equals("null"))pp=pp+sy[i];}String[] re=pp.split(";|\\{|r");m[0]=re[1];char tt[]=m[0].toCharArray();m[0]="";for(int i=1;i<m.length;i++)m[0]=m[0]+String.valueOf(tt[i]);m[1]=re[2];m[2]=re[3];char ttt[]=m[2].toCharArray();m[2]="";for(int i=0;i<m.length-1;i++)m[2]=m[2]+String.valueOf(ttt[i]); m[3]=re[4];String n=new String();System.out.println ("采用文法:");for(int i=0;i<s.length;i++)System.out.println(ss[i]+"->"+s[i]);//输出文法System.out.println ("语法分析结果");String str=new String();str=sh+"#";char r[]=str.toCharArray();char ru[]=newchar[r.length];int l=r.length;for(int i=0;i<r.length;i++){ru[i]=r[l-1];l--;}char fu[]=newchar[ru.length ];fu[0]='#';int coutru=ru.length-1;int coutfu=0;int coutbi=0;char bi[]=newchar[ru.length];while(fu[1]!='H'){//System.out.println(fu[coutfu]+" "+ru[coutru]);int b=bijiao(fu[coutfu],ru[coutru]);if(b==-1){System.out.println("wrong");System.out.println(coutf u+"wrong"+coutru);return ;}if(b==0||b==1){if(b==0){ coutfu++;//System.out.println(coutfu);fu[coutfu]=ru[coutru];for(int i=0;i<coutfu;i++){System.out.print(fu[i]);} System.out.print(" ");for(int i=coutru;i>=0;i--){System.out.print(ru[i]);} System.out.println();System.out.println(ru[coutru]+" 移入");bi[coutbi]='0';coutbi++;coutru--;}if(b==1){coutfu++;fu[coutfu]=ru[coutru];for(int i=0;i<coutfu;i++){System.out.print(fu[i]);} System.out.print(" ");for(int i=coutru;i>=0;i--){System.out.print(ru[i]);} System.out.println();System.out.println(ru[coutru]+" 移入");bi[coutbi]='1';coutbi++;coutru--;}}if(b==2){int m=0;for (int i=coutbi-1;i>=0;i--){if(bi[i]=='1')break;else m++;}for(int j=0;j<=coutfu;j++){System.out.print(fu[j]);}System.out.print(" ");for(int j=coutru;j>=0;j--){System.out.print(ru[j]);}System.out.println();coutbi=coutbi-m;String str2=new String();String str3=new String();for(int i=0;i<=m;i++){str3=String.valueOf(fu[coutfu])+str3;if(fu[coutfu]!=';'&&fu[coutfu]!='f'&&fu[coutfu]!='>'&&fu[coutfu] !='<'&&fu[coutfu]!='B'&&fu[coutfu]!='C'&&fu[coutfu]!='D'&&fu [coutfu]!='H'&&fu[coutfu]!='G'&&fu[coutfu]!='A'&&fu[coutfu]!= 'i'&&fu[coutfu]!='S'&&fu[coutfu]!='M'&&fu[coutfu]!='W'&&fu[c outfu]!='U'&&fu[coutfu]!='T'&&fu[coutfu]!='F'&&fu[coutfu]!='='&&fu[coutfu]!='+'&&fu[coutfu]!='-'&&fu[coutfu]! ='*'&&fu[coutfu]!='/'&&fu[coutfu]!='('&&fu[coutfu]!=')'&&fu[co utfu]!='E'&&fu[coutfu]!='#'&&fu[coutfu]!='j'&&fu[coutfu]!='#'& &fu[coutfu]!='j'&&fu[coutfu]!='a'&&fu[coutfu]!='d'&&fu[coutfu ]!='{'&&fu[coutfu]!='}')str2="i"+str2;elsestr2=String.valueOf(fu[coutfu])+str2;coutfu--;}for(int i=0;i<s.length;i++){if(str2.equals(s[i])){fu[++coutfu]=ss[i];System.out.println(ss[i]+"->"+s[i]+" 规约");n=n+Sandizhima(s[i]);}}int t=bijiao(fu[coutfu-1],fu[coutfu]);if(t==0)bi[coutbi-1]='0';elseif(t==1)bi[coutbi-1]='1';else bi[coutbi-1]='2';}}if(fu[1]=='H')System.out.println("成功!");System.out.println("生成的三地址为:");String m[]=n.split(",");for(int k=0;k<m.length;k++)System.out.println(m[k]);}publicstaticint bijiao(char f,char r){int rr=0,ff=0;charz[]={'H','G','A','B','S','C','D','M','E','W','U','T','F','f','(',';',')','{','}','i','= ','<','d','>','a','j','+','-','*','/','#'};int fc=0;int rc=0;for(int i=0;i<z.length;i++){if(f!=z[i])fc++;if(r!=z[i])rc++;}if(fc==16)f='i';if(rc==16)r='i';for (int i=0;i<z.length;i++){if(r==z[i])rr=i;if(f==z[i])ff=i;}int a[][]={{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 0, -1, -1, -1,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 2, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 2, 0, 0, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 2, 2, 2, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{-1, 0, -1, -1, -1, -1, -1, -1, 0, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1},{-1, -1, 0, 0, -1, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 2, 0, -1, -1, -1, -1, -1, -1, -1, -1, 2, 2, 2, 2, -1},{-1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, -1, -1, -1, -1,0,{-1, -1, -1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 2, -1, -1, -1,0, -1, -1, -1, -1, -1, 2, 2, 2, 2, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1},{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1},{1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1,};//-1表示没关系,0表示等于,2表示大于,1表示小于return a[ff][rr];}publicstatic String Sandizhima(String p){char a;int j=0;String s[]=new String[19];s[0]="f(G;A;B){S;}";s[1]="f(G;C;D){S;}";s[2]="i=i";s[3]="i<i";s[4]="id";s[5]="i>i";s[6]="ia";s[7]="j=M";s[8]="E";s[9]="W";s[10]="W+U";s[11]="W-U";s[12]="U";s[13]="T";s[14]="T*F";s[15]="T/F";s[16]="F";s[17]="(E)";s[18]="j";for(int i=0;i<19;i++)if(p.equals(s[i]))j=i;char ss[]=newchar[19];ss[0]='H';ss[1]='H';ss[2]='G';ss[3]='A';ss[4]='B';ss[5]='C';ss[6]='D';ss[7]='S';ss[8]='M';ss[9]='E';ss[10]='W';ss[11]='W';ss[12]='W';ss[13]='U';ss[14]='T';ss[15]='T';ss[16]='T';ss[17]='F';ss[18]='F';if(j==7){String f=new String();f=",<5> "+m[3]+",<6> goto<3>"+",<7> end";return f;}if(j==4){String f=new String();f=",<3> "+m[2]+",<4> if "+m[1]+" goto<5> else goto<7>"; return f;}if(j==6){String f=new String();f=",<3> "+m[2]+",<4> if "+m[1]+" goto<5> else goto<7>"; return f;}if(j==2){String f=new String();f="<1> "+m[0]+",<2> "+"goto <5>";return f;}return"";}publicstaticvoid sansidzhima(String m){char b[]=m.toCharArray();String a[]=new String[b.length];for(int i=0;i<a.length;i++){a[i]=String.valueOf(b[i]);}String f[]={"+","-","*","/","="};int c2=1;int bc=0;int t=0;for(int i=0;i<a.length;i++){int cc=0;for(int j=0;j<f.length;j++){if(a[i].equals(f[j])){System.out.print("("+String.valueOf(c2)+")"+"("+a[i]+",");a[i]=nu ll;for(int k=i-1;k>=0;k--){if(a[k]!=null&&cc<2){if(cc==0)System.out.print(a[k]+",");if(cc== 1)System.out.print(a[k]);cc++;a[k]=null;}}System.out.print(")");System.out.println();a[i]="("+String.valueOf(c2)+")";c2++;break;}}}}publicstaticint yunsuanfu(char a){boolean b;if(a=='i')return 0;char p[]={'+','-','*','/',')','('};for(int i=0;i<p.length;i++){if(a==p[i])return 2;}return 0;}publicstaticvoid cifafenxi(){System.out.println("关键字为:1;" );System.out.println ("标识符为:2;" );System.out.println ("常数为:3;" );System.out.println("运算符为:4;");System.out.println ("界符为:5");System.out.println ("词法分析结果");read("c:/data.txt");char x[]=sh.toCharArray();for(int i=13;i<sh.length();i++){if(x[i]=='i')x[i]='j';}sh="";for(int i=0;i<x.length;i++){sh=sh+x[i];}}publicstaticvoid read(String ) {Reader reader = null;try {char[] tempchars = newchar[3000];int charread = 0;String str1=new String();String str3=new String();int c=0;reader = new InputStreamReader(new ());// 读入多个字符到字符数组中,charread为一次读取字符数while ((charread = reader.read(tempchars)) != -1) {// 屏蔽掉\r不显示if ((charread == tempchars.length)&& (tempchars[tempchars.length - 1] != '\r')) {System.out.print(tempchars);} else {for (int i = 0; i < charread; i++) {if (tempchars[i] == '\r'||tempchars[i] == '\n') {continue;}else {boolean b1,b2,b3,b4;String str = String.valueOf(tempchars[i]);b1=Isjiefu(str);b2=Isyunsuanfu(str);if(!b1&&!b2&&c==0){str1=str1+str;}else{if((str.equals("|")||str.equals("&")||str.equals("=")||str.equal s(">")||str.equals("<")||str.equals("-")||str.equals("!")||str.eq uals("+"))&&c<=1){str3=str3+str;c++;if(c==1)continue;}if(str3.equals(""))str3=str;if(c==1)b2=true;b3=Isguanjianzi(str1);if(b3==true){System.out.println("<"+str1+" 1"+">"); sh=sh+"f";sy[js]=str1;js++;}else{b4=Ischangshu(str1);if(b4==true&&!str1.equals("")){System.out.println("<"+str1+" 3"+">");sh=sh+"i";sy[js]=str1;js++;}else{if(!str1.equals("")){System.out.println("<"+str1+" 2"+">");sh=sh+"i";sy[js]=str1;js++;}}}shuchu(b1,b2,str3);if(c==1)str1=str;else str1="";str3="";c=0;b1=b2=true;}}}}}}catch (Exception e1) {e1.printStackTrace();} finally {if (reader != null) {try {reader.close();} catch (IOException e1) {}}}}publicstaticboolean Isjiefu(String a){String jiefu []=new String[]{";",",","'","\"","//","(",")"," ","{","}","[","]","#"};boolean p=false;for (int i=0;i<12;i++)if (a.equals(jiefu[i]))p=true;return p;}publicstaticboolean Isyunsuanfu(String a){String yunsuanfu []=newString[]{"+","-","*","/","<",">","<=",">=","=","!=","%","++","--","==" ,"&&","||"};boolean p=false;for (int i=0;i<14;i++)if (a.equals(yunsuanfu[i]))p=true;return p;} publicstaticboolean Isguanjianzi(String a){String guanjianzi []=newString[]{"include","iostream","using","namespace","std","void", "main","return","int","bool","long","char","double","string","ne w","const","if","elseif","else","while","for"};boolean p=false;for (int i=0;i<guanjianzi.length;i++)if (a.equals(guanjianzi[i]))p=true;return p;} publicstaticboolean Ischangshu(String a){for (int i = a.length();--i>=0;){if (!Character.isDigit(a.charAt(i))){if(a.charAt(i)!='.')returnfalse;}}returntrue;}publicstaticvoid shuchu(boolean a,boolean b,String st){if(a==true&&!st.equals(" ")){System.out.println("<"+st+" 5"+">");sh=sh+st;sy[js]=st;js++;}elseif(st.equals(" "))System.out.print(""); else{ System.out.println("<"+st+" 4"+">"); if(st.equals("++"))sh=sh+"d";elseif(st.equals("--"))sh=sh+"a";else sh=sh+st;sy[js]=st;js++;}} }10.本科生课内实践成绩评定表班级:计算机1201班姓名:李潇颖学号:27注:最终成绩以五级分制记。

相关主题