词法分析器实验报告.doc

上传人:jian****018 文档编号:9045777 上传时间:2020-04-02 格式:DOC 页数:7 大小:120.50KB
返回 下载 相关 举报
词法分析器实验报告.doc_第1页
第1页 / 共7页
词法分析器实验报告.doc_第2页
第2页 / 共7页
词法分析器实验报告.doc_第3页
第3页 / 共7页
点击查看更多>>
资源描述
词法分析器实验报告实验目的:设计、编制、调试一个词法分析子程序识别单词,加深对词法分析原理的理解。实验要求:该程序要实现的是一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分界符五大类。并依次输出各个单词的内部编码及单词符号自身值。(一)实验内容(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 + “ + str + );i-;m = 0;break;case 3: if (isDigit(ch =string.charAt(i) ) ) str += ch;elseSystem.out.println( 3 + “ + str + ” );i -;m = 0;break;
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!