汇编原理词法分析器.docx
- 文档编号:10508902
- 上传时间:2023-02-17
- 格式:DOCX
- 页数:8
- 大小:76.31KB
汇编原理词法分析器.docx
《汇编原理词法分析器.docx》由会员分享,可在线阅读,更多相关《汇编原理词法分析器.docx(8页珍藏版)》请在冰豆网上搜索。
汇编原理词法分析器
《编译原理》
实验报告
实验名称:
词法分析
词法分析器的设计
一、实验目的
通过完成词法分析程序,了解词法分析的过程。
编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。
并依次输出各个单词的内部编码及单词符号自身值。
二、实验环境
操作系统:
windowxp
编写环境:
visualc++、c-free、turboc
编写语言:
c语言
分析语言:
c语言
三、实验内容
(2,”main”)
(5,”(“)
(5,”)“)
(5,”{“)
(1,”int”)
(2,”a”)
(5,”,”)
(2,”b”)
(5,”;”)
(2,”a”)
(4,”=”)
(3,”10”)
(5,”;”)
(2,”b”)
(4,”=”)
(2,”a”)
(4,”+”)
(3,”20”)
(5,”;”)
(5,”}“)
程序输入/输出示例:
对c语言进行词法分析,把输入的字符串形式的源程序分割成一个个单词符号,其词法描述如下:
1识别保留字:
if、int、for、while、do、return、break、continue
2其他的都识别为标识符;
3常数为无符号整形数;
4运算符包括:
+、-、*、/、=、>、<、>=、<=、!
=
5分隔符包括:
、;、{、}、(、)
如源程序为C语言。
输入如下一段:
main()
{
int a,b;
a=10;
b=a+20;
}
要求输出如右图。
四、实验代码
#include
#include"string.h"
#defineal30/*符号的最大长度*/
FILE*fin;
FILE*fout;
intcc,ll,cx,linecount,num;
charline[81];
charch;
charfname[al],fwname[al],a[al+1];
voidmain()
{
intgetsym();
printf("请输入要分析的文件名:
");
scanf("%s",fname);
fin=fopen(fname,"r");
printf("请输入要保存的文件名:
");
scanf("%s",fwname);
fout=fopen(fwname,"w");
cc=ll=0;
ch='';
if(fin)
{
while(getsym()!
=-1)
{
}
}
}
intgetch()
{
if(cc==ll)
{//缓冲是否被读取完毕
if(feof(fin))
{
return-1;
}
ll=0;
cc=0;
ch='';
while(ch!
=10)
{
if(EOF==fscanf(fin,"%c",&ch))
{
line[ll]=0;
break;
}
line[ll]=ch;
ll++;
}
}
ch=line[cc];
cc++;
return0;
}
intgetsym()
{
intk;
while(ch==''||ch==10||ch==9)/*判断字符是否为空,空跳过取下一个字符*/
{
if(-1==getch())
{return-1;}
}
if(ch>='a'&&ch<='z')
{//如果是字符或以字符开头
intb=0;
k=0;
do
{
if(k { a[k]=ch; k++; } if(-1==getch()){a[k]=0;b=1;break;} }while(ch>='a'&&ch<='z'||ch>='0'&&ch<='9'); a[k]='\0'; if(strcmp("if",a)==0||strcmp("int",a)==0||strcmp("for",a)==0||strcmp("while",a)==0|| strcmp("do",a)==0||strcmp("return",a)==0||strcmp("break",a)==0||strcmp("continue",a)==0) { printf("(1,\"%s\")\n",a); fprintf(fout,"(1,\"%s\")\n",a); } else { printf("(2,\"%s\")\n",a); fprintf(fout,"(2,\"%s\")\n",a); } } elseif(ch>='0'&&ch<='9') { k=0; num=0; do { a[k]=ch; num=10*num+ch-'0'; k++; if(-1==getch()) { a[k]=0;return-1; } }while(ch>='0'&&ch<='9'); printf("(3,\"%d\")\n",num); fprintf(fout,"(3,\"%d\")\n",num); } elseif(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='=') { printf("(4,\"%c\")\n",ch); fprintf(fout,"(4,\"%c\")\n",ch); if(-1==getch()) return-1; } elseif(ch==','||ch==';'||ch=='{'||ch=='}'||ch=='('||ch==')') { printf("(5,\"%c\")\n",ch); fprintf(fout,"(5,\"%c\")\n",ch); if(-1==getch()) return-1; } return0; } 五、实验小结(心得体会) 1、开始拿到程序要求的时候,一定要搞清楚设计要求是什么 2、在写程序的时候,需要适当的添加注释,一方面方便别人阅读,也可以便于修改 3、有些语句语法忘了需要翻开课本去好好巩固
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 原理 词法 分析器
![提示](https://static.bdocx.com/images/bang_tan.gif)