编译原理c 语法分析器

上传人:第*** 文档编号:78877312 上传时间:2019-02-15 格式:PDF 页数:17 大小:279.20KB
返回 下载 相关 举报
编译原理c  语法分析器_第1页
第1页 / 共17页
编译原理c  语法分析器_第2页
第2页 / 共17页
编译原理c  语法分析器_第3页
第3页 / 共17页
编译原理c  语法分析器_第4页
第4页 / 共17页
编译原理c  语法分析器_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《编译原理c 语法分析器》由会员分享,可在线阅读,更多相关《编译原理c 语法分析器(17页珍藏版)》请在金锄头文库上搜索。

1、课程设计报告课程设计报告 课程名称:编译原理 课程设计题目:语法分析器 姓名: 系:计算机 专业:计算机科学与技术 年级:2009 级 学号: 指导教师: 职称: 20102011 学年第一学期 评语: 成绩: 指导教师签字:任务下达日期: 评定日期: 目目录录 1 1正则表达式正则表达式 1 1.1正则表达式 1 1.2确定化(化简)后的状态转换图1 1.3分析程序代码 1 1.4程序运行截图 4 1.5 小结4 2 2LL(1)LL(1)分析分析5 2.1LL(1)文法5 2.2LL(1)预测分析表5 2.3分析程序代码 5 2.4程序运行截图 7 2.5小结 7 3 3算符优先分析算符优

2、先分析 8 3.1算符优先文法 8 3.2算符优先关系表 8 3.3分析程序代码 8 3.4程序运行截图10 3.5小结11 4 4LRLR 分析分析 12 4.1LR 文法12 4.2LR 分析表12 4.3分析程序代码12 4.4程序运行截图 112 4.5小结114 参考文献:参考文献:114 1 1 1正则表达式正则表达式 1.1正则表达式正则表达式 (a|b)*(aa|bb)(a|b)*(注:该正规式为示例,可更改) 1.2确定化确定化(化简化简)后的状态转换图后的状态转换图 1.3分析程序代码分析程序代码 #include #include usingnamespacestd; c

3、onstintMax=20; typedefstructArcNode intadjvex;/该弧所指向的顶点的位置 charinfo;/权 structArcNode*nextarc;/指向下一条弧的指针 ArcNode; typedefstructVNode chardata;/顶点信息 ArcNode*firstarc;/指向第一条依附该顶点的弧的指针 VNode; classNfa public: Nfa();/构造函数,初始化 nfa intFindAdj(charc);/返回 c 状态的在邻接表中的序号 voidAlpAdd(charc);/向字母表集合中添加表中没有的新元素 c

4、voidInitVisit();/初始化 Visited 集合 voide_closure(intindex);/求单一状态 c 的 e-闭包 voide_closure(inta);/重载的状态集合的 e-闭包 voidmove(intI,chara);/单一状态 I 的 a 弧转换 voidmove(intI,chara);/重载的状态集合的 a 弧转换 voidNfa:Visit_I(int*Temp);/Visited 转换为集合 voidInsert(intI,inta);/向状态集合中添加新元素 intTAdd(intI);/状态矩阵 T 中加入新状态集合 voidResault(

5、inti); ab C B AD a b a b ab 2 voidNfa_Dfa(); private: intK;/状态数 intTMaxMax;/状态子集矩阵 VNodeAdjListMax;/nfa,邻接表的数据结构存储 VNodeDfaMax;/dfa boolVisitedMax;/存 e-闭包结果 charAlpMax;/字母表,0 号单元用于存放个数 ; Nfa:Nfa() K=Alp0=0; charc; stringline; ArcNode*p; while(cinc AdjListK.firstarc=newArcNode; AdjListK.firstarc-next

6、arc=NULL; K+; getline(cin,line); while(getline(cin,line) if(index!=-1) p=AdjListindex.firstarc; while(p-nextarc) p=p-nextarc; p-nextarc=newArcNode; p-nextarc-nextarc=NULL; p-nextarc-adjvex=FindAdj(line4); p-nextarc-info=line2; AlpAdd(p-nextarc-info); coutnextarc; while(p) coutinfoadjvexnextarc; if(i

7、nextarc) #include int exch42=1,2,3,2,1,3,3,3; void judge(char *s) int cur = 0, i = 0; while(si) if(si-a 1 | si #include char data5610=“12“,“,“,“12“,“,“, “,“12+“,“,“,“-“,“-“, “34“,“,“,“34“,“,“, “,“-“,“34*“,“,“-“,“-“, “i“,“,“,“)0(“,“,“, ;/ 第一维 0-4 分别代表 EETTF ,第二维 0-5 代表 i+*()# -代表 int exch(char ch) sw

8、itch(ch) 6 case i: return 0; case +: return 1; case *: return 2; case (: return 3; case ): return 4; case0 : return 5; /字符串结束标志代表#. default: return -1; void judge(char *s) int tot=0,i=0,cur,k=exch(s0); char sta100; sta+tot=0; while(tot0) cur = statot - 0; if(si = )/ 去空格 +tot,k=exch(s+i); else if(cur+0 = si)/ 推导出相同字符,出栈 k=exch(s+i); else if(k #include char com88=, , , , , , , , , , , , , , , , , , , , , , , ,

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

最新文档


当前位置:首页 > 高等教育 > 大学课件

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