C语言词法分析实验Word下载.docx
- 文档编号:15882085
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:15
- 大小:102.17KB
C语言词法分析实验Word下载.docx
《C语言词法分析实验Word下载.docx》由会员分享,可在线阅读,更多相关《C语言词法分析实验Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
2.编写的分析程序能够正确识别源程序中的单词符号;
3.识别出的单词以<
单词符号,种别码>
的形式保存在符号表中(链表);
4.词法分析中源程序的输入以.c格式,分析后的符号表,将二元组保存在.txt文件中。
实验内容:
选择高级语言(C语言),编制它的词法分析程序。
词法分析程序的实现可以采用任何一种编程工具。
实验原理:
1、算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号;
2、其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。
实验分析:
(1)关键字:
ifelsewhiledocaseintbreak等所有的关键字都是小写。
(2)运算符和界符:
=+-*/<
<
=<
>
>
==;
()等
(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:
ID=_|letter(letter|digit)*
NUM=digitdigit*
(4)空格有空白、制表符和换行符组成。
空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。
(5)注释被忽略
实验流程图:
实验环境:
需要TC、VC++6.0等开发工具作为本次试验的环境。
实验步骤:
1、准备:
用TC、VC++等开发工具;
2、对本实验的任务进行分析,确定实现功能的函数;
3、写好程序,仔细修改函数;
4、上机操作:
输入源程序,修改、调试,运行;
5、写好试验报告;
实验调试过程及测试结果:
/*******************************源代码******************************/
#include<
stdio.h>
stdlib.h>
#include<
ctype.h>
string.h>
voidmain()
{
FILE*fp,*fp1;
inthanjsq=1;
//行计数器,保存行号
intguanjz(charch1[]);
//关键字和标识符判断
charch,infile[15],outfile[15];
//定义输入和输出文件名
printf("
*****************Entertheinfilename*******************\n"
);
scanf("
%s"
infile);
//输入需要扫描的文件名
*****************Entertheoutfilename******************\n"
outfile);
//输入需要另存为的文件名
if((fp=fopen(infile,"
r"
))==NULL)//打开需要扫描的文件
{
printf("
cannotopenfile\n"
exit(0);
}
if((fp1=fopen(outfile,"
w"
))==NULL)//打开需要存入的文件
\n*********************************************************\n"
*》开始进行词法分析《*\n"
*********************************************************\n"
行号字符串种别码\n"
fprintf(fp1,"
while(!
feof(fp))
ch=fgetc(fp);
if(ch==10)hanjsq++;
/**********************扫描头文件单词及保留字***********************/
if(isalpha(ch)||ch=='
_'
)//如果第一个字符为字母或下划线则判断为标识符
{
inti=0;
charch1[30];
//假定每个标识符最长为
ch1[i++]=ch;
//将ch保存到ch1[0]中并使i自加1
while(!
{
ch=fgetc(fp);
if(ch==10)hanjsq++;
//如果ch为换行符,则行计数器自加1
if(isalpha(ch)||isdigit(ch)||ch=='
)
{//如果ch为字母、数字或下划线就把ch放到ch1[i]中并使i自加1
ch1[i++]=ch;
}
if(ch=='
.'
)//如果ch为小数点则判断是否为头文件
{
if((ch=fgetc(fp))=='
h'
)//如果小数点后一位为h则判定其为头文件
{
if(ch==10)hanjsq++;
ch1[i++]='
;
ch1[i]='
\0'
//把结束标志放到ch1[i]中作为单词结束标志
line%d:
%s83\n"
hanjsq,ch1);
//以字符串形式输出ch1
fprintf(fp1,"
break;
}
else//如果小数点后一位不是h则判定其为标识符
fseek(fp,-1,1);
//fp回退1
printf("
%s%d\n"
hanjsq,ch1,guanjz(ch1));
fprintf(fp1,"
if(!
isalpha(ch)&
&
!
isdigit(ch)&
ch!
='
&
{//如果ch不为字母、数字、下划线和点时判断其为标识符
ch1[i]='
break;
}
}
/************************扫描数字*************************/
if(isdigit(ch)||ch=='
-'
)//如果ch为数字或'
{
if(isdigit(ch))//如果ch为数字
printf("
%c"
hanjsq,ch);
fprintf(fp1,"
while(!
{
ch=fgetc(fp);
//预读一位如果ch为数字和点则循环输出
if(isdigit(ch)||ch=='
%c"
ch);
else//否则视为数字结束
46\n"
//回退一位
ch='
0'
//置ch为0,以免影响下面误判并顺利退出扫描数字
}
}
if(ch=='
)//如果ch为'
//预读一位
)//如果ch还是为'
则判断为自减符'
--'
printf("
--80\n"
hanjsq);
fprintf(fp1,"
'
,则判断为结构体运算符'
->
->
81\n"
if(isdigit(ch))//如果ch为数字则可能为减号或负号
fseek(fp,-3,1);
//回退3为判断
if(isdigit(ch))//如果ch为数字则判断'
为减号
%c79\n"
else//否则判断'
为负号
ch=fgetc(fp);
while(!
printf("
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 词法 分析 实验