下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为Word版,下载可任意编辑——C求文法的first和follow集合1.#include\2.#include\3.#include\4.
5.#ifdef_DEBUG6.#undefTHIS_FILE
7.staticcharTHIS_FILE[]=__FILE__;8.#definenewDEBUG_NEW9.#endif
10.//调试部分使用的代码
11.CStringMLR1::GetFirst(inti){
12.if(i=GetIdentNum())return\;
13.returnFirstSet5(m_first[i].Fi,m_first[i].flag14.}
15.CStringMLR1::GetFollow(inti){
16.if(i=GetIdentNum())return\;
17.returnFollowSet1(m_first[i].Fo,m_first[i].flag18.}
19.//构造部分20.MLR1::MLR1(){21.}
22.MLR1::~MLR1(){23.}
24.voidMLR1::ReSet(FILE*pf){25.//使用文件指针pf来重新驱动程序26.inti;27.p_file=pf;
28.list_Express.RemoveAll();29.list_Ident.RemoveAll();
30.for(i=0;i=(char*)m_first;p--)31.*p=0;32.Lex3();33.FirstSet6();34.//FollowSet3();35.}
36.//输入分析部分37.boolMLR1::Lex1(){
38.//截取一个分号段到tocken中39.//功能字符取其负数40.charch=0;41.boolend=false;42.token_len=0;
43.if(feof(p_file))returnfalse;
44.while(!end46.if(fread(47.if(ch':53.case'=':54.ch=-ch;55.break;56.case'\\\\':
57.fread(58.if(ch')return0;79.if(t==0)return0;80.ident[t]=0;
81.for(t=list_Ident.GetSize()-1;t>=0;t--)82.if(list_Ident[t]==(CString)ident)break;83.if(t=MAX_IDENT)returnfalse;85.list_Ident.Add((CString)ident);86.t=list_Ident.GetSize()-1;
87.if(isUse)bit_map[t/8]|=1=符号表;95.registerchar*s,*d;96.char*end;97.inti;98.s=d=token;
99.end=100.if(i=Lex2_1(s))*d++=-i;101.elsereturnfalse;
102.if(*s++!=-'=')returnfalse;
103.while(s=1){104.returnfalse;105.}else{
106.if(*p==*X)returnfalse;107.if(!FirstSet2(*p))108.returnfalse;109.}110.p++;111.}
112.returntrue;113.}
114.boolMLR1::FirstSet2(constcharX){115.//判断非终结符X能否推出LR_NULL116.CStringtemp;
117.if(m_first[-X-1].flag118.if(m_first[-X-1].flag120.m_first[-X-1].flag|=0x40;
121.for(inti=list_Express.GetSize();i>0;i--){122.temp=list_Express.GetAt(i-1);123.if(temp[0]==X){
124.if(FirstSet1((LPCSTR)temp)){125.m_first[-X-1].flag|=3;126.returntrue;127.}128.}129.}
130.m_first[-X-1].flag|=1;131.m_first[-X-1].flag^=0x40;132.returnfalse;133.}
134.boolMLR1::FirstSet3(constchar*X,char*Fi){
135.//求产生式X的First集放在F中,假使LR_NULL在First集中则返回true136.//假使要求符号串的First集,就将X[0]设为0137.//假设X中不出现LR_NULL,LR_EOF和LR_EOS138.//假设F的长度为MAP_SIZE,有128b139.constchar*p=X;140.X++;
141.while(*X!=0){142.if(*X>=1){
143.Fi[(*X)/8]|=10;i--){165.temp=list_Express.GetAt(i-1);166.if(temp[0]==X)
167.FirstSet3((LPCSTR)temp,m_first[-X-1].Fi);
168.}
169.m_first[-X-1].flag|=4;170.m_first[-X-1].flag^=0x40;171.}
172.if(Fi!=m_first[-X-1].Fi){
173.for(inti=0;i0;i--){174.if((m_first[i-1].flag176.}
177.for(i=list_Ident.GetSize();i>0;i--){178.if((m_first[i-1].flag180.}181.}
182.CStringMLR1::FollowSet1(constchar*Fo,boolhas_eof){183.//将集合表示的Follow变为字符串式184.chart[128];185.char*p=t;186.inti,j;
187.for(i=0;i0;i--){194.sprintf(temp,list_Express.GetAt(i-1));195.flag=false;196.p=temp+1;197.while(*p!=0){198.if(!flag){
199.if(*p==X){
200.//表达式中出现了符号X201.flag=true;}202.}else{
203.if(*p>0){
204.//规则2:X后碰上终结符205.flag=false;
206.Fo[*p/8]|=1199.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 鲜花烤奶课程设计
- 自来水收费系统课程设计
- 补牙系统课程设计
- 2025年度艺术品代购代发市场推广协议4篇
- 铁路线路课程设计
- 年度数字视频切换台市场分析及竞争策略分析报告
- 年度工艺礼品加工设备市场分析及竞争策略分析报告
- 2024年央行金融政策和法律法规测试题及答案汇编
- 二零二五年驾校场地租赁与师资力量引进协议3篇
- 重卡汽配配件课程设计
- 《阻燃材料与技术》课件全套 颜龙 第1讲 绪论 -第11讲 阻燃性能测试方法及分析技术
- SOR-04-014-00 药品受托生产企业审计评估报告模板
- 新媒体论文开题报告范文
- 2024年云南省中考数学试题含答案解析
- 国家中医药管理局发布的406种中医优势病种诊疗方案和临床路径目录
- 2024年全国甲卷高考化学试卷(真题+答案)
- 汽车修理厂管理方案
- 人教版小学数学一年级上册小学生口算天天练
- (正式版)JBT 5300-2024 工业用阀门材料 选用指南
- 三年级数学添括号去括号加减简便计算练习400道及答案
- 苏教版五年级上册数学简便计算300题及答案
评论
0/150
提交评论