编译原理作业.doc

上传人:博****1 文档编号:543308593 上传时间:2023-12-09 格式:DOC 页数:14 大小:71.50KB
返回 下载 相关 举报
编译原理作业.doc_第1页
第1页 / 共14页
编译原理作业.doc_第2页
第2页 / 共14页
编译原理作业.doc_第3页
第3页 / 共14页
编译原理作业.doc_第4页
第4页 / 共14页
编译原理作业.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《编译原理作业.doc》由会员分享,可在线阅读,更多相关《编译原理作业.doc(14页珍藏版)》请在金锄头文库上搜索。

1、/*识别 分界符,运算符,赋值运算符,增减运算符,逻辑与逻辑或,关系运算符,科学计数法,实型常数,整形常数,有符号数,字符串常量,关键字,标示符,输入输出流符号*/#include#include#include #includeusing namespace std;string keyword15=int,include,using,namespace,return,void,char,float,double,unsigned,string,break,continue,do,while;/*关键字标示符*/string instruction3=/,/*,*/;/*注释行符号*/分界符

2、 char boundary9=,;,(,),#;/运算符char operation5=+,-,*,/,%;/赋值运算符char equals=; /增减运算符 string in_decrease2=+,-; /逻辑与逻辑或/string and_or2=&,|;/关系运算符 /string relation6=,=,=,=,!=;int i_point=1;/void analy_boundary(char A);void analy_operation(char A);void analy_string(char answer);void analy_keyword(char answ

3、er);void enter_p(int i_pt);void analy(FILE *fp);/void main()/主函数FILE *fp0;fp0=fopen(f:/program.txt,r+);if(fp0=NULL)printf(打开文件错误!n); exit(0);analy(fp0);return;/void analy_boundary(char A)/分析分界符的函数if(A!=EOF)if(A=,|A=;|A=|A=|A=|A=|A=(|A=)|A=#)for(int b=0;b9;b+)/char boundary11=,;,(,),#;if(A=boundaryb)

4、cout【 分界符 A】endl; break;/void analy_operation(char A)/分析运算符的函数int d=0;if(A!=EOF)if(A=+|A=-|A=*|A=/|A=%)/char operation5=+,-,*,/,%while(d5)/char operation5=+,-,*,/,%;if(A=operationd)cout【 运算符 A】endl; break;d+;/void analy_string(char answer)/识别字符串常量cout【 符号串常量 answer】endl;/void analy_keyword(char answ

5、er)/识别关键字和标示符for(int l=0;l15;l+)if(answer=keywordl)cout【 关键字 answer】endl;break; for(int m=0;m15;m+)if(answer!=keywordl)cout【 标示符 answer】endl;break;/void enter_p(int i_pt)/分屏显示操作if(i_pt % 21 = 0) cout,=,=,=,!=;char answer_2100;/识别注释行char ch,ch0,ch1,ch2,ch3,ch4,ch5,ch6;int k=0,k1=0,k2=0,k3=0,k4=0,k5=0

6、,k6=0;ch=fgetc(fp);/fgetc()读字符函数,如果遇到文件结束符号,函数返回文件结束标志EOFwhile(ch!=EOF)if(ch=|ch=!)/关系运算符couti_point+ : ;ch3=ch;ch=fgetc(fp); if(ch=)/判断 = , = ,!= 符号ch4=ch; cout【 关系运算符 ch3ch4】endl;ch3=ch4=0;ch=fgetc(fp);enter_p(i_point);continue;else if(ch=ch3)cout【 输入输出流符 ch3ch】 , 符号cout【 关系运算符 ch3】endl;ch3=ch4=0;

7、 enter_p(i_point);continue;if(ch=)/判断 = 和 = 符号couti_point+ : ;ch5=ch;ch=fgetc(fp);if(ch=ch5)cout【 关系运算符 ch5ch】endl;ch5=0;ch=fgetc(fp);enter_p(i_point);continue;elsecout【 赋值运算符 ch5】endl;ch5=0;enter_p(i_point);continue;if(ch=,|ch=;|ch=|ch=|ch=|ch=|ch=(|ch=)|ch=#)/判断分界符couti_point+ : ;analy_boundary(ch

8、);enter_p(i_point); if(ch=*|ch=/|ch=%)/ ch=+|ch=-|/判断算术运算符ch6=ch;ch=fgetc(fp);if(ch6=/)if(ch=/)/判断 / 注释couti_point+ : ;answer_2k5+=ch6;answer_2k5+=ch;ch=fgetc(fp);while(ch!=n)answer_2k5+=ch;ch=fgetc(fp);answer_2k5=0;cout【 注释语句 , answer_2】endl;k5=0;ch6=0;enter_p(i_point);continue;else if(ch=*)/判断 /*.

9、*/ 注释couti_point+ : ;answer_2k5+=ch6;answer_2k5+=ch;ch=fgetc(fp);while(ch!=/)answer_2k5+=ch;ch=fgetc(fp);answer_2k5+=ch;answer_2k5=0; cout【 注释语句 , answer_2】endl;k5=0;ch6=0;enter_p(i_point);continue; elsecouti_point+ : ; analy_operation(ch6); enter_p(i_point);ch6=0;continue;if(ch=+|ch=-)/判断算术运算符或增减运算符couti_point+ : ; ch0=ch;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号