编译原理课程设计
---------词法分析器
姓名:
学号:
指导老师:
一、 课程设计的目的
通过简单的 C 语言程序实现词法分析器功能。
编制一个读单词过程,从目标文件中所输入 C 语言的源程序,识别出各个
具有独立意义的单词,即基本保留字、字符、数字,运算符、分隔符,关系符六
大类。
二、 具体设计内容
1、应用环境
本次课程设计的环境是:Microsoft Visual C++ 6.0
语言:C 语言
2、功能描述:
逐个的读入目标文件中源程序的符号,根据自己设定的规则,将源程序的符
号按规则分离成单词符号,并分析单词符号属性后分类。
3、程序描述:
1.规则要求
(1)保留字单词种别码为 :main,int,char,if,while
在设计源代码中:
char *a4[] ={"main","int","char","if","while"}
(2)为变量类型
(3)数字种别为:0,1,2,3,4,5,6,7,8,9,0
在设计源代码中:char a1[] ="1234567890.";
(4)分隔符符号种别码为:(,),[,],{,},<,>,,,;,空格
在设计源代码中:char a2[] ="()[]{}<>,; ";
(5)运算符符号种别码为:+ , - ,* , /,=
在设计源代码中:char a3[] ="+-*/=";
2.自定义函数说明:
(1) int compare (char a)
用来判断读入的字符是什么类型的:分为 d=1 时为非前四种类型的类型,即为
字母,可以用来判断出关键字和变量。d=3 时为数字,即为常量。d=4 时为分
隔符。d=5 时为运算符。
(2) void explain (FILE *fp1, FILE *fp2)
这个函数是整个程序的核心,用来调用各大函数
(3) void doshu (char a,char b[],char *pb,int d,FILE *fp1,FILE *fp2)
用来做读入字符为数字时的处理,它的功能是:在非符号字符输入前一直读入到
b 中,直到读入符号时,把 b 中的字符数出到 fp2 指向的文件中,并且判断这个
串中是否为纯数字,如果为纯数字那么就为常量,如果不是纯数字那么就是错误
的类型
(4) void dozimu (char a,char b[],char *pb,int d,FILE *fp1,FILE *fp2)
用来做读入字符为字母类型的处理,它的功能是:在非符号字符输入前一直读入
到 b 中,直到读入符号时,把 b 中的字符数出到 fp2 指向的文件中,并判断这
个串是否为关键字,并用 c 来表示,1 时为关键字,2 时为变量
(5) void dofuhao1 (char a,char b[],char *pb,int d,FILE *fp1,FILE
*fp2)
当符号中为分隔符中室,输出读入的字符到 fp2 指向的文件中
(6) void dofuhao2 (char a,char b[],char *pb,int d,FILE *fp1,FILE
*fp2)
当符号中为运算符中室,输出读入的字符到 fp2 指向的文件中
3、函数调用关系图:
dofuhao1
dofuhao2
dofuhao2
dofuhao1
doshu
dozimu
main
explain
compare
dofuhao1
dofuhao2