编译原理课程设计LR分析器总控程序的实现.doc
《编译原理课程设计LR分析器总控程序的实现.doc》由会员分享,可在线阅读,更多相关《编译原理课程设计LR分析器总控程序的实现.doc(14页珍藏版)》请在三一办公上搜索。
1、合肥工业大学计算机与信息学院课程设计课 程:编译原理专业班级:计算机科学与技术09-2班学 号:姓 名: 一:设计题目 题目: LR分析器总控程序的实现设计内容及要求:对P.101中的文法,按图5.5LR分析表构造LR分析器。要求程序按P.102例5.7那样,对于输入串i*i+i,输出LR分析器的工作过程。改进:可以自行输入输入串,能按重新按钮重新开始,外加了一个计时器。二:设计目的 进一步了解了LR分析器的整个工作过程,将LR分析器以图形界面的形式展现了出来,有利加深了对LR分析过程的掌握。三:实验原理本程序是用windows编的,大体的思想是这样的:通过建立一个符号栈,状态栈,输入栈(结构
2、体类型定义的)分别用来存放符号,状态,输入串,将LR分析表构造成为一个二维数组table139,其中0-11表示状态结点,2126表示规约标号,-1表示error(出错),12表示acc(接受),在acation函数里面通过i等于多少来判断到底是规约还是移进。在Main_OnCommand()函数中通过switch.case.来判断每次及下一步所要执行的操作。运行的时候,首先要输入一个以#结尾的输入串,然后单击开始下一步.,如果规约成功,则弹出一个规约成功的对话框,否则弹出一个规约失败的对话框。当然在运行的过程中如果出现什么差错,都可以单击重新开始按钮重新输入输入串重新开始。四:实验代码#in
3、clude stdAfx.h#include #include #include resource.h#include MainDlg.hchar *str26=E-E+T,E-T,T-T*F,T-F,F-(E),F-i;int flag=0;#define MAX 20typedef structint stack1MAX;int top1;status;typedef structchar stack2MAX;int top2;symbol_instr;char index_char9=i,+,*,(,),#,E,T,F;/为二维数数组的纵坐标/LR分析表/0-11表示状态结点,2126表
4、示规约标号,/-1表示error(出错),12表示acc(接受)int table139 = 5,-1,-1, 4,-1,-1, 1, 2, 3,-1, 6,-1,-1,-1,12,-1,-1,-1,-1,22, 7,-1,22,22,-1,-1,-1,-1,24,24,-1,24,24,-1,-1,-1, 5,-1,-1, 4,-1,-1, 8, 2, 3,-1,26,26,-1,26,26,-1,-1,-1, 5,-1,-1, 4,-1,-1,-1, 9, 3, 5,-1,-1, 4,-1,-1,-1,-1,10,-1, 6,-1,-1,11,-1,-1,-1,-1,-1,21, 7,-1
5、,21,21,-1,-1,-1,-1,23,23,-1,23,23,-1,-1,-1,-1,25,25,-1,25,25,-1,-1,-1;/规约规则struct rulechar x;int y;r6=E,3,E,1,T,3,T,1,F,3,F,1; /后面的代表A中的长度BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) switch(uMsg) HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COM
6、MAND, Main_OnCommand);HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); return FALSE;void init_stack1(HWND hwnd,status *p)if( !p)MessageBox(hwnd,TEXT(出错),TEXT(警告),MB_OK|MB_ICONHAND);p-top1 = -1;void push1(HWND hwnd,status *&p,int x)if(p-top1 top1+;p-stack1p-top1 = x;else MessageBox(hwnd,TEXT(出错),TEXT(警告),MB_
7、OK|MB_ICONHAND);int pop1(HWND hwnd,status *p)int x;if(p-top1 != 0)x = p-stack1p-top1;p-top1-;return x;else MessageBox(hwnd,TEXT(状态栈为空),TEXT(警告),MB_OK|MB_ICONHAND);/printf(n状态栈1空!n);return 0;void out_stack(HWND hwnd,status *p)if(p-top1 0)MessageBox(NULL,TEXT(状态栈为空),TEXT(警告),MB_OK|MB_ICONHAND);/printf
8、(n状态栈3空!n);int i;TCHAR str256;for(i=0;itop1;i+)wsprintf(&stri,%d,p-stack1i);SetDlgItemText(hwnd,IDC_EDIT1,str);int get_top1(HWND hwnd,status *p)int x;if(p-top1 != -1)x = p-stack1p-top1;return x;else MessageBox(hwnd,TEXT(状态栈为空),TEXT(警告),MB_OK|MB_ICONHAND);/printf(n状态栈2空!n);return 0;void init_stack2(H
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课程设计 LR 分析器 程序 实现

链接地址:https://www.31ppt.com/p-2386161.html