词法分析与算符优先.doc

词法分析与算符优先.doc

ID:57261698

大小:269.50 KB

页数:20页

时间:2020-08-07

词法分析与算符优先.doc_第1页
词法分析与算符优先.doc_第2页
词法分析与算符优先.doc_第3页
词法分析与算符优先.doc_第4页
词法分析与算符优先.doc_第5页
资源描述:

《词法分析与算符优先.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、计算机科学与技术学院课程设计报告(2011~2012学年度第1学期)课程名称程序设计与编译设计题目词法分析与算符优先姓名学号专业班级地点教师课程设计一、词法分析器1.概述1.1设计内容对C语言的一个子集设计并实现一个简单的词法分析器,掌握利用状态转换图设计词法分析器的基本方法。利用该词法分析器完成对源程序字符串的词法分析。输出形式是源程序的单词符号二元式的代码。1.2设计要求1.对单词的构词规则有明确的定义;2.编写的分析程序能够正确识别源程序中的单词符号;3.识别出的单词以<单词符号,种别码>的形式保存在符号

2、表中(链表);2.2实验原理(1)算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号(2)其基本思想是根据扫描到的单词符号的第一个字符的种类,拼出相应的单词符号2.程序设计#include#include#include#includeintmain(){FILE*fp,*fp1;inthanjsq=1;//行计数器,保存行号intguanjz(charch1[]);//关键字和标识符判断charch,infile[15

3、],outfile[15];//定义输入和输出文件名printf("*****************Entertheinfilename*******************");scanf("%s",infile);//输入需要扫描的文件名printf("*****************Entertheoutfilename******************");scanf("%s",outfile);//输入需要另存为的文件名if((fp=fopen(infile,"r"))==NULL)//

4、打开需要扫描的文件{printf("cannotopenfile");exit(0);}if((fp1=fopen(outfile,"w"))==NULL)//打开需要存入的文件{printf("cannotopenfile");exit(0);}printf("*********************************************************");printf("*》开始进行词法分析《*");printf("*************************

5、********************************");printf("*********************************************************");printf("行号字符串种别码");printf("*********************************************************");fprintf(fp1,"*********************************************

6、************");fprintf(fp1,"行号字符串种别码");fprintf(fp1,"*********************************************************");while(!feof(fp)){ch=fgetc(fp);if(ch==10)hanjsq++;/**********************扫描头文件单词及保留字***********************/if(isalpha(ch)

7、

8、ch=='_')//如果第一个字符

9、为字母或下划线则判断为标识符{inti=0;charch1[30];//假定每个标识符最长为ch1[i++]=ch;//将ch保存到ch1[0]中并使i自加1while(!feof(fp)){ch=fgetc(fp);if(ch==10)hanjsq++;//如果ch为换行符,则行计数器自加1if(isalpha(ch)

10、

11、isdigit(ch)

12、

13、ch=='_'){//如果ch为字母、数字或下划线就把ch放到ch1[i]中并使i自加1ch1[i++]=ch;}if(ch=='.')//如果ch为小数点则判断是

14、否为头文件{if((ch=fgetc(fp))=='h')//如果小数点后一位为h则判定其为头文件{if(ch==10)hanjsq++;ch1[i++]='.';ch1[i++]='h';ch1[i]='';//把结束标志放到ch1[i]中作为单词结束标志printf("line%d:%s83",hanjsq,ch1);//以字符串形式输出ch1fprintf(fp1,"li

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。