编译原理实验报告--词法分析器
编译原理实验—词法分析器
姓名:王吉军
学号:09208015
班级:软件92
一、实验目的
通过动手实践,使学生对构造编译系统的基本理论、编译程序的基本结构有更为深入的理解和掌握;使学生掌握编译程序设计的基本方法和步骤;能够设计实现编译系统的重要环节。同时增强编写和调试程序的能力。
二、实验内容及要求
对某特定语言A ,构造其词法规则。
该语言的单词符号包括:
保留字(见左下表)、标识符(字母大小写不敏感)、整型常数、界符及运算符(见右下表) 。
功能要求如下所示:
·按单词符号出现的顺序,返回二元组序列,并输出。
·出现的标识符存放在标识符表,整型常数存放在常数表,并输出这两个表格。
·如果出现词法错误,报出:错误类型,位置(行,列)。
·处理段注释(/* */),行注释(//)。
·有段注释时仍可以正确指出词法错误位置(行,列)。
三、实验过程
1、词法形式化描述
使用正则文法进行描述,则可以得到如下的正规式:
其中ID表示标识符,NUM表示整型常量,RES表示保留字,DEL表示界符,OPR表示运算符。
A→(ID | NUM | RES | DEL | OPR) *
ID→letter(letter | didit)*
NUM→digit digit*
letter→a| … | z | A | … | Z
digit→ 0 | … | 9
RES→ program | begin | end | var | int | and | or | not | if | then | else | while | do
DEL→( | ) | . | ; | ,
OPR→+ | * | := | > | < | = | >= | <= | <>
如果关键字、标识符和常数之间没有确定的算符或界符作间隔,则至少用一个空格作间隔。空格由空白、制表符和换行符组成。
2、单词种别定义;
3、状态转换图;
语言A的词法分析的状态转换图如下所示:
空格符,制表符
或回车符字母或数字
4、运行环境介绍;
本次实验采用MyEclipse进行代码的编写和编译及运行,编写语言为java 语言;程序的运行环境为windows 7 旗舰版
5、关键算法的流程图及文字解释;
程序中用到的函数列表:
A类定义各种类函数以及包含主函数public static void main()
变量ch储存当前最新读进的字符的地址
strToken存放当前字符串
main() //主函数
Analysis()//分析函数,每次读入一行文件,进行识别处理;
charGetChar(); //取得当前位置的字符的内容放入ch,并提前指向下一个字符;
char GetNextChar();//取得当前位置的下一位置的字符,
StringConCat(); //将ch指向的字符连接到strToken后面
isLetter(); //判断ch指向的字符是否字母
isDigit(); //判断ch指向的字符是否数字
add(p,str); //向p表中插入当前strToken的字符串
BooleanfindKeyWord(str); //检测当前strToken中的字符串是否保留字,若是,则执行getKeyWordKey(str),返回保留字的id,否则,判别其是否是已存在的标示符,若是,返回标示符的id以及该标示符在表中的位置;
findPunctuation()//判断是否是一个保留的符号;
getindex() //返回已经识别的标示符或者是数字的位置下标;
Booleanexist(); //检测当前strToken中的字符串是否在标识符表中已存在,若是,则返回true,否则返回false
void callError(); //出错处理过程,将错误的位置报告出来
(1)main()函数的流程图如下:
(2)具体分析流程图:
6、测试报告(测试用例,测试结果);
首先输入一个不含错误的程序(两种注释)进行检测:
运行后在控制台上得到的结果如下所示:
得到的二元组序列如下:
经检验,输出的是正确的二元组序列。
再输入一个含有错误的程序(含有注释)进行检验:
运行后在控制台上得到的结果如下所示:
经检验,错误的位置是正确的
如果是空文件,编译也会通过;
四、实验总结
通过本次试验,我加深了对编译原理中的词法分析的理解,同时通过动手,更加锻炼了自己。本次试验由于使用的刚刚学习的java语言,通过这次机会加强了自己对java语言的熟悉的使用。
在这次试验中,感谢老师的认真的讲解与同学的无私的帮助。总结来说,自己在这次试验中收获很大。
附:以下为本次实验的源代码:
package Analysis;
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileReader;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.Map;
public class A {
private static char ch;
private static String strToken;
private static int index = 0;
private static int line = 1;
private static booleannoteTag=false;
private Map
privateHashMap
// get and set 函数
public char getCh() {
returnch;
}
public void setCh(char ch) {
A.ch = ch;
}
public String getStrToken() {
returnstrToken;
}
public void setStrToken(String strToken) {
A.strToken = strToken;
}
public void setPunctuations(HashMap
}
public Map
return punctuations;
}
public void setKeywords(Map
}
public Map
return keywords;
}
// 构造函数
public A() {
this.keywords = new HashMap
keywords.put(1,"Program");
keywords.put(2,"begin");
keywords.put(3,"end");
keywords.put(4,"var");
keywords.put(5,"int");
keywords.put(6,"and");
keywords.put(7,"or");
keywords.put(8,"not");
keywords.put(9,"if");
keywords.put(10,"then");
keywords.put(11,"else");
keywords.put(12,"while");
keywords.put(13,"do");
this.punctuations = new HashMap
punctuations.put("+", 16);
punctuations.put("*", 17);
punctuations.put("(", 18);
punctuations.put(")", 19);
punctuations.put(",", 20);
punctuations.put(";", 21);
punctuations.put(":=", 22);
punctuations.put(">", 23);
punctuations.put(">=", 24);
punctuations.put("<", 25);
punctuations.pu …… 此处隐藏:5259字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [基础教育]2016-2022年中国钢芯铝绞线市场现状调
- [基础教育]语文部编版初一语文下册练习题 句式变
- [基础教育]南京继续教育参考答案--深入学习贯彻习
- [基础教育]国旗下讲话稿——珍惜时间好读书
- [基础教育]北师大版六年级数学下册圆锥的体积教学
- [基础教育]人教版-音乐-四年级下册-四年级下册音
- [基础教育]乔布斯2019年斯坦福大学毕业典礼致辞.d
- [基础教育]2015年加油站安全知识竞赛试题及答案
- [基础教育]2020年教师年度考核个人工作总结
- [基础教育]2019年中考历史试题-2019年大庆市初中
- [基础教育]初三仁爱英语第一轮总复习教案
- [基础教育]SG-A094电气配管安装工程隐蔽验收记录
- [基础教育]冀教版小学数学三年级下册第六单元教材
- [基础教育]青岛版(五制)小学科学二年级下册16《制
- [基础教育]2018-2019年初中科学初一中考真卷测试
- [基础教育]幼儿园大班期末简短评语精选
- [基础教育]2018云南临沧公务员考试申论技巧:这样
- [基础教育]学校食堂经营管理方案
- [基础教育]新中国砥砺奋进的七十年原文
- [基础教育]真空泵的选型及常用计算公式
- 高职田径课程教学现状与对策
- 全髋关节置换术在老年股骨颈骨折患者中
- 青人社厅函〔2016〕576号(附件)工资
- cp101-07砂子检验作业指导书 - secret
- 微观经济学 第八章 博弈论 习题
- 2014高考真题(词语运用)汇编及答案
- 2018年人教版七年级语文下册《第三单元
- 苏教版数学四年级上册第一单元试题 - M
- 四川大学新闻与传播考研2000-2010年真
- 浙江万里学院英语专业四年制本科教学计
- 最新2018马年事业祝福语-范文word版(2
- 最全模具行业术语英文翻译
- 皮亚杰的发展心理学理论
- 64篇高考情景式默写 练习题及答案
- 仿写(学生稿)
- 《SQL Server数据库技术》试卷A
- 第七章作业答案
- 江苏省赣榆县海头高级中学高中语文必修
- 浙江省2001年10月自考正常人体解剖学答
- 2012英语重点短语




