900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 编译原理构造词法分析器C语言 编译原理C语言词法分析器

编译原理构造词法分析器C语言 编译原理C语言词法分析器

时间:2022-02-21 14:32:23

相关推荐

编译原理构造词法分析器C语言 编译原理C语言词法分析器

编译原理C语言词法分析器

更新时间:/1/22 22:16:00浏览量:639手机版

编译原理C语言词法分析器

一、实验题目

编制并调试C词法分析程序。

a.txt源代码:

??main()

{ intsum=0,it=1;/*Variabledeclaration*/if(sum==1)it++;elseit=it+2;}??

设计其词法分析程序,能识别出所有的关键字、标识符、常数、运算符(包括复合运算符,如++)、界符;能过滤掉源程序中的注释、空格、制表符、换行符;并且能够对一些词法规则的错误进行必要的处理,如:标识符只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线。实验要求:要给出所分析语言的词法说明,相应的状态转换图,单词的种别编码方案,词法分析程序的主要算法思想等。

二、实验目的

1、理解词法分析在编译程序中的作用;

2、掌握词法分析程序的实现方法和技术;

3、加深对有穷自动机模型的理解。

三、主要函数voidload()

voidmain()

voidscan()voidchar_search(char*word)voidintb_search(char*word)voidc_search(char*word)

voidcc_search(char*word)voidinta_search(char*word)

四、设计

1.主函数voidmain()

绘制程序界面

调用初始化函数:voidload()实现文件的建立

调用主扫描函数:voidscan()实现文件的扫描

函数结束

2.初始化函数voidload()

通过文件指针建立相关文件

函数结束3.保留字及标识符判断函数voidchar_search(char*word)

接收数据

是否为保留字

是:写入输出文件否:查标识符表

找到:写入输出文件没找到:写入表文件

写入输出文件

4.整数类型判断函数voidinta_search(char*word)

接收数据

查表

找到:写入输出文件没找到:写入整数常量表文件

写入输出文件

5.浮点类型判断函数voidintb_search(char*word)

接收数据

查表

找到:写入输出文件没找到:写入整数常量表文件

写入输出文件

6.字符串常量判断函数voidcc_search(char*word)

7.字符常量判断函数voidc_search(char*word)

同4、5函数图

8.主扫描函数voidscan()

函数开始读入源文件中的一个单词

判断

宏定义忽略

无效字符忽略

字符串调用保留字及标识符函数voidchar_search进行处理

字符常量调用字符常量判断函数voidc_search进行处理

字符串常量调用字符串常量判断函数voidcc_search进行处理

整数常量调用整数类型判断函数voidinta_search进行处理

浮点数常量调用浮点类型判断函数voidintb_search进行处理

注释写入注释文件

限制符查运算符、分隔符表并写入输出文件

五、关键代码

#include

#include

#include

char*key0[]={"","auto","break","case","char","const","continue","default","do","double","else","enum","extern","float","for","goto","if","int","long","register","return","short","signed","sizeof","static","struct","switch","typedef","_Complex","_Imaginary","union","unsigned","void","volatile","while"};

/*保留字表*/

char*key1[]={"","(",")","[","]","{","}",",",";","'"};

/*分隔符表*/

char*key2[]={"","+","-","*","/","%","","==",">=","<=","!=","!","&&","||","<>","~","|","^","&","=","?:","->","++","--",".","+=","-=","*=","/="};

/*运算符表*/

intxx0[35],xx1[10],xx2[31];

inttemp_key3=0,temp_c40=0,temp_c41=0,temp_c42=0,temp_c43=0;

/*******初始化函数*******/

voidload()

{ intmm;

for(mm=0;mm<=34;mm++)

{ xx0[mm]=0;

}

for(mm=0;mm<=9;mm++)

{ xx1[mm]=0;

}

for(mm=0;mm<=30;mm++)

{ xx2[mm]=0;

}

FILE*floading;

if((floading=fopen("key0.txt","w"))==NULL)

{ printf("Error!Can'tcreatefile:key0.txt");

return;

}

fclose(floading);

/*建立保留字表文件:key0.txt*/

if((floading=fopen("key1.txt","w"))==NULL)

{ printf("Error!Can'tcreatefile:key1.txt");

return;

}

/*建立分隔符表文件:key1.txt*/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。