实现C语言小子集程序的词法分析
沈阳航空航天大学
编 译 实 验 报 告
实验名称:实现C语言小子集程序的词法分析
院(系):计算机学院
专 业:计算机科学与技术
班 级:
学 号:
姓 名:
完成日期:
一.实验要求:
(1)功能:实现 C 语言小子集程序的词法分析。
(2)输入: C语言小子集的程序片段。
(3)输出:单词序列。
二.单词的属性和表格
单词的属性主要分为五大部分:
1. 关键字,是由程序语言定义的具有固有意义的标示符。有时称为保留字或基
本字。如:void,int,float,char,if,else,while,do,return。
2. 标识符,用来表示各种名字,如变量名,数组名等。
3. 常量, 常量的类型一般有整型,实型,布尔型,文字型等等。
4. 运算符,如 +,-,*,/,%等
5. 界符 ,如逗号,分号,括号等等。
表 1 C 语言小子集的定义表
种别码符号种别码符号种别码符号0无定义11>=22}1标示符12==23;2整数13!=24,3+14&&25void4-15||26int5*16=27float6/17(28char7%18)29if8<19[30else9<=20]31while10>21{32do33return
三.总控流程图
N
Y
主程序流程图
在主程序中,打开文件,调用函数,当文件中的读完后,结束程序。
关键码流程图
字母流程图
N
Y
数字流程图
N
Y
四.测试运行
1.屏幕输出
文件源代码如下
编码实现词法分析程序
程序源代码
#include
#include
#include
char *g[9] = {"void", "int", "float", "char", "if", "else","while","do","return"};
int nm[9]={25,26,27,28,29,30,31,32,33};
FILE *fP;
int ikey( char str[])
{
int i,m;
for(i=0; i<9; i++)
{
if(strcmp(str,g[i])==0)
{
m = nm[i];
return m;
}
}
return 0;
}
int word(char c)
{
if((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))
return 1;
else
return 0;
}
int num(char c)
{
if(c >= '0' && c <= '9')
return 1;
else
return 0;
}
void ap()
{
int n;
char c;
int i=0;
char str[100];
while((c = fgetc(fP)) != EOF)
{
if(c == ' ' || c == '\t')
continue;
else if( c == '\n')
printf("\n");
else if(num(c)==1)
{
while(num(c))
{
str[i]= c;