词法分析器实验报告.doc_第1页
词法分析器实验报告.doc_第2页
词法分析器实验报告.doc_第3页
词法分析器实验报告.doc_第4页
词法分析器实验报告.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

词法分析器实验报告实验目的:设计、编制、调试一个词法分析子程序识别单词,加深对词法分析原理的理解。实验要求:该程序要实现的是一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分界符五大类。并依次输出各个单词的内部编码及单词符号自身值。(一)实验内容(1)功能描述:对给定的程序通过词法分析器弄够识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示。而本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示。(2)程序结构描述:函数调用格式:函数调用格式函数名(实在参数表)实 参 Switch(m)、 isKey(String string)、isLetter(char c)、isDigit(char c)、isOperator(char c)调用方法作为表达式isKey(String string)、isLetter(char c)、isDigit(char c)、isOperator(char c)作为语句getChar()、judgement()、函数的递归调用isOperator(char c) 、isLetter(char c)、isDigit(char c)参数含义:String string;存放读入的字符串 String str; 存放暂时读入的字符串char ch; 存放读入的字符 int rs 判断读入的文件是否为空char data 存放文件中的数据 int m;通过switch用来判断字符类型,函数之间的调用关系图:mainComplier.judgementgetChar( )For(ch )Switch(m)M=0M=4M=2M=3isOperate()isDigit()isLetter()isKey()函数功能:Judgement()判断输入的字符并输出单词符号,返回值为空;getChar() 读取文件的,返回值为空;isLetter(char c) 判断读入的字符是否为字母的,返回值为Boolean类型;switch (m) 判断跳转输出返回值为空;isOperator(char c)判断是否为运算符的,返回值为Boolean类型;isKey(String string)判断是否为关键字的,返回值为Boolean类型;isDigit(char c) 判断读入的字符是否为数字的,返回值为Boolean类型。测试结果:测试数据运行结果main()int a1,b;if(a1=b)a1 = 10;else b = a1 + 20;while(rs = fr.read(data) 0)string = new String(data,0,rs).trim();for(inti=0;i 0)string = new String(data,0,rs).trim();/* * 判断读入的字符是否为字母 */public static boolean isLetter(char c)if(ch = a & ch + A & ch =0 & ch = 9)return true;elsereturn false;/* * 判断是否为运算符 */public static boolean isOperator(char c) if(ch = + | ch = - | ch = * | ch = / | ch = = | ch = !| ch = )return true;else return false;/* * 判断是否为关键字 */public static boolean isKey(String string) if(string.equals(void) | string.equals(if)| string .equals(for)| string.equals(while)| string.equals(else) | string.equals(do)| string.equals(return)| string.equals(break)| string.equals(main)| string.equals(int)return true;else return false;/* * 判断输入的字符并输出单词符号 */public static void judgement() throws Exception Compiler.getChar();int m = 0;string += ;for(int i = 0;i string.length();i+)switch (m)/1是关键字,2是变量,3是数字,4是运算符,5是分界符case 0:ch = string.charAt(i);if(isOperator(ch =string.charAt(i)/判断是否为运算符 str = ; str += ch;m=4;else if(ch = , | ch = ; | ch = | ch = | ch = ( | ch = )|ch = | ch = )判断是否为分界符m = 5; else if ( isDigit(ch =string.charAt(i) ) )str = ; str += ch; m = 3; else if ( isLetter(ch =string.charAt(i) ) str = ; str += ch; m = 2;else break;case 4:if (isOperator(ch =string.charAt(i) ) ) 判断是否为双运算符str += ch;elseSystem.out.println( 4 + “ + str + ” );i -;m = 0;break;case 5:i -;System.out.println( 5 + “ + ch + ” );m = 0;break;case 2:判断是变量名还是关键字if (isLetter(ch = string.charAt(i)|isDigit(ch =string.charAt(i) )str += ch;elseif ( isKey(str) )System.out.println( 1 + “ + str + ” );else System.out.println( 2 + “

温馨提示

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

评论

0/150

提交评论