编译原理实验1(同名23813)

上传人:F****n 文档编号:99618382 上传时间:2019-09-20 格式:DOC 页数:15 大小:296.50KB
返回 下载 相关 举报
编译原理实验1(同名23813)_第1页
第1页 / 共15页
编译原理实验1(同名23813)_第2页
第2页 / 共15页
编译原理实验1(同名23813)_第3页
第3页 / 共15页
编译原理实验1(同名23813)_第4页
第4页 / 共15页
编译原理实验1(同名23813)_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《编译原理实验1(同名23813)》由会员分享,可在线阅读,更多相关《编译原理实验1(同名23813)(15页珍藏版)》请在金锄头文库上搜索。

1、天津理工大学实验报告学院(系)名称:计算机与通信工程学院姓名学号专业班级实验项目实验一:词法分析器课程名称编译原理课程代码实验时间实验地点批改意见成绩教师签字: 1、 实验内容:实现标准C语言词法分析器。2、 实验要求:(1)单词种别编码要求基本字、运算符、界符:一符一种标识符:统一为一种;常量:按类型编码;(2)词法分析工作过程中建立符号表、常量表。 并以文本文件形式输出。(3) 词法分析的最后结果以文本文件形式输出。三、实验代码:输入的程序:package com.example;public class WordList private int row;private int type;

2、private int number;private String str;public WordList() super();/ TODO Auto-generated constructor stubpublic 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

3、.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;public void setStr(String str) this.str = str;Overridepublic String toString() retu

4、rn 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 stubpublic Word(int row, String string) super();this.row = row;this.string = string;public

5、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;Overridepublic String toString() return Word row= + row + , string= + string + ;package com.example;import java.io.File;import java.io.

6、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 caozuof

7、u = 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 addToChangLiangBi

8、ao(String s)changLiangBiao.add(s);return changLiangBiao;/判断一个字符是否是字母public boolean isLetter(char ch) if(ch=a&ch=A&ch=0&ch=9)return true;elsereturn false;/读入一个文件,将其内容转换成一个字符串public String getFile(String fileName)File file = new File(fileName);String str = null;try Reader reader = new FileReader(file)

9、;char c = new char1024;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;istr.length()-1;i+)ch = str.charAt(i);nc = str.charAt(i+1);if(ch=n)ch = $

10、;ts = ts+ch;else if(ch= |ch=t|ch=r)if(nc= |nc=t|nc=r)continue;elsech= ;ts = ts + ch;elsets = ts+ch;ch = str.charAt(str.length()-1);if(ch!= &ch!=r&ch!=t&ch!=n)ts = ts + ch;return ts;/将一个长字符串按照分割规则,分割成一个个的短的字符串public ArrayList fenGe(String str)ArrayList list = new ArrayList();String s = ;char ch;int i

11、;int row = 1;for(i=0;istr.length();i+) ch=str.charAt(i); if(i=0&ch= )continue;if(ch= )if(s!=)list.add(new Word(row,s);s = ;elsecontinue;else if(isDigit(ch)|isLetter(ch)if(s=|isDigit(s.charAt(s.length()-1)|isLetter(s.charAt(s.length()-1)s = s + ch;elselist.add(new Word(row,s);s = ;s = s + ch;elseif(isTwoOperator(s,ch)s = s + ch;elseif(s=&ch!=$)s = s + ch;else if(s=&ch=$)row +;elselist.add(new Word(row, s);s = ;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号