武汉理工大学编译原理实验报告Word文档格式.docx

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

武汉理工大学编译原理实验报告Word文档格式.docx

《武汉理工大学编译原理实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《武汉理工大学编译原理实验报告Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。

武汉理工大学编译原理实验报告Word文档格式.docx

实验日期

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<

String,Integer>

identifierOrNumberTable=newHashMap<

>

();

//标识符或数值-标识符或数值种别码

keywordTable=newHashMap<

//关键字-关键字种别码

delimiterTable=newHashMap<

//界符-界符种别码

operatorTable=newHashMap<

//运算符-运算符种别码

static

identifierOrNumberTable.put("

error"

0);

identifier"

1);

number"

2);

keywordTable.put("

char"

3);

int"

4);

float"

5);

double"

6);

void"

7);

main"

8);

if"

9);

else"

10);

for"

11);

while"

12);

do"

13);

switch"

14);

break"

15);

continue"

16);

return"

17);

delimiterTable.put("

{"

18);

}"

19);

["

20);

]"

21);

("

22);

)"

23);

"

24);

;

"

25);

operatorTable.put("

<

26);

="

27);

28);

29);

=="

30);

31);

+"

32);

-"

33);

*"

34);

/"

35);

+="

36);

-="

37);

*="

38);

/="

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<

Token>

scan(Stringpath)throwsException;

LexerImpl.java:

publicclassLexerImplimplementsLexer

@Override

publicList<

scan(Stringpath)throwsException

List<

tokens=newArrayList<

Pathfile=Paths.get(path);

BufferedReaderin=(file);

Stringline;

while((line=in.readLine())!

=null)

intindex=0;

//若单词是一个以上的字符组成,此下标就会起作用

for(inti=0;

i<

line.length();

i++)

//标识符或关键字

if(Character.isLetter(line.charAt(i)))

index=i+1;

while(index<

line.length()&

&

Character.isLetterOrDigit(line.charAt(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("

),key);

i=index-1;

//整型非负数值

elseif(Character.isDigit(line.charAt(i)))

booleanerror=false;

if(!

error&

Character.isLetter(line.charAt(index)))

error=true;

StringtokenType=error?

"

Tokentoken=newToken(TokenTable.getTokenType(tokenType),line.substring(i,index));

//界符

elseif(TokenTable.containsDelimiter(String.valueOf(line.charAt(i))))

Stringd

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

当前位置:首页 > 成人教育 > 自考

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

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