编译原理词法分析器代码

编译原理词法分析器代码

ID:47970062

大小:18.94 KB

页数:20页

时间:2020-01-18

编译原理词法分析器代码_第1页
编译原理词法分析器代码_第2页
编译原理词法分析器代码_第3页
编译原理词法分析器代码_第4页
编译原理词法分析器代码_第5页
资源描述:

《编译原理词法分析器代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、#include#include#include#include#include#defineKEYWORD_LEN32//保留字个数#defineSTR_MAX_LEN300//标识符最大长度#definePRO_MAX_LEN20480//源程序最大长度#defineSTB_MAX_LEN1000//符号表最大容量#defineCTB_MAX_LEN1000//常数表最大容量#defineERROR0//错误#defineID(KEYWORD_LEN+1)//标识符#def

2、ineCONST(KEYWORD_LEN+2)//常量#defineOPERAT(KEYWORD_LEN+3)//运算符#defineDIVIDE(KEYWORD_LEN+4)//界符interrorLine=0;charproBuffer[PRO_MAX_LEN]="";//存储程序代码的全局缓冲区charch;//读出来的当前字符charwordget[STR_MAX_LEN];//标识符或常量intpoint=0;//源程序当前位置指针charsignTab[STB_MAX_LEN][STR_MAX_LEN];//符号表intpointSTB=0;//符号表指针c

3、harconstTab[CTB_MAX_LEN][STR_MAX_LEN];//常量表intpointCTB=0;//常数表指针charkwTab[KEYWORD_LEN][10]={//保留字表C语言一共有32个保留字[关键字]"auto","break","case","char","const","continue","default","do","double","else","enum","extern","float","for","goto","if","int","long","register","return","short","signed","s

4、izeof","static","struct","switch","typedef","union","unsigned","void","volatile","while"};charerrorTab[][50]={//错误代码表/*0*/"未知错误",/*1*/"非法的字符",/*2*/"不正确的字符常量表达",/*3*/"不正确的字符串表达",/*4*/"不正确的数字表达",/*5*/"注释丢失'*/'"};typedefstructsignDuality{intkind;intvalue;}*pDualistic,Dualistic;voidpretreatm

5、ent();//预处理voidProcError(intid);//错误boolGetChar();//获得一个字符不包括结束标记boolGetBC();//获得一个非空白字符voidConcat(char*str);//将ch连接到str后intReserve(char*str);//对str字符串查找保留字表若是一个保留字-返回其编码否则返回0voidRetract();//将搜索指示器回调一个字符位置intInsertId(char*str);//将str串以标识符插入符号表,并返回符号表指针intInsertConst(char*str);//将str串以常数插

6、入符号表,并返回常数表指针boolwordAnalyse(pDualisticpDu);//词法分析true正常//预处理将缓冲区内的源代码去掉注释和无效空格voidpretreatment(){intlines=0;chartmp[PRO_MAX_LEN];//先将处理结果保存到临时空间inttmpp=0;//这个临时空间的末尾指针boolflg;chartmpc;//去掉注释先//注释有两种一种是//另一种是/**/point=0;do{flg=GetChar();if(ch=='/'){flg=GetChar();switch(ch){case'/':do{flg

7、=GetChar();}while(!(ch==''

8、

9、flg==false));//注释一直到行尾或文件结束if(ch=='')Retract();//归还换行break;case'*':do{flg=GetChar();tmpc=ch;//为了保证出错处理程序能正确定位出错位置保留注释中的换行if(tmpc=='')tmp[tmpp++]=tmpc;flg=GetChar();Retract();//归还一个字符}while(flg&&!(flg&&tmpc=='*'&&ch=='/'));flg=GetChar();if

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

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

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