编译原理实验报告册.docx

上传人:b****1 文档编号:1346839 上传时间:2022-10-21 格式:DOCX 页数:19 大小:31.31KB
下载 相关 举报
编译原理实验报告册.docx_第1页
第1页 / 共19页
编译原理实验报告册.docx_第2页
第2页 / 共19页
编译原理实验报告册.docx_第3页
第3页 / 共19页
编译原理实验报告册.docx_第4页
第4页 / 共19页
编译原理实验报告册.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

编译原理实验报告册.docx

《编译原理实验报告册.docx》由会员分享,可在线阅读,更多相关《编译原理实验报告册.docx(19页珍藏版)》请在冰豆网上搜索。

编译原理实验报告册.docx

编译原理实验报告册

编译原理

实验报告

专业:

软件工程

班级:

2013级3班

学号:

姓名:

雷涛

2015至2016学年第2学期

计算机科学学院

实验报告说明

本课程实验从开课学期第9周开始,每周2学时上机实验课,第16周结束,其中第16周为实验检测,共14学时。

除统一安排的时间外,学生还可根据自己的实际适当安排课余时间上机。

实验课注意事项如下:

(1)每次实验前学生必须充分准备每次的实验内容,以保证每次上机实验的效果。

实验过程中必须独立完成。

(2)每次实验课将考勤,并作为实验成绩的重要依据。

(3)每次实验完成后,及时撰写实验报告并交实验指导老师批阅。

(4)实验报告中学生必须填写【实验地点】、【实验时间】、【实验过程】以及【实验总结】,注意:

必须手写完成,并独立撰写实验总结,严禁抄袭。

(5)每次实验完成后,请将实验结果发送到教师指定邮箱(jkxllj@)。

(6)学期结束时,每位同学应将自己的《实验报告册》交各班级班长或学习委员,由班长或学习委员以班级为单位、按学号从小到大排列好统一交给实验指导老师,否则无实验成绩。

附实验成绩登记表

实验名称

实验一

实验二

实验成绩

实验名称:

一个简单词法分析器的设计与实现指导教师:

刘丽娟

实验地点:

新实验楼项目一实验室

实验日期:

2016年5月10日成绩:

实验目的:

1.了解词法分析的任务;

2.掌握词法分析程序的工作流程。

实验内容:

定义模拟的简单语言的词法构成,编制词法分析程序,要求将用模拟语言书写的源程序进行词法分析,输出源程序清单,Token文件和错误信息文件。

若有错误,必须输出错误在源程序中行号和列号,并将符号表和字符串以文件的形式写出来。

基本要求:

1.写出该实验的实验步骤;

2.写出实验中遇到的问题及解决的方法。

实验步骤:

1,分析关键字(语言保留标识符等)

2,定义模拟的简单语言的词法构成

3,将关键字装入HashMap中

4,读入要分析的程序文件

5,词法分析

6,将分析结果tokens保存到List集合中

7,输出tokens到文件中

核心代码:

关键字:

publicclassKeyWords{

publicStringkeyWord="";

publicKeyWords(StringkeyWord){

this.keyWord=keyWord;

}

publicStringtoString(){

returnthis.keyWord;

}

/**列举写关键字*/

publicstaticfinalKeyWords

and=newKeyWords("&&"),

or=newKeyWords("||"),

equal=newKeyWords("=="),

For=newKeyWords("for"),

Do=newKeyWords("do"),

……

privatestaticListkeyWordsLists=newArrayList();

/**向外界提供对象集合*/

publicstaticListgetKeyWordsLists(){

keyWordsLists.add(and);

keyWordsLists.add(or);

keyWordsLists.add(equal);

keyWordsLists.add(For);

keyWordsLists.add(Do);

……

returnkeyWordsLists;

}

}

数据类型:

publicclassDataTypeextendsKeyWords{

publicStringdataType="";

publicDataType(Strings){

super(s);

this.dataType=s;

}

/**八种基本数据类型*/

publicstaticfinalDataType

Int=newDataType("int"),

Float=newDataType("float"),

……

privatestaticListdataTypeLists=newArrayList();

/**向外界提供对象集合*/

publicstaticListgetDataTypeLists(){

dataTypeLists.add(Boolean);

dataTypeLists.add(Float);

……

returndataTypeLists;

}

publicStringtoString(){

returnthis.dataType;

}

}

词法分析引擎:

publicclassLexicalAnalysis{

/**下一个读入字符*/

charnextChar='';

/**将KeyWords对象装在hashMap中*/

privateHashMapkeyWords=newHashMap();

/**将DataTypes对象装在hashMap中*/

privateHashMapdataTypes=newHashMap();

/**token序列(遍历过程中所有字符串的分割列表,以便于保存到文件中)*/

privateListtokenLists=newLinkedList();

/**读取文件变量*/

BufferedReaderreader=null;

/**保存当前是否读取到了文件的结尾*/

privateBooleanisEnd=false;

/**记录行号*/

publicstaticintlineNum=1;

/**将保存keyWords对象保存到HashMap中便于查询(其实key==value)*/

voidreserve(KeyWordsw){

keyWords.put(w.keyWord,w.toString());

}

/**装数据类型*/

voidreservedataTypes(DataTyped){

dataTypes.put(d.dataType,d.toString());

}

/**

*构造函数中将关键字和类型添加到hashtablewords中

*/

publicLexicalAnalysis(StringfilePath){

/*初始化读取文件变量*/

try{

reader=newBufferedReader(newFileReader(filePath));//读入文件

}catch(IOExceptione){

System.out.print(e);

}

/*关键字对象*/

Listlist1=KeyWords.getKeyWordsLists();

for(KeyWordsk:

list1){

this.reserve(k);

}

/*数据类型*/

Listlist=DataType.getDataTypeLists();

for(DataTypedataType:

list){

this.reserve(dataType);

this.reservedataTypes(dataType);

}

}

publicvoidreadChar()throwsIOException{

/*这里应该是使用的是*/

nextChar=(char)reader.read();

if((int)nextChar==0xffff){

//标志文件已读完

this.isEnd=true;

}

}

publicBooleanreadChar(charch)throwsIOException{

readChar();

if(this.nextChar!

=ch){

returnfalse;

}

this.nextChar='';

returntrue;

}

publicvoidscan()throwsIOException{

/*消除空白*/

for(;;readChar()){

if(nextChar==''||nextChar=='\t'){

continue;

}elseif(nextChar=='\n'){

tokenLists.add("第--"+lineNum+"--行");

lineNum=lineNum+1;

}else

break;

}

/*下面开始分割关键字,标识符等信息*/

switch(nextChar){

/*对于==,>=,<=,!

=的区分使用状态机实现*/

case'=':

if(readChar('=')){

tokenLists

.add("=="+"-------------------------KeyWords");

break;

}else{

tokenLists.add("="+"--------------------------KeyWords");

break;

}

case'>':

if(readChar('=')){

tokenLists

.add(">="+"--------------------------KeyWords");

break;

}else{

tokenLists.add(">"+"--------------------------KeyWords");

break;

}

case'<':

if(readChar('=')){

tokenLists

.add("<="+"-------------------------KeyWords");

break;

}else{

tokenLists.add("<"+"--------------------------KeyWords");

break;

}

case'!

':

if(readChar('=')){

tokenLi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1