电子科大-编译原理实验报告(得分80分)文档格式.docx
- 文档编号:13194508
- 上传时间:2022-10-08
- 格式:DOCX
- 页数:37
- 大小:110.29KB
电子科大-编译原理实验报告(得分80分)文档格式.docx
《电子科大-编译原理实验报告(得分80分)文档格式.docx》由会员分享,可在线阅读,更多相关《电子科大-编译原理实验报告(得分80分)文档格式.docx(37页珍藏版)》请在冰豆网上搜索。
1.操作系统:
WindowsXP
2.开发工具:
VS2013
七、实验步骤
(1)在VS2013中创建工程;
(2)编写输入输出,初始化,错误处理等函数;
(3)建立相应的单词符号与种别对照表,根据状态转换图编写相应的处理函数;
(4)运行代码进行调试;
(5)编写测试需要的输入文件:
.pas文件;
(6)生成.dyd文件。
8、实验数据及结果分析
编码完成后将测试程序放入debug文件夹中,测试程序如下图:
代码运行成功后在debug文件夹中会产生对应的exe,在cmd中运行后,会在
debug文件夹中生成后缀为dyd和err的文件,打开dyd如下图所示:
因为没有错误,所以对应的test1.err的文件为空
可以对源程序进行词法分析,如果有错给出出错信息和所在行数,如果无错则生成二元式文件。
九、实验结论
词法分析器的功能是:
从左到右逐个的扫描源程序的字符串,按照词法规则,识别出单词符号作为输出,对识别过程中发现的词法错误,输出有关的错误信息。
十、总结及心得体会
通过本次实验,即对词法分析程序的设计,锻炼了自己的编程能力,同时加深了自己对词法分析器的理解和掌握以及对待编译这门课程的理解,提高了自己的动手能力,在编码的过程中也遇到了许多问题,例如如何解决产生的文件后端对齐等等问题,让我的编码能力在此次实验中得到了一定的提高。
十一、对本实验过程及方法、手段的改进建议
要先了解词法分析器的功能以及输入输出形式,熟练的掌握状态转化
图。
报告评分:
指导教师签字:
实验参考源代码如下:
#include<
stdio.h>
#include<
string.h>
Windows.h>
#defineMAX_COUNT2048
#defineILLEGAL_CHAR_ERR1
#defineUNKNOWN_OPERATOR_ERR2
chargetnbc()
{
charch;
ch=getchar();
while
(1)
if(ch=='
\r'
||ch=='
\t'
'
)
}
else
ch=getchar();
break;
returnch;
boolletter(charcharacter)
if((character>
='
a'
&
character<
z'
)||(character>
A'
Z'
))returntrue;
returnfalse;
booldigit(charcharacter)
if(character>
0'
9'
)returntrue;
voidretract(char&
character)
ungetc(character,stdin);
character=NULL;
intreserve(char*token)
if(strcmp(token,"
begin"
)==0)return1;
elseif(strcmp(token,"
end"
)==0)return2;
integer"
)==0)return3;
if"
)==0)return4;
then"
)==0)return5;
else"
)==0)return6;
function"
)==0)return7;
read"
)==0)return8;
write"
)==0)return9;
return0;
intsymbol()
return10;
intconstant()
return11;
voidoutput(constchar*token,intkindNum)
printf("
%16s%2d\n"
token,kindNum);
boolerror(intlineNum,interrNum)
char*errInfo;
switch(errNum)
caseILLEGAL_CHAR_ERR:
errInfo="
出现字母表以外的非法字符"
;
caseUNKNOWN_OPERATOR_ERR:
出现未知运算符"
break;
default:
未知错误"
if(fprintf(stderr,"
***LINE:
%d%s\n"
lineNum,errInfo)>
=0)returntrue;
boolLexAnalyze()
staticintlineNum=1;
charcharacter;
chartoken[17]="
"
character=getnbc();
switch(character)
case'
\n'
:
output("
EOLN"
24);
lineNum++;
caseEOF:
EOF"
25);
returnfalse;
b'
c'
d'
e'
f'
g'
h'
i'
j'
k'
l'
m'
n'
o'
p'
q'
r'
s'
t'
u'
v'
w'
x'
y'
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(letter(character)||digit(character))
chars[2]={character};
strcat(token,s);
character=getchar();
retract(character);
intnum;
num=reserve(token);
if(num!
=0)
output(token,num);
intval;
val=symbol();
output(token,val);
1'
2'
3'
4'
5'
6'
7'
8'
while(digit(character))
intval;
val=constant();
='
="
12);
<
'
character=getchar();
if(character=='
>
13);
elseif(character=='
14);
15);
case'
16);
output("
17);
-'
-"
18);
*'
*"
19);
20);
error(lineNum,2);
//输出“未知运算符”错误
('
("
21);
)'
)"
2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子科 编译 原理 实验 报告 得分 80