实现C语言小子集程序的词法分析Word文档格式.docx
《实现C语言小子集程序的词法分析Word文档格式.docx》由会员分享,可在线阅读,更多相关《实现C语言小子集程序的词法分析Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
如:
void,int,float,char,if,else,while,do,return。
2.标识符,用来表示各种名字,如变量名,数组名等。
3.常量,常量的类型一般有整型,实型,布尔型,文字型等等。
4.运算符,如+,-,*,/,%等
5.界符,如逗号,分号,括号等等。
表1C语言小子集的定义表
种别码
符号
无定义
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
主程序流程图
在主程序中,打开文件,调用函数,当文件中的读完后,结束程序。
关键码流程图
字母流程图
数字流程图
四.测试运行
1.屏幕输出
2.文件源代码如下
3.编码实现词法分析程序
5.程序源代码
#include<
stdio.h>
string.h>
stdlib.h>
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'
z'
))
return1;
intnum(charc)
if(c>
0'
9'
else
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,"
%s"
str);
elseif(word(c))
{
i=0;
while(word(c)||num(c))
str[i]=c;
i++;
c=fgetc(fP);
str[i]='
fseek(fP,-1,SEEK_CUR);
n=ikey(str);
if(n!
=0)
printf("
"
%d"
n);
->
else
1,%s>
else
switch(c)
case'
+'
:
3,->
break;
-'
4,->
*'
5,->
/'
6,->
%'
7,->
'
8,->
='
9,->
10,->
11,->
=='
12,->
13,->
14,->
||'
15,->
16,->
('
17,->
)'
18,->
['
19,->
]'
20,->
{'
21,->
}'
22,->
23,->
'
24,->
intmain(intargc,charargv[])
fP=fopen("
test1.txt"
r"
ap();