编译原理实验1_第1页
编译原理实验1_第2页
编译原理实验1_第3页
编译原理实验1_第4页
编译原理实验1_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

第 1 页 共 15 页 天津理工大学实验报告 学院 系 名称 学院 系 名称 计算机与通信工程学院 姓名姓名学号学号专业专业 班级班级实验项目实验项目实验一 词法分析器 课程名称课程名称编译原理课程代码课程代码 实验时间实验时间实验地点实验地点 批改意见批改意见成绩成绩 教师签字 教师签字 1 实验内容 实现标准 C 语言词法分析器 2 实验要求 1 单词种别编码要求 基本字 运算符 界符 一符一种 标识符 统一为一种 常量 按类型编码 2 词法分析工作过程中建立符号表 常量表 并以文本文件形式输出 3 词法分析的最后结果以文本文件形式输出 三 实验代码 输入的程序 package com example public class WordList 第 2 页 共 15 页 private int row private int type private int number private String str public WordList super TODO Auto generated constructor stub public WordList int row int type int number String str super this row row this type type this number number this str str public int getRow return row public void setRow int row this row row public int getType return type public void setType int type this type type public int getNumber return number public void setNumber int number this number number public String getStr return str 第 3 页 共 15 页 public void setStr String str this str str Override public String toString return WorList row row type type number number str str package com example public class Word private int row private String string public Word super TODO Auto generated constructor stub public Word int row String string super this row row this string string public int getRow return row public void setRow int row this row row public String getString return string public void setString String string this string string 第 4 页 共 15 页 Override public String toString return Word row row string string package com example import java io File import java io FileReader import java io Reader import java util ArrayList import java util Arrays import java util List public class HanShu 定义符号表数组 常量表数组 关键字数组 List guanjianzi Arrays asList double long char int if else for while return break continue switch case default void struct static do short List caozuofu Arrays asList List fengefu Arrays asList ArrayList fuhaobiao new ArrayList ArrayList changLiangBiao new ArrayList 将字符加入到符号表中 public ArrayList addToFuHaoBiao String s fuhaobiao add s return fuhaobiao 将字符串加入到常量表中 public ArrayList addToChangLiangBiao String s changLiangBiao add s return changLiangBiao 判断一个字符是否是字母 public boolean isLetter char ch if ch a else return false 读入一个文件 将其内容转换成一个字符串 public String getFile String fileName File file new File fileName String str null try Reader reader new FileReader file char c new char 1024 int len reader read c str new String c 0 len reader close catch Exception e e printStackTrace return str 处理字符串中的换行和空格 public String yuChuLi String str String ts int i char ch nc for i 0 i str length 1 i ch str charAt i nc str charAt i 1 if ch n 第 6 页 共 15 页 ch ts ts ch else if ch ch t ch r if nc nc t nc r continue else ch ts ts ch else ts ts ch ch str charAt str length 1 if ch return ts 将一个长字符串按照分割规则 分割成一个个的短的字符串 public ArrayList fenGe String str ArrayList list new ArrayList String s char ch int i int row 1 for i 0 i str length i ch str charAt i if i 0 if ch if s list add new Word row s s else continue else if isDigit ch isLetter ch if s isDigit s charAt s length 1 isLetter s charAt s length 1 s s ch else list add new Word row s s 第 7 页 共 15 页 s s ch else if isTwoOperator s ch s s ch else if s else if s else list add new Word row s s if ch s s ch else row if s list add new Word row s return list 判断一个字符串是否符合规范 public boolean isIdent String str char ch int i for i 0 i str length i ch str charAt i if i 0 if i1 str length 0 return false else return true 将一个集合中的数据分类 判断他们是否是关键字或者是常量 亦或是标识符 public ArrayList fenlei ArrayList arr ArrayList wordList new ArrayList for int i 0 i arr size i String str arr get i getString int row arr get i getRow if isGuanJianZi str 0 WordList wList new WordList row isGuanJianZi str 1 isGuanJianZi str str wordList add wList else if isFenGeFu str 0 WordList list new WordList row guanjianzi size isFenGeFu str 2 isFenGeFu str str wordList add list else if isCaoZuoFu str 0 WordList list new WordList row guanjianzi size fengefu size isCaoZuoFu str 1 isCaoZuoFu str str wordList add list else if isGuanJianZi str 0 wordList add list else if isIdent str wordList add list return wordList 判断一个字符串是否是操作符 若是 则返回其在编码 否则返回 0 public int isCaoZuoFu String str int i for i 0 i caozuofu size i if caozuofu get i equals str break 第 9 页 共 15 页 if i caozuofu size return i else return 0 判断一个字符串是否是分割符 若是 则返回其在编码 否则返回 0 public int isFenGeFu String str int i for i 0 i fengefu size i if fengefu get i equals str break if i fengefu size return i else return 0 判断一个字符串是否是关键字 public int isGuanJianZi String string int i for i 0 i guanjianzi size i if string equals guanjianzi get i break if i guanjianzi size return i 1 else return 0 判断该字符是否在常量表中存在 public int isInChangLiangBiao String string int i for i 0 i changLiangBiao size i if changLiangBiao get i equals string break 第 10 页 共 15 页 if i changLiangBiao size return i else addToChangLiangBiao string return i 1 判断一个字符串是否是数字或者是双引号引起来的字符常量 public boolean ischangliang String string char a String str a char num string toCharArray StringBuffer hire new StringBuffer for int i 0 i string length i if Character isDigit num i hire append num i if string endsWith str if hire length string length return true else return false 判断一个字符串是否已经在字符表中存在 若不存在 则添加到字符表中 public int isbiaozhifu String string int i for i 0 i fuhaobiao size i if fuhaobiao get i equals string break if i fuhaobiao size return i else addToFuHaoBiao string return i 1 第 11 页 共 15 页 package com example import java io FileWriter import java io IOException import java util ArrayList import java util List public class Main public static void outPut ArrayList arrayList FileWriter writer try writer new FileWriter E 1 txt writer write row 字符在其原来文件中的行数 writer write r n writer write type 字符串类型 1 19 表示关键字 20 29 表示分隔符 30 49 表示操作符 50 表示标识符 51 表示常量符 writer write r n writer write number 字符在其所属类型中的排列表位置 writer write r n writer write str 表示该字符串 writer write r n writer write r n for int i 0 i arrayList size i writer write arrayList get i toString writer write r n writer close catch IOException e e printStackTrace public static void outPut List list String fileName int a FileWriter writer try writer new FileWriter fileName int temp if a 1 temp 0 else if a 2 temp 19 else temp 29 第 12

温馨提示

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

评论

0/150

提交评论