词法分析程序的构造讲解
通达学院
专业课程设计II
题 目: 词法分析程序的构造
专 业 计 算 机 通 信
学 生 姓 名
班 级 学 号 28班
指 导 教 师 徐 佳
指 导 单 位 计算机学院计算机科学与技术系
日 期 2012.11.12-2012.11.23
教师评语
同学出勤率(满勤、较高、一般,较低),学习态度(端正、较端正、一般、较差),程序设计基础(好、较好、一般、较差),演示程序(已经、没有)达到了基本要求,算法设计(好、较好、一般),界面友好程度(好、较好、一般),答辩过程中回答问题(准确、较准确、错误率较高),撰写报告格式(规范、一般)、内容(丰满、简单)、表述(清晰、一般、不清楚),(圆满、较好、基本)完成了课题任务。
教师签名:
年 月 日成绩评定备 注
词法分析程序的构造
课题内容和要求
通过状态转换图构造C或者PASCAL语言子集的词法分析程序。
原理解析:选取语言,例如选取了C语言,选取其中一个子集,例如包含了部分关键字main、float、if、for等等,特殊符号( 、
基本要求:(1)将选取的语言子集编写一个简单程序,放在一个文本文件中;
(2)要将一个个单词区分清楚并归类(例如for属于关键字)。
char cbuffer;
char*keyword[14]={"if","else","for","while","do","float","return","break","continue","int","void","main","const","printf"}; //关键字
char *border[8]={ "," , ";" , "{" , "}" , "(" , ")" ,":=","."}; //分隔符
char *arithmetic[6]={"+" , "-" , "*" , "/" , "++" , "--"}; //运算符
char *relation[7]={"" , ">=" , "==" ,"!="}; //关系运算符
char *lableconst[80]; //标识符
2)函数调用:
search(char searchchar[],int wordtype)//查找类型
alphaprocess(char buffer) //字符处理过程
digitprocess(char buffer) //数字处理过程
otherprocess(char buffer) //分隔符、运算符、逻辑运算符等
main()//主函数
3状态转换图的形式:
■每个状态对应一个带标号的case语句
■转向边对应goto语句switch (wordtype)
{
case 1:
{ for (i=0;i<=13;i++) //关键字
{
if (strcmp(keyword[i],searchchar)==0)
return(i+1);
}
return(0);}
case 2:
{
for (i=0;i<=7;i++) //分隔符
{
if (strcmp(border[i],searchchar)==0)
return(i+1);
}
return(0);
}
case 3:
{
for (i=0;i<=5;i++) //运算符
{
if (strcmp(arithmetic[i],searchc