天津理工大学编译原理实验一_第1页
天津理工大学编译原理实验一_第2页
天津理工大学编译原理实验一_第3页
天津理工大学编译原理实验一_第4页
天津理工大学编译原理实验一_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验报告学院(系)名:计算机通信工程学院姓名学号专家计算机科学与技术班级实验项目实验1 :词法分析课程名称编译原理课程代码实验时间2016/03/172016/03/22实验场所软件实验室7-219删改意见成绩教师签字:实验内容:实现标准c语言词法分析器。实验要求:(1)单词类别代码要求基本词、运算符、分隔符:一个字符标识符:统一成一个常数:按类型编码(2)字句分析工作中编制符号表、常量表。作为文本文件输出。(3)字句分析的最后结果以文本文件形式输出。实验的源代码和体会#include#include#include#define bufsize1024/关键字#define INCLUDE256#define AUTO257#define BREAK258#define CASE259#define CHAR260定义一致性261#define CONTINUE262#define DEFAULT263#define DO264#define DOUBLE265#define ELSE266#define ENUM267#define EXTERN268定义浮点269#define FOR 270#define GOTO 271#define IF 272定义int 273定义长274定义注册表275#define RETURN276#define SHORT277#define SIGNED278定义大小279定义状态280#define STRUCT281#define SWITCH282定义类型283#define UNION284#define UNSIGNED285定义卷286#define WHILE287/运算符#define PLUS288/#define是289/#defineemll290/*#define DIV291/#define REMAIN292/%定义注册器293/#defineLESS294/#defineEQUAL295/=#defineMISTAKE296/!定义和297/#define OR298/|#define PP299/#definemm300/-#defineEE301/=定义ge 302/=定义le 303/=#define MISE304/!=#define AA305/#define OO306/|定义PE 307/=#define MINUSE308/-=#defineemule309/*=#define DIVE310/=#define POW311/分隔符#define SEMIC312/#define COMMA313/#definemulano_l14/*#define MULANNO_R315/*/请参阅#define BRACE_L316/#define BRACE_R317/definebraket _ l18/ definebraket _ l18/#define BRAKET_R319/)定义mid bra _ l 320/定义mid bra _ r 321/#define ONE_ANNO322/标识符和常量符号定义标签400#defineeconint401#defineeconfloat402#defineeconchar403定义控制404/转义字符和字符串定义ca 500定义CB 501#define CF 502#define CN 503定义Cr 504定义CT 505#define CV 506#define CBSL 507#define CQUE 508#define CDQM 509#define CQM 510#define ZERO 511使用名称空间STD;typedef struct Variate/变量标识符int id;char name50;Variate;typedef struct Constant/常数int id;char name50;Constant;typedef struct Signchar name100;int sym;char attr100;Sign;const char * keyword table = include , 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 , union , unsigned ,“volatile”、“while”、“while”、“角色”是确定是否终止constchar*operationtable= ,- * ,% ,=,! ,| ,- ,=、=、=、!=,|,=,*=/=, , ;const char *边框表 = ; 包括:/*,*,const char changeList12=a,b,f,n,r,t,v,0;FILE *in;FILE *Out;FILE *Error;int line=1; /用于输出错误的行数等。 默认值从1开始,第一行char bufbufsize; /存储读取的单行字符串char firchar; /头文件下的第一个字符char Char;int start=0;int VariateNum=0; /记录变量的个数,减1int ConstantNum=0; /记录常数的个数int SignNum=0; /记录标记的个数int notation=1; /记录是否发现了多行注释的剩馀一半*/默认值为1,剩馀一半int isNotation=0; /判断注释行内是否有0,1行注释2行注释bool last=false;int late=0;Variate var;恒定con;Sign sign;Variate VarArrbufsize;常量控制 bufsize ;Sign SigArrbufsize;/获取导入文件行中的第一个字符,直到找到非空格字符为止char getfirstc (文件* in )装模作样char ch=fgetc(in) /fgetc ()函数读取文件中当前行的字符,并返回读取的字符while (ch=|ch=n| ch=t )装模作样if(ch=n )装模作样line;fputc(n,Out) /在输出的文本文件中打印换行符以下称为ch=fgetc(in )以下称为return ch;以下称为/处理读取的本行内容voidealreadhead(char*buf )装模作样char ch10;char cha;char strbufsize;int i=0;int j=0;int temp=0;while(in ,line );break;以下称为以下称为if(temp=1)装模作样chj=bufi;j;if(bufi=)装模作样chj=0;break;以下称为以下称为else if(temp=2)装模作样chj=bufi;j;if(bufi 1=)装模作样chj=0;I;break;以下称为以下称为以下称为I;以下称为if(temp=1)装模作样int index=0;fputc(#、Out )while (buf 索引!=0 )装模作样if(bufindex!=)fputc(bufindex,Out )索引;以下称为if(strcmp(ch, include)=0)装模作样I; /由于上面的程序没有运行,直接break,因此在此处下一个角必须加1while(cha=bufi )!=)装模作样I;if(cha=n )装模作样fprintf (错误, line : % dtincludeendwithoutn ,line;break;以下称为以下称为以下称为elsefprintf (错误,线路: % dtincludeformatiswrongn ,线路;以下称为else if(temp=2)装模作样if(strcmp(ch, define )!=0)装模作样I;while(cha=bufi)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论