简单说明语句的翻译程序编译原理课程设计Word文档格式.doc
- 文档编号:13190994
- 上传时间:2022-10-08
- 格式:DOC
- 页数:13
- 大小:194.50KB
简单说明语句的翻译程序编译原理课程设计Word文档格式.doc
《简单说明语句的翻译程序编译原理课程设计Word文档格式.doc》由会员分享,可在线阅读,更多相关《简单说明语句的翻译程序编译原理课程设计Word文档格式.doc(13页珍藏版)》请在冰豆网上搜索。
可以根据《编译原理》课程所讲授的算法进行设计。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,说明书撰写等具体要求)
1.明确课程设计的目的和重要性,认真领会课程设计的题目,读懂课程设计指导书的要求,学会设计的基本方法与步骤,学会如何运用前修知识与收集、归纳相关资料解决具体问题的方法。
严格要求自己,要独立思考,按时、独立完成课程设计任务。
2.主要功能包括:
对简单说明语句文法给出该文法的属性文法,同时实现简单说明语句的翻译,即建立一个符号表,将简单说明语句所引入的名字id和性质登录在符号表中。
3.进行总体设计,详细设计:
包括算法的设计和数据结构设计。
系统实施、调试,合理使用出错处理程序。
4.设计报告:
要求层次清楚、整洁规范、不得相互抄袭。
正文字数不少于0.3万字。
包含内容:
①课程设计的题目。
②目录。
③正文:
包括引言、需求分析、总体设计及开发工具的选择,设计原则(给出语法分析方法及中间代码形式的描述、文法和属性文法的设计),数据结构与模块说明(功能与流程图)、详细的算法设计、软件调试、软件的测试方法和结果、有关技术的讨论、收获与体会等。
④结束语。
⑤参考文献。
⑥附录:
软件清单(或者附盘)。
时间安排:
消化资料、系统调查、形式描述 1天
系统分析、总体设计、实施计划 3天
撰写课程设计报告书 1天
指导教师签名:
2011年12月30日
系主任(或责任教师)签名:
2011年12月30日
目录
1.概述:
设计题目,设计目的,设计任务…………….4
2.设计环境与工具……………………………………….4
3.设计原则……………………………………………….4
4.简要的分析与概要设计……………………………….5
5.详细的算法描述……………………………………….6
6.测试结果………………………………………………11
7.收获与体会……………………………………………11
8.参考文献………………………………………………12
一.概述
1.1设计题目
1.2设计目的与任务
对教材P196中的简单说明语句文法,给出该文法的属性文法,同时实现简单说明语句的翻译,即建立一个符号表,将简单说明语句所引入的名字id和性质登录在符号表中.
二.设计环境与工具
操作系统:
Windows7
工具:
vc++6.0
语言:
c++语言
三.设计原则
程序设计语言中最简单的说明语句的语法描述为:
D→integer<
namelist>
∣real<
<
namelise>
→<
id∣id
即使用关键字integer和real定义一串名字的性质。
对这种说明语句的翻译是指在符号表中登录该名和性质。
D→D’,id
∣integerid
∣realid
现在来定义这些产生式所对应的语义动作,给非终结符D一个语义变量D.att,用以记录说明语句所引入的名字的性质(int还是real)。
使用过程enter(id,A)把名字id和性质A登录在名表中。
(1)D→integerid{enter(id,int);
D.att:
=int}
(2)D→realid{enter(id,real);
=real}
(3)D→D’,id{enter(id,D’.att);
=D’.att}
四.简要的分析与概要设计
·
程序设计语言中的说明语句旨在定义各种形式的有名实体,如常量、变量、数组、记录(结构)、过程、子程序等等,说明语句的种类也多,对象说明、变量说明、类型说明、过程说明等等。
编译程序把说明语句中定义的名字和性质登记在符号表中,用以检查名字的引用和说明是否一致。
许多说明语句的翻译并不生成相应的目标代码。
过程说明和动态数组的说明有相应的代码。
流程图
开始
输入数据
初始化
调用函数判断
Error
输出
五.详细的算法描述
#include<
iostream.h>
stdio.h>
ctype.h>
stdlib.h>
string.h>
#defineBSIZE128
#defineEOS'
\0'
#defineSTRMAX999
#defineSYMMAX100
intlineno;
charlexemes[STRMAX];
intlastchar=-1;
intlastentry=0;
structentry{
char*lexptr;
inttoken;
}symtable[SYMMAX];
intinsert(chars[],inttok);
voiderror(char*m)
{
printf("
line%d:
%s!
\n"
lineno,m);
exit
(1);
}
voidinit()
structentrykeywords[]={
"
int"
1,"
float"
2,"
char"
3,"
bool"
4,0,0};
structentry*p;
for(p=keywords;
p->
token;
p++)
{
insert(p->
lexptr,p->
token);
}
intlookup(chars[])
intp;
for(p=lastentry;
p>
0;
p--)
if(strcmp(symtable[p].lexptr,s)==0)
returnp;
return0;
intinsert(chars[],inttok)
intlen;
len=strlen(s);
if(lastentry+1==SYMMAX)
error("
symbolarryfull"
);
lastentry++;
symtable[lastentry].token=tok;
symtable[lastentry].lexptr=&
lexemes[lastchar+1];
lastchar=lastchar+len+1;
strcpy(symtable[lastentry].lexptr,s);
returnlastentry;
voidlexan()
charlexbuf[BSIZE];
lineno=1;
chart;
charch='
;
'
cout<
"
请输入简单说明语句(以#结束)!
:
endl;
t=getchar();
while(t!
='
#'
)
if(t=='
'
||t=='
\t'
'
;
elseif(t=='
\n'
lineno++;
ch='
elseif(isdigit(t))
error("
indentifierdefineerror"
elseif(isalpha(t))
{
intb=0;
while(isalnum(t))
{
lexbuf[b]=t;
t=getchar();
b++;
if(b==BSIZE)
error("
compileerror"
}
ungetc(t,stdin);
lexbuf[b]=EOS;
if(ch=='
p=lookup(lexbuf);
ch='
/'
if(p<
1||p>
4)
{
nosuch'
type'
}
else
inti=lookup(lexbuf);
if(i!
=0)
{
if(i>
error("
redefineerror"
else
error("
keywordserror"
else
insert(lexbuf,p);
}
t=getchar();
}
intmain()
简单说明语句的翻译"
endl<
charh='
y'
while(h=='
||h=='
Y'
lastentry=0;
charjudge;
init();
lexan();
cout<
符号表创建成功!
是否打印此符号表y/n"
cin>
>
judge;
cout<
if(judge=='
||judge=='
for(intk=5;
k<
=lastentry;
k++)
{
cout<
标识符:
"
symtable[k].lexptr<
类型:
symtable[symtable[k].token].lexptr<
}
----------------------------------------------------"
是否重新输入说明语句?
y/n"
cin>
h;
exit(0);
六.测试结果
七.收获与体会
通过这次课程设计,让我对简单语句的翻译有了更深刻的了解,并且通过编程来实现。
虽然做得并不是很好,但让我对编译原理这门课有了更深刻的认识。
而且我觉得学习一门编程语言,仅仅靠掌握一些书本上的概念性知识是远远不够的,更重要的是要锻炼自己的动手能力和独立思考的能力,还有编程能力。
学习都是靠着平时一点一滴的积累,容不得半点虚假。
这次课程设计是我真正认识到了自己的不足之处,正因为平时没有好好对待实验,才使得这次课程设计有了一点困惑。
但基本上都克服了。
总结下来,就是学习一定要靠平时的努力,不能临时抱佛脚,只有靠一点一滴的积累,做起事来才能事半功倍。
总之这次课程设计让我受益匪浅。
八
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 说明 语句 翻译 程序 编译 原理 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)