武汉理工大学编译原理实验报告.docx
- 文档编号:2290991
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:28
- 大小:114.34KB
武汉理工大学编译原理实验报告.docx
《武汉理工大学编译原理实验报告.docx》由会员分享,可在线阅读,更多相关《武汉理工大学编译原理实验报告.docx(28页珍藏版)》请在冰豆网上搜索。
武汉理工大学编译原理实验报告
学生学号
实验课成绩
武汉理工大学
学生实验报告书
实验课程名称编译原理
开课学院计算机科学与技术学院
指导老师姓名饶文碧
学生姓名
学生专业班级软件zy1302
2015—2016学年第1学期
实验课程名称:
编译原理
实验项目名称
单词的词法分析程序设计
实验成绩
实验者
专业班级
软件zy1302
组别
同组者
实验日期
2015年12月29日
第一部分:
实验分析与设计(可加页)
一、实验内容描述(问题域描述)
1.问题描述:
对于常用高级语言(如Pascal、C语言)的各类单词进行词法分析。
2.实验内容:
完成对某一种常用高级语言(如Pascal、C语言、PL/0语言)的各类单词进行词法分析,即对源程序从左到右进行扫描,对组成源程序的字符串拼接成为单词;并把其转换成属性字输出。
3.实验要求:
(1)选择常用高级程序设计语言(如Pascal、C语言、PL/0语言)的源程序作为词法分析对象。
(2)根据教学要求和学生具体情况,从上列语言之一中选取它的一个适当大小的子集,可以选取一类典型单词,也可以尽可能使各种类型的单词都能兼顾到。
其基本要求是:
对源程序从左到右进行扫描,对组成源程序的字符串拼接成为单词;并把其转换成属性字输出。
二、实验设计(包括实验方案设计,实验手段的确定,实验步骤,实验过程等,用硬件逻辑或者算法描述)
Token.java:
publicclassToken
{
privateinttokenType;//单词种别码
privateStringtokenValue;//单词值
publicToken(inttokenType,StringtokenValue)
{
this.tokenType=tokenType;
this.tokenValue=tokenValue;
}
publicintgetTokenType()
{
returntokenType;
}
publicStringgetTokenValue()
{
returntokenValue;
}
}
TokenTable.java:
publicclassTokenTable
{
privatestaticHashMap
privatestaticHashMap
privatestaticHashMap
privatestaticHashMap
static
{
identifierOrNumberTable.put("error",0);
identifierOrNumberTable.put("identifier",1);
identifierOrNumberTable.put("number",2);
keywordTable.put("char",3);
keywordTable.put("int",4);
keywordTable.put("float",5);
keywordTable.put("double",6);
keywordTable.put("void",7);
keywordTable.put("main",8);
keywordTable.put("if",9);
keywordTable.put("else",10);
keywordTable.put("for",11);
keywordTable.put("while",12);
keywordTable.put("do",13);
keywordTable.put("switch",14);
keywordTable.put("break",15);
keywordTable.put("continue",16);
keywordTable.put("return",17);
delimiterTable.put("{",18);
delimiterTable.put("}",19);
delimiterTable.put("[",20);
delimiterTable.put("]",21);
delimiterTable.put("(",22);
delimiterTable.put(")",23);
delimiterTable.put(",",24);
delimiterTable.put(";",25);
operatorTable.put("<",26);
operatorTable.put("<=",27);
operatorTable.put(">",28);
operatorTable.put(">=",29);
operatorTable.put("==",30);
operatorTable.put("=",31);
operatorTable.put("+",32);
operatorTable.put("-",33);
operatorTable.put("*",34);
operatorTable.put("/",35);
operatorTable.put("+=",36);
operatorTable.put("-=",37);
operatorTable.put("*=",38);
operatorTable.put("/=",39);
}
publicstaticbooleancontainsKeyword(Stringkeyword)
{
returnkeywordTable.containsKey(keyword);
}
publicstaticbooleancontainsDelimiter(Stringdelimiter)
{
returndelimiterTable.containsKey(delimiter);
}
publicstaticIntegergetTokenType(Stringkey)
{
returnoperatorTable.containsKey(key)?
operatorTable.get(key)
:
(delimiterTable.containsKey(key)?
delimiterTable.get(key)
:
(keywordTable.containsKey(key)?
keywordTable.get(key)
:
(identifierOrNumberTable.containsKey(key)?
identifierOrNumberTable.get(key)
:
null)));
}
}
Lexer.java:
publicinterfaceLexer
{
/**
*对给定路径的文本文件中的文本,进行词法分析,返回可迭代的单词
*集合。
*@parampath要进行词法分析的文本文件的路径
*@return可迭代的单词集合
*@throwsException抛出所有异常(这么做是为了代码清晰,唉)
*/
Iterable
}
LexerImpl.java:
publicclassLexerImplimplementsLexer
{
@Override
publicList
{
List
Pathfile=Paths.get(path);
BufferedReaderin=(file);
Stringline;
while((line=in.readLine())!
=null)
{
intindex=0;//若单词是一个以上的字符组成,此下标就会起作用
for(inti=0;i { //标识符或关键字 if(Character.isLetter(line.charAt(i))) { index=i+1; while(index { index++; } Stringkey=line.substring(i,index); if(TokenTable.containsKeyword(key)) { Tokentoken=newToken(TokenTable.getTokenType(key),key); tokens.add(token); } else { Tokentoken=newToken(TokenTable.getTokenType("identifier"),key); tokens.add(token); } i=index-1; } //整型非负数值 elseif(Character.isDigit(line.charAt(i))) { index=i+1; booleanerror=false; while(index { if(! error&&Character.isLetter(line.charAt(index))) { error=true; } index++; } StringtokenType=error? "error": "number"; Tokentoken=newToken(TokenTable.getTokenType(tokenType),line.substring(i,index)); tokens.add(token); i=index-1; } //界符 elseif(TokenTable.containsDelimiter(String.valueOf(line.charAt(i)))) { Stringd
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉理工大学 编译 原理 实验 报告