编译原理词法分析实验报告_第1页
编译原理词法分析实验报告_第2页
编译原理词法分析实验报告_第3页
编译原理词法分析实验报告_第4页
编译原理词法分析实验报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

}#运行结果:}#运行结果:测试数据:试验一词法分析一、试验目的通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并把握在对程序设计语言源程序进展扫描过程中将其分解为各类单词的词法分析方法。编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即根本保存字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。二、试验内容功能描述:词符号的属性值)。本试验中,承受的是将单词分为五种的方法。、do、return、break、continue;1。2。常数:为无符号整形数;单词种别码为3。4。5。程序构造描述:处理:分别出关键字、标识符、数值、运算符和界符。输出:在词法分析结果表中输出每个单词所在行号、类型以及它所对应的 编码。其中,编码是自定义的,一种类型对应一个编码。词法分析结果显示在掌握台上。程序设计思路1、定义编码表,用ArrayList是固定的,只需要初始化一次就够了,所以将集合定义为static2、staticcharallstr[]newchar[100000];该数组用于存储用户从掌握台输入的全部字符。3、//从键盘猎取一个一个的字符publiccharGetchar{try{ch=(char)System.in.read;}catch(Exceptione){e.printStackTrace;}returnch;}4、用whileallstr5、Reserve三、试验过程记录试验过程中,比较费力的是如何分割出一个一个的单词,定义一个变量jallstrindexString类中的通过加断点,对程序一步一步的调试,查看j、index测试数据:main{int a=10;b=b+a;Intabc{Inta=5,b=6;While(a>=0){a--;}==>>>运行结果:Returnb;==>>>运行结果:}#运行结果:测试数据:inta=10,b=5;if(a>=9)returnb;#四、主要源代码//推断是否为字母publicbooleanIsLetter(charch){returnjava.lang.Character.isLetter(ch);}//推断是否为数字publicbooleanIsDigit(charch){returnjava.lang.Character.isDigit(ch);}publicintReserve{name=newString(allstr).substring(j,index);//取子串for(inti=0;i<5;i++)if(table[i].key.contains(name))returntable[i].code;return0;}publicstaticvoidmain(String[]args){WordAnalyzera=newWordAnalyzer;ch=a.Getchar;intm=0;while(ch!=”#”){allstr[index]=ch;index++;ch=a.Getchar;}intk=index;index=0;while(j<k){m=j;//标示符if(a.IsLetter(allstr[j])){while(a.IsLetter(allstr[index])||a.IsDigit(allstr[index])){index++;}if(a.Reserve!=0)System.out.println(“(“+a.Reserve+“,“+name+“)“);elseSystem.out.println(“(2,“+name+“)“);j=index;}//数字if(a.IsDigit(allstr[j])){while(a.IsDigit(allstr[index]))index++;if(a.Reserve!=0)System.out.println(“(“+a.Reserve+“,“+name+“)“);elseSystem.out.println(“(3,“+name+“)“);j=index;//识别分界符//推断”(”if(allstr[j]==”(”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}//识别运算符//推断=和==if(allstr[j]==”=”){index++;if(allstr[index]==”=”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}else{System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}}五、试验总结做本次试验大约用了三个小时,用了一个多小时思考,设计,查资料,剩余的时间来编码。由于刚开头对问题的理解不太深入,造成在编码过程中消灭了很多问题,始终在考虑是用一个单词一个编码还是将单词分为五种编码,铺张了很长时间,最终选择了将单词分为五种编码的方法来编写词法分ArrayList集合来存储,这些编码数据是固定的,所以定static运行。来回重复,最终的得到了正确的运行结果。packagecom.fgy.practice;importjava.util.ArrayList;importjava.util.List;publicclassWordAnalyzer{staticcharch;staticintindex=0;staticintj=0;staticcharallstr[]=newchar[100000];staticStringname;staticKeyTable[]table=newKeyTable[5];static{List<String>al=newArrayList<>;al.add(“main“);al.add(“if“);al.add(“else“);al.add(“int“);al.add(“for“);al.add(“while“);al.add(“return“);List<String>al1=newArrayList<>;List<String>al2=newArrayList<>;List<String>al3=newArrayList<>;al3.add(“+“);al3.add(“++“);al3.add(“-“);al3.add(“--“);al3.add(“=“);al3.add(“==“);al3.add(“>“);al3.add(“>=“);al3.add(“<“);al3.add(“<=“);List<String>al4=newArrayList<>;al4.add(“,“);al4.add(“;“);al4.add(“{“);al4.add(“}“);al4.add(“(“);al4.add(“)“);table[0]=newKeyTable(al,1);//关键字table[1]=newKeyTable(al1,2);//标示符table[2]=newKeyTable(al2,3);//常数table[3]=newKeyTable(al3,4);//运算符table[4]=newKeyTable(al4,5);//分界符}//从键盘猎取一个一个的字符publiccharGetchar{try{ch=(char)System.in.read;}catch(Exceptione){e.printStackTrace;}returnch;}//推断是否为字母publicbooleanIsLetter(charch){returnjava.lang.Character.isLetter(ch);}//推断是否为数字publicbooleanIsDigit(charch){returnjava.lang.Character.isDigit(ch);}publicintReserve{name=newString(allstr).substring(j,index);//for(inti=0;i<5;i++)if(table[i].key.contains(name))returntable[i].code;return0;}publicstaticvoidmain(String[]args){WordAnalyzera=newWordAnalyzer;ch=a.Getchar;intm=0;while(ch!=”#”){allstr[index]=ch;index++;ch=a.Getchar;}intk=index;index=0;while(j<k){m=j;//标示符if(a.IsLetter(allstr[j])){while(a.IsLetter(allstr[index])||a.IsDigit(allstr[index])){index++;}if(a.Reserve!=0)System.out.println(“(“+a.Reserve+“,“+name+“)“);elseSystem.out.println(“(2,“+name+“)“);j=index;}//数字if(a.IsDigit(allstr[j])){while(a.IsDigit(allstr[index]))index++;if(a.Reserve!=0)System.out.println(“(“+a.Reserve+“,“+name+“)“);elseSystem.out.println(“(3,“+name+“)“);j=index;}//识别分界符//推断”(”if(allstr[j]==”(”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}//推断”)”if(allstr[j]==”)”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}//推断‘{’if(allstr[j]==”{”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}//推断‘}’if(allstr[j]==”}”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}//if(allstr[j]==”;”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}//推断,if(allstr[j]==”,”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}//识别运算符//推断=和==if(allstr[j]==”=”){index++;if(allstr[index]==”=”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}else{System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}}if(allstr[j]==”<”){index++;if(allstr[index]==”=”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}else{System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}}//推断‘>’和‘>=’if(allstr[j]==”>”){index++;if(allstr[index]==”=”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}else{System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}}//推断‘+’和‘++’if(allstr[j]==”+”){index++;if(allstr[index]==”+”){index++;System.out.println(“(“+a.Reserve+“,“+name

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论