欢迎来到天天文库
浏览记录
ID:57261698
大小:269.50 KB
页数:20页
时间:2020-08-07
《词法分析与算符优先.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
此文档下载收益归作者所有