




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实习一 词法分析一、实验目的: 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)。二、核心代码清单:1)定义类别编码 public static final int KEY_WORD = 1;public static final int IDENTIFIER = 2;public static final int NUMBER = 3;public static final int OPERATOR = 4;public static final int DELIMITER = 5;2) 构造保留字,运算符,分隔符表/ 保留字、运算符、分隔符private String keyword = new String if, int, for, while,do, return, break, continue ;/保留字private String operator = new String +, -, *, =, , =,= ;/运算符private String delimiter = new String , , , (, ), ; ;/分隔符3) 判断是否为数字,字母函数/ 判断是否是数字private boolean isNumber(char c) if (c 9 | c 0)return false;elsereturn true;/ 判断是否是字母(包括下划线)/ 判断是否是字母 private boolean isChar(char c) if (c = A) | c = _)return true;elsereturn false;4) 字母处理函数/ 处理第一个字符是字母的情况private char dealWithChar(char c) throws IOException boolean flag = true;/是否出现重命名错误if (Character.isSpace(c) c = (char) fis.read();return c;String str = new String();while (isNumber(c) | isChar(c) / 是数字或字母,则加到str中;不是数字和字母,则str就是识别出的标识符(或保留字)str = str + c;c = (char) fis.read();if (compare(str, 1) / 判断是否是保留字tokens.add(new Token(KEY_WORD, str);else /遍历单词表,查看是否有重命名错误for (int i = 0; i tokens.size(); i+) Token tk = tokens.get(i);String tmp = tk.str;/得到字符串int type = tk.type;/得到类型/如果新得到的字符串与字符表中的相同且类型为2,则重命名错误if (str.equals(tmp)&type=2) System.out.println(tmp + + 变量重定义错误!);flag = false;break;if(flag)flag = true;tokens.add(new Token(IDENTIFIER, str);return c;5) 数字处理函数/ 处理第一个字符是数字的情况.private char dealWithNumber(char c) throws IOException if (Character.isSpace(c) c = (char) fis.read();return c;String str = new String();while (isNumber(c) / 是数字,则加到str中;不是数字,则str就是识别出的数,将str加入到tokens中str = str + c;c = (char) fis.read();Token token = new Token(NUMBER, str);tokens.add(token);return c;6) 其他字符处理函数/ 其它字符的情况private char dealWithOther(char c) throws IOException String str = new String();if (Character.isSpace(c) c = (char) fis.read();return c;if (compare(new String() + c, DELIMITER) str = str + c;tokens.add(new Token(DELIMITER, str);c = (char) fis.read();return c;while (compare(new String() + c, OPERATOR) str = str + c;c = (char) fis.read();if (compare(str, OPERATOR)tokens.add(new Token(OPERATOR, str);return c;8) 比较函数/ 将字符串与保留字、运算符、分隔符比较private boolean compare(String str1, int i) switch (i) case KEY_WORD:for (int j = 0; j keyword.length; j+) if (str1.equals(keywordj) return true;break;case OPERATOR:for (int j = 0; j operator.length; j+) if (str1.equals(operatorj) return true;break;case DELIMITER:for (int j = 0; j delimiter.length; j+) if (str1.equals(delimiterj) return true;break;return false;9)进行循环分析/ 执行方法public void doAnalysis() throws IOException char c = (char) fis.read();while (int) c != END_OF_FILE) if (isChar(c)/ 如果开始字符是字母,转入字母处理函数,可能结果为保留字或标识符c = dealWithChar(c);else if (isNumber(c)c = dealWithNumber(c);/ 如果开始字符是数字,转入数字处理函数,可能结果为整数elsec = dealWithOther(c);/ 开始字符不是字母数字,则可能为运算符、分隔符10) 输出单词符号/ 输出tokens中的内容public void printTokens() for (int i = 0; i tokens.size(); i+) int type = tokens.elementAt(i).type;String str = tokens.elementAt(i).str;System.out.println(i + 1) + : + ( + type + , + str+ );三、程序流程图: 图1 词法分析程序流程图 其他字符数字字字母是否否是否是是否此字符串为运算符此字符串为分隔符得到字符串保留字此字符串为标识符数字运算符字母处理程序数字处理程序其他字符处理程序读入一个字符字符开始读入源程序定义类别编码构造保留字、运算符、分隔符表结束输出单词符号写入单词符号表分析完成此字符串为保留字出错处理分隔符此字符串为数字4、 测试:C语言源程序:main() int i = 1; int m = 0; int i = 0; for ( i = 1;i 10; i+) m = m + i; 输出结果如下图所示: 图1 词法分析器实验结果五、实验总结:通过这次实验,我对词法分析器的工作过程有了进一步的理解。词法分析器通过扫描C语言源程序,调用词法分析程序将其分解为各类单词。在实验的过程中,虽然这个程序要求的功能比较简单,但是因为这个程序设计的表比较多,要考虑的东西也比较多,所以在调试的过程中,还是遇到了不少的错误。通过不断地Debug一步一步的执行,找出程序中的bug;经过不断地调试最终成功的完成了此程序。令我印象最深刻的问题是:因为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵州加班用餐管理办法
- 贵州首席技师管理办法
- 车辆违法违章管理办法
- 儿童培优助困关怀计划
- 兄弟间转卖房产合同范本
- 公司名称变更合同协议书
- 互联网软件开发项目成本控制保证措施
- 动物园入股协议合同模板
- 商铺合同包含物业费协议
- 外销轮椅车加工合同协议
- 2024临床输血指南
- 初中英语7-9年级上册超全语法梳理人教版
- 香港标准租约合同模板
- 《英语国家概况》课件
- 国能灵璧浍沟70MW风电项目 XGC15000TM-1000t履带吊-1000及SCC8000A-800t履带吊安拆方案
- 机动车驾驶培训理论科目一考试题库500题(含标准答案)
- 生物-湖湘名校教育联合体2024年下学期高二10月大联考试题和答案
- 2024年秋季新北师大版7年级上册数学教学课件 2.1.2 相反数、绝对值
- 动车组应急救援体系研究
- 墨菲定律课件教学课件
- 天津市语文高考试卷及答案指导(2025年)
评论
0/150
提交评论