实现C语言小子集程序的词法分析.docx
- 文档编号:4140435
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:14
- 大小:166.39KB
实现C语言小子集程序的词法分析.docx
《实现C语言小子集程序的词法分析.docx》由会员分享,可在线阅读,更多相关《实现C语言小子集程序的词法分析.docx(14页珍藏版)》请在冰豆网上搜索。
实现C语言小子集程序的词法分析
航空航天大学
编译实验报告
实验名称:
实现C语言小子集程序的词法分析
院(系):
计算机学院
专业:
计算机科学与技术
班级:
学号:
姓名:
完成日期:
一.实验要求:
(1)功能:
实现C语言小子集程序的词法分析。
(2)输入:
C语言小子集的程序片段。
(3)输出:
单词序列。
二.单词的属性和表格
单词的属性主要分为五大部分:
1.关键字,是由程序语言定义的具有固有意义的标示符。
有时称为保留字或基
本字。
如:
void,int,float,char,if,else,while,do,return。
2.标识符,用来表示各种名字,如变量名,数组名等。
3.常量,常量的类型一般有整型,实型,布尔型,文字型等等。
4.运算符,如+,-,*,/,%等
5.界符,如逗号,分号,括号等等。
表1C语言小子集的定义表
种别码
符号
种别码
符号
种别码
符号
0
无定义
11
>=
22
}
1
标示符
12
==
23
;
2
整数
13
!
=
24
3
+
14
&&
25
void
4
-
15
||
26
int
5
*
16
=
27
float
6
/
17
(
28
char
7
%
18
)
29
if
8
<
19
[
30
else
9
<=
20
]
31
while
10
>
21
{
32
do
33
return
三.总控流程图
N
Y
主程序流程图
在主程序中,打开文件,调用函数,当文件中的读完后,结束程序。
关键码流程图
字母流程图
N
Y
数字流程图
N
Y
四.测试运行
1.屏幕输出
2.文件源代码如下
3.编码实现词法分析程序
5.程序源代码
#include
#include
#include
char*g[9]={"void","int","float","char","if","else","while","do","return"};
intnm[9]={25,26,27,28,29,30,31,32,33};
FILE*fP;
intikey(charstr[])
{
inti,m;
for(i=0;i<9;i++)
{
if(strcmp(str,g[i])==0)
{
m=nm[i];
returnm;
}
}
return0;
}
intword(charc)
{
if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
return1;
else
return0;
}
intnum(charc)
{
if(c>='0'&&c<='9')
return1;
else
return0;
}
voidap()
{
intn;
charc;
inti=0;
charstr[100];
while((c=fgetc(fP))!
=EOF)
{
if(c==''||c=='\t')
continue;
elseif(c=='\n')
printf("\n");
elseif(num(c)==1)
{
while(num(c))
{
str[i]=c;
i++;
c=fgetc(fP);
}
str[i]='\0';
fseek(fP,-1,SEEK_CUR);
printf("<2,");
printf("%s",str);
printf(">,");
}
elseif(word(c))
{
i=0;
while(word(c)||num(c))
{
str[i]=c;
i++;
c=fgetc(fP);
}
str[i]='\0';
i=0;
fseek(fP,-1,SEEK_CUR);
n=ikey(str);
if(n!
=0)
{
printf("<");
printf("%d",n);
printf(",->,");
}
else
printf("<1,%s>,",str);
}
else
{
switch(c)
{
case'+':
printf("<3,->,");
break;
case'-':
printf("<4,->,");
break;
case'*':
printf("<5,->,");
break;
case'/':
printf("<6,->,");
break;
case'%':
printf("<7,->,");
break;
case'<':
printf("<8,->,");
break;
case'<=':
printf("<9,->,");
break;
case'>':
printf("<10,->,");
break;
case'>=':
printf("<11,->,");
break;
case'==':
printf("<12,->,");
break;
case'!
=':
printf("<13,->,");
break;
case'&&':
printf("<14,->,");
break;
case'||':
printf("<15,->,");
break;
case'=':
printf("<16,->,");
break;
case'(':
printf("<17,->,");
break;
case')':
printf("<18,->,");
break;
case'[':
printf("<19,->,");
break;
case']':
printf("<20,->,");
break;
case'{':
printf("<21,->,");
break;
case'}':
printf("<22,->,");
break;
case';':
printf("<23,->,");
break;
case',':
printf("<24,->,");
break;
}
}
}
}
intmain(intargc,charargv[])
{
fP=fopen("test1.txt","r");
ap();
return0;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实现 语言 子集 程序 词法 分析