编译原理课程设计词法分析器设计Word格式.docx

上传人:b****5 文档编号:15813570 上传时间:2022-11-16 格式:DOCX 页数:11 大小:115.65KB
下载 相关 举报
编译原理课程设计词法分析器设计Word格式.docx_第1页
第1页 / 共11页
编译原理课程设计词法分析器设计Word格式.docx_第2页
第2页 / 共11页
编译原理课程设计词法分析器设计Word格式.docx_第3页
第3页 / 共11页
编译原理课程设计词法分析器设计Word格式.docx_第4页
第4页 / 共11页
编译原理课程设计词法分析器设计Word格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

编译原理课程设计词法分析器设计Word格式.docx

《编译原理课程设计词法分析器设计Word格式.docx》由会员分享,可在线阅读,更多相关《编译原理课程设计词法分析器设计Word格式.docx(11页珍藏版)》请在冰豆网上搜索。

编译原理课程设计词法分析器设计Word格式.docx

在文本文档中输出每个单词对应的编码和值。

2、编译对象

声明和其他标记

赋值语句

分支结构语句

循环语句

1.4设计时间

2012年12月23日至2012年12月28日

2设计环境与工具

Windows7环境下使用C++语言。

3设计要求

1、使用任何一种编程语言编制一个词法分析程序。

2、该程序能够识别的单词有5类:

(1)关键字:

"

long"

"

float"

static"

char"

short"

switch"

int"

const"

if"

then"

else"

for"

while"

break"

(2)常数:

任何整型常数

(3)标识符:

字母打头的字母数字串。

<

标识符>

→<

<

字母>

数字>

(4)运算符:

算术运算符+,-,*,/

关系运算符>

>

=,<

<

=,=,<

>

(5)界符:

(,),”,!

,;

3、源程序放在的文本文档中。

4、产生下面9个单词:

(1)a标识符

(2)=赋值(3)(左括号(4)b标识符

(5)+加号(6)c标识符(7))右括号(8)*乘号(9)3常数

4分析与概要设计

在词法分析程序设计中,以只读方式读取一个文件,文件内容的末尾以“#”作为结束符。

系统将读取的字符自动送入缓冲区。

扫描第一个字符,看匹配的类型,并进行相应的类型分析,满足判断类型时,输出其种别码和值。

运用指针进行处理,必须熟悉字符串函数的使用。

程序要对非法的字符做出错误提示。

文本扫描看结尾是否是“#”。

最后关闭文件,释放指针。

5算法流程图

6源程序清单

#include<

iostream>

string>

fstream>

usingnamespacestd;

charch;

//当前从文件中读取的字符

charTake[20];

//存放Take

intk;

//当前Take中的第K个字符

ifstreamfin;

ofstreamfout("

output.txt"

);

char*Keywords[]={"

"

};

//保留字

intlpos=1;

//列号

voidgetChar()//读入文件的下一个字符

{

lpos++;

ch=fin.get();

}

boolisInteger()

if(ch>

='

0'

&

ch<

9'

returntrue;

else

returnfalse;

boolisLetter()

if(((ch>

a'

)&

(ch<

z'

))||(ch>

A'

Z'

))

voidcontact()//将文件中读入的字符加入Take数组的最后

Take[k]=ch;

k++;

boolisKeyword()//判断Take是否为保留字

for(inti=0;

i<

14;

i++)

{

if(strcmp(Keywords[i],Take)==0)

returntrue;

else

returnfalse;

}

voidclear()

20;

Take[i]='

\0'

;

k=0;

voidyyLex()

switch(ch)

case'

:

1'

2'

3'

4'

5'

6'

7'

8'

contact();

getChar();

{

while(isInteger())

{

contact();

getChar();

}

fout<

常数"

'

\t'

Take<

endl;

}

clear();

yyLex();

break;

case'

b'

c'

d'

e'

f'

g'

h'

i'

j'

k'

l'

m'

n'

u'

o'

p'

q'

r'

s'

t'

y'

v'

w'

x'

B'

C'

D'

E'

F'

G'

H'

I'

J'

K'

L'

M'

N'

O'

P'

Q'

R'

S'

T'

U'

V'

W'

X'

Y'

while(isLetter()||isInteger())

contact();

getChar();

if(isKeyword())

关键字"

clear();

yyLex();

else

标识符"

('

)'

'

!

fout<

界符"

+'

-'

*'

/'

算术运算符"

if(ch=='

关系运算符"

clear();

intmain()

fin.open("

input.txt"

while(!

fin.eof())

if(ch!

||ch!

#'

yyLex();

getChar();

fout.close();

return0;

7软件测试

7.1设计的测试题目

a=(b+c)*3

7.2测试结果截图

8总结

本次设计达到了预先的实验目的,基于C++语言小型编译器是对本学科的一次综合性的检验,是一次理论与实践相结合的实践。

我在整个程序的编写过程中,巩固了书本上的理论知识,并且加深了词法分析器的原理。

同时也遇到了很多的困难,比如C++语言有所欠缺,编译方法的原理还有待弥补与继续学习。

由于时间仓促和自己所掌握知识不完善,此设计只是实现了简单的词法分析。

对C++字符串函数不是很熟悉。

程序中可能会出现这一类情况,如:

读入的词语为:

a=(b+c)#*3#。

本设计对在词语中间出现的“#”没有能很好的处理。

希望能在接下来的时间里,能把这个问题解决掉。

借此机会,我要特别感谢我的指导老师董改芳,在我的课程设计和此门课程的学习中给予我的悉心指导和帮助。

老师的一丝不苟的工作和对教学的认真态度深深感染了我。

最后,向支持和帮助过我的老师和同学表示我深深的谢意。

9参考文献

[1]劳顿(Louden,K.C).编译原理及实践.机械工业出版社.2002.3

[2]胡元义邓亚玲.编译原理实践教程.西安电子科技大学出版社.2002.

[3]柯丽芳胡元义.编译原理学习指导.西安电子科技大学出版社.2004.

[4]内蒙古农业大学《编译方法课程设计》指导书。

董改芳主编

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

当前位置:首页 > 初中教育 > 学科竞赛

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

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