欢迎来到天天文库
浏览记录
ID:46826588
大小:206.51 KB
页数:17页
时间:2019-11-28
《编译原理C++语法分析器》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、课程设计报告课程名称:编译原理课程设计题目:语法分析器姓名:系:计算机专业:计算机科学与技术年级:2009级学号:指导教师:职称:2010~2011学年第一学期评语:成绩:指导教师签字:任务下达日期:评定日期:目录1正则表达式11.1正则表达式11.2确定化(化简)后的状态转换图11.3分析程序代码11.4程序运行截图41.5小结42LL(1)分析52.1LL(1)文法52.2LL(1)预测分析表52.3分析程序代码52.4程序运行截图72.5小结73算符优先分析83.1算符优先文法83.2算符优先关系表83.3分析程序代码83.4程序运行截图103.5小结114LR分析124.1
2、LR文法124.2LR分析表124.3分析程序代码124.4程序运行截图144.5小结14参考文献:141正则表达式1.1正则表达式(a
3、b)*(aa
4、bb)(a
5、b)*(注:该正规式为示例,可更改)1.2确定化(化简)后的状态转换图1.3分析程序代码#include #include using namespace std; const int Max=20; typedef struct ArcNode{ int adjvex;//该弧所指向的顶点的位置 char info;
6、 //权 struct ArcNode *nextarc;//指向下一条弧的指针 }ArcNode; typedef struct VNode{ char data; //顶点信息 ArcNode *firstarc; //指向第一条依附该顶点的弧的指针 }VNode; class Nfa { public: Nfa(); //构造函数,初始化nfa int FindAdj(char c); //返回c状态的在邻接表中的序号 void
7、 AlpAdd(char c); //向字母表集合中添加表中没有的新元素c void InitVisit(); //初始化Visited集合 void e_closure(int index); //求单一状态c的e-闭包 void e_closure(int a[]); //重载的状态集合的e-闭包 void move(int I,char a); //单一状态I的a弧转换 void move(int I[],char a); //重载的状态集合的a弧转换 void Nfa
8、::Visit_I(int *Temp); //Visited转换为集合 void Insert(int I[],int a); //向状态集合中添加新元素 int TAdd(int I[]); //状态矩阵T中加入新状态集合 void Resault(int i); 14 void Nfa_Dfa(); private: int K; //状态数 int T[Max][Max]; //状态子集矩阵 VNode AdjList[Max];
9、//nfa,邻接表的数据结构存储 VNode Dfa[Max]; //dfa bool Visited[Max]; //存e-闭包结果 char Alp[Max]; //字母表,0号单元用于存放个数 }; Nfa::Nfa() { K=Alp[0]=0; char c; string line; ArcNode *p; while(cin>>c&&c!='#') { AdjList[K].data=c;
10、AdjList[K].firstarc=new ArcNode; AdjList[K].firstarc->nextarc=NULL; K++; } getline(cin,line); while(getline(cin,line)&&line!="#") { int index=FindAdj(line[0]); if(index!=-1)
此文档下载收益归作者所有