编译原理C++语法分析器

编译原理C++语法分析器

ID:46826588

大小:206.51 KB

页数:17页

时间:2019-11-28

编译原理C++语法分析器_第1页
编译原理C++语法分析器_第2页
编译原理C++语法分析器_第3页
编译原理C++语法分析器_第4页
编译原理C++语法分析器_第5页
资源描述:

《编译原理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) 

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。