编译原理C语法分析器

上传人:桔**** 文档编号:548382346 上传时间:2022-10-10 格式:DOC 页数:18 大小:294.50KB
返回 下载 相关 举报
编译原理C语法分析器_第1页
第1页 / 共18页
编译原理C语法分析器_第2页
第2页 / 共18页
编译原理C语法分析器_第3页
第3页 / 共18页
编译原理C语法分析器_第4页
第4页 / 共18页
编译原理C语法分析器_第5页
第5页 / 共18页
点击查看更多>>
资源描述

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

1、课程设计报告课程名称:编译原理课程设计题目:语法分析器姓名:系:计算机专业:计算机科学与技术年级:2009 级学号:指导教师:职称:20102011 学年第一学期评语:成绩:指导教师签字:任务下达日期:评定日期:目录1正则表达式11.1正则表达式11.2确定化 ( 化简 ) 后的状态转换图11.3分析程序代码11.4程序运行截图41.5小结 42 LL(1)分析52.1 LL(1)文法52.2 LL(1)预测分析表52.3分析程序代码52.4程序运行截图72.5小结73算符优先分析83.1算符优先文法83.2算符优先关系表83.3分析程序代码83.4程序运行截图103.5小结114 LR 分析

2、124.1 LR文法124.2 LR分析表124.3分析程序代码124.4程序运行截图1124.5小结114参考文献: 1141 正则表达式1.1正则表达式(a|b)* (aa|bb)(a|b)*(注:该正规式为示例,可更改)1.2确定化 ( 化简 )后的状态转换图1.3分析程序代码#include#includeusingnamespacestd;constintMax=20;typedefstructArcNodeintadjvex;/该弧所指向的顶点的位置charinfo;/ 权structArcNode*nextarc;/指向下一条弧的指针ArcNode;typedefstructVN

3、odechardata;/ 顶点信息ArcNode*firstarc;/ 指向第一条依附该顶点的弧的指针VNode;class Nfapublic:Nfa();/ 构造函数 , 初始化 nfaintFindAdj(charc);/ 返回 c 状态的在邻接表中的序号voidAlpAdd(charc);/ 向字母表集合中添加表中没有的新元素cvoidInitVisit();/ 初始化 Visited 集合voide_closure(intindex);/ 求单一状态 c 的 e- 闭包voide_closure(inta);/ 重载的状态集合的 e- 闭包voidmove(intI,chara);

4、/ 单一状态 I 的 a 弧转换voidmove(intI,chara);/ 重载的状态集合的 a 弧转换voidNfa:Visit_I(int*Temp);/Visited转换为集合voidInsert(intI,inta);/ 向状态集合中添加新元素intTAdd(intI);/ 状态矩阵 T 中加入新状态集合voidResault(inti);voidNfa_Dfa();private:intK;/ 状态数intTMaxMax;VNodeAdjListMax;VNodeDfaMax;/ 状态子集矩阵/nfa,邻接表的数据结构存储/dfaboolVisitedMax;charAlpMax;

5、/ 存 e- 闭包结果/ 字母表 ,0 号单元用于存放个数;Nfa:Nfa()K=Alp0=0;charc;stringline;ArcNode*p;while(cinc&c!=#)AdjListK.data=c;AdjListK.firstarc=newArcNode;AdjListK.firstarc-nextarc=NULL;K+;getline(cin,line);while(getline(cin,line)&line!=#)intindex=FindAdj(line0);if(index!=-1)p=AdjListindex.firstarc;while(p-nextarc)p=p

6、-nextarc;p-nextarc=newArcNode;p-nextarc-nextarc=NULL;p-nextarc-adjvex=FindAdj(line4);p-nextarc-info=line2;AlpAdd(p-nextarc-info);cout-endl;coutInitializationcompletely.endl;coutK=;for(inti=0;iK-1;i+)coutAdjListi.data,;coutAdjListK-1.data.endl;cout =;for(inti=1;i(int)Alp0;i+)coutAlpi,;coutAlpAlp0.end

7、l;for(inti=0;inextarc;while(p)coutf(AdjListi.data,info)=adjvexnextarc;if(inextarc)#includeint 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 a)break;cur=exchcur si+ - a;if(si = 0 & cur = 3)printf (%selse printf (%s Right! nn,s); Wrong ! nn,s);int main()char str100;while(1)printf(有限自动机,判断是否符合(a|b)*(aa|bb)(a|b)*n);printf(请输入字符串:);gets(str);judge(str);1.4程序运行截图

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

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