




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机科学与工程系编译原理课程设计实验报告姓名: 李彦君 学号 100510150 年级专业及班级 10级计科1班 成绩 实验名称词法分析程序设计与实现完成日期2020-2-6指导教师叶晓鸣实验目的、要求能够采用C编程语言实现简单的词法分析程序;设计、编制并调试一个词法分析程序,加深对词法分析原理的理解 要求: 1. 对单词的构词规则有明确的定义;2. 编写的分析程序能够正确识别源程序中的单词符号;3. 识别出的单词以的形式保存在符号表中(链表);4. 词法分析中源程序的输入以.c格式,分析后的符号表,将二元组保存在.txt文件中。 实验内容、原理 选择高级语言(C语言),编制它的词法分析程序。词法分析程序的实现可以采用任何一种编程工具。待分析的简单词法1)关键字: if else while do case int break等所有的关键字都是小写。(2)运算符和界符 = + - * / = = = ; ( ) 等(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:ID = _ | letter (letter | digit)*NUM = digit digit*(4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。(5) 注释被忽略(6) 各种单词符号对应的种别码(补充全)n 词法分析程序的算法思想:1. 算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号2. 其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。实验环境计算机,VC 6.0实验步骤(程序流程图,源代码)程序流程图:# include# include# include# include# include#include# define MAX 256# define SZLEN 30# define CAP 1024char boundary10 = ,(,),;,;/边界符char oper9 = +,-,*,/,=,#,:,?,%;/运算符FILE *fr;/读文件FILE *fw; /写文件指针char tokenSZLEN;char chNext;char strMAX;int zbm;char ch1;int len=0;int scan(char ch);/符号表/*struct DCchar nameSZLEN;int zbm;struct DC BF;*/特殊符号表struct fhbchar nameSZLEN;int zbm;word73=auto,1,break,2,case,3,char,4,const,5,continue,6,default,7,do,8,double,9,else,10,enum,11,extern,12,float,13,for,14,goto,15,if,16,int,17,long,18,register,19,return,20,short,21,switch,22,while,23,void,24;int search(char ch1,int wordtype)int i;switch (wordtype)case 1:for(i=0;i=9;i+)/是否为运算符if(operi=ch1)return 1;break; case 2: for(i=0;i=8;i+)/是否为比较符if(boundaryi=ch1)return 1;break;default: return 0;/查符号表,返回种别码int checkFHB(char token)int h=0;while(h=23)if(strcmp(token,)=0)/token中的单词为保留字return 1;elseh+;return 0;int ConcatS(char ch)/将读取的字符进行分类处理int i;if(isdigit(ch)|isalpha(ch)|ch=.|ch=_)/如果该字符为字母或数字或下划线或点 strlen=ch;/将该字符赋值给strlen,len自增1len+;else strlen=0;/单词间隔,构造单词成功while(strcmp(str, )!=0)/str不为空/*token=str;*/for( i=0;i=len+1;i+)tokeni=stri;/将构造的单词用于指针token表示strcpy(str, );/清理缓冲,将str置为空len=0;return 1;void retract(FILE *fr,char ch)/文件指针回退fseek(fr,-1L,SEEK_CUR);ch = ;int inserTable(char token,int zbm)/建表while(strlen(token)!=0)if(strcmp(token,n) printf(%s,%dn,token,zbm);memset(token,0,MAX);/清理缓冲,将token置为空return 1;char delBC(char c1)char c=c1;while(c= | c=n | c=t) /空白符,忽略c=fgetc(fr);/printf(%cn,c);/putchar(c);return c;/调用字符串扫描函数,每次构造一个单词+种别码int scan(char ch1)char ch;int j=0;int i=0;int k;int h;ch=delBC(ch1);/根据第一个字符,判断是那个分支/*/*头文件名、标识符或保留字 */*/单词if(isalpha(ch)|(ch=_)/合法标识符一字母或下划线打头while(isalpha(ch) | isalnum(ch)|(ch =_)ConcatS(ch);/将读入的单个字符组成单词存放于token中ch = fgetc(fr);chNext = fgetc(fr);ch1=fgetc(fr);if(ch=.)&( (chNext=h)|(chNext=c) )/头文件/头文件单词,ConcatS(ch);ConcatS(chNext);ConcatS(ch1);/ch1=fgetc(fr);/Concats(ch1);/构造头文件单词成功retract(fr,ch1);/将读指针指到ch所在字符zbm=40; elseretract(fr,ch1);retract(fr,chNext);retract(fr,ch);/将读指针返回到ch所在字符ConcatS(ch);/构造单词成功if (checkFHB(token)=1)/保留字for(i=0;i=23;i+)while(strcmp(token,)=0)zbm=wordi.zbm; break; /memset(token,0,MAX);/printf(%s,token); else/标识符或头文件/inserTable(token,0);zbm=41;else if(isdigit(ch)/字符为数字或为空白符while (isdigit(ch)!=0)stri=ch;i+;ch=fgetc(fr);/*chNext=fgetc(fr);if(isalpha(chNext)/*&!isspace(chNext)/如果下一个字符为字母while(isspace(chNext)=0)/如果不为空白符str+j=chNext;chNext=fgetc(fr);strj=0;for( h=0;h=j;h+)tokeni+=strh;strcpy(str, );/清理缓冲,将str置为空j=0;*/stri=0;for( h=0;h=i;h+)tokenj=strh;j+;strcpy(str, );/清理缓冲,将str置为空i=0;retract(fr,ch);/将读指针返回到ch所在字符*/zbm=40;/数字串的种别码为40else if(search(ch,1)|search(ch,2)/判断是否为运算符或界符token0=ch;/将该运算符或界符赋值token1=0;/*while(search(ch,1)=0|search(ch,2)=0)strj=0;for( k=0;k=1;k+)tokenh+=strk;strcpy(str, );/清理缓冲,将str置为空j=0;*/retract(fr,ch);/将读指针返回到ch所在字符zbm=44;/符号的种别码为44elsestrcpy(token, );/清理缓冲,将token置为空token0=0;inserTable(token,zbm);/*else if(ch= |ch=t|ch=n)ConcatS(ch);*/inserTable(token,zbm);return 1;void readfile()/打开读写文件char ch;if(fr=fopen(F:yananyanan.txt,r)=NULL)printf(open file wrong);exit(0);else while(!feof(fr) /是否结束ch=fgetc(fr); /读取文件中的下一个字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 写景作文多彩的秋天250字(8篇)
- 以艺铸魂:艺术院校大学生思想政治教育的探索与实践
- 以考促教以考促学:天津市体育运动学校英语考核改革的反拨效应
- 教育咨询企业计划书范文
- 仁爱版八年级上册叙事作文范文
- 律师执业德能勤绩廉工作总结范文
- 幼儿园日常考核章程范文
- 科技公司清欠管理办法
- 工会宣教文体管理办法
- 省畜禽核心场管理办法
- 湖南省长沙市望城区2020-2021学年八年级下学期期末考试历史试卷
- 烟叶烘烤调制理论考试试题
- DB23-T 3336-2022悬挂式单轨交通技术标准-(高清最新)
- 服刑人员心理健康教育课件
- 湖南省长郡中学“澄池”杯数学竞赛初赛试题(扫描版含答案)
- DB32-T 2665-2014机动车维修费用结算规范-(高清现行)
- 外协(外委)单位作业安全管理制度(附安全告知书)
- 消防系统施工总进度计划
- 【专项训练】初二数学-全等三角形的综合应用
- 2022年广东省中山市纪念中学三鑫双语学校小升初数学试卷
- (完整版)《市场营销学》说课课件
评论
0/150
提交评论