实编译原理验一词法分析程序.doc
《实编译原理验一词法分析程序.doc》由会员分享,可在线阅读,更多相关《实编译原理验一词法分析程序.doc(12页珍藏版)》请在三一办公上搜索。
1、华北水利水电学院 编译原理 实验报告一、实验目的通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解,深刻理解词法分析的整个过程,提高词法分析方法的实践能力。二、实验要求(1)从源程序文件中读取有效字符和并将其转换成二元组机内表示形式输出。(2)掌握词法分析的实现方法。(3)实验要求独立完成,不允许有抄袭现象。(4)实验完成后,要上交实验报告(包括源程序清单)。三、实验内容、主程序设计考虑:主程序的说明部分为各种表格和变量安排空间(关键字和特殊符号表)。id 和ci 数组分别存放标识符和常数;还有一些为造表填表设置的变量。主程序的工作部分建议设计成便于调试的循环结构
2、。每个循环处理一个单词;接收键盘上送来的一个单词;调用词法分析过程;输出每个单词的内部码。)词法分析过程考虑该过程取名为 lexical,它根据输入单词的第一个有效字符(有时还需读第二个字符),判断单词类,产生类号。对于标识符和常数,需分别与标识符表和常数表中已登记的元素相比较,如表中已有该元素,则记录其在表中的位置,如未出现过,将标识符按顺序填入数组 id 中,将常数存入数组中 ci 中,并记录其在表中的位置。3)功能要求输出源程序对应的二元组;对错误单词能够报错,并提示出错误所在行;常量和变量要求存在符号表中;注:所有识别出的单词都用二元组表示。第一个表示单词的种类。关键字的 t=1;标识
3、符的 t=2;常数 t=3;运算符 t=4;界符 t=5。第二个为该单词在各自表中的指针或内部码值(常数表和标识符表是在编译过程中建立起来的。其 i 值是根据它们在源程序中出现的顺序确定的)。关键字和特殊符号表格如下:单词代码12345678910名字intcharfloatvoidconstifelsedowhilescanf单词代码11121314151617181920名字printfreturnmain+*/%=单词代码21222324252627282930名字=,=,=,+,+=,-,-=,=, /12 13 14 15 16 17 18 19 20 21 #,.; /22char
4、 bufferBUFFERSIZE=;int placeBUFFERSIZE2;char ch;char strToken100=;int pp=0;char *biaoshifu100;int biao=0;char *constt100;int con=0;BOOL CMyDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) =
5、 IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);
6、/ Set small iconUINT array3;for(int i=0;i3;i+)arrayi = 100+i;m_StatusBar.Create(this); /创建状态栏窗口m_StatusBar.SetIndicators(array,sizeof(array)/sizeof(UINT); /添加面板for(int n=0;n3;n+)m_StatusBar.SetPaneInfo(n,arrayn,0,290); /设置面板宽度/设置面板文本m_StatusBar.SetPaneText(0,狂风制作);m_StatusBar.SetPaneText(1, 欢迎大家使用);
7、m_StatusBar.SetPaneText(2, 有理想就有梦想);RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);SetTimer(1,300,NULL); /设置定时器return TRUE; / return TRUE unless you set the focus to a controlvoid CMyDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgA
8、bout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CMyDlg:OnPaint() if (IsIconic()CPaintDC dc
9、(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.He
10、ight() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CMyDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CMyDlg:OnClickRichedit2(NMHDR* pNMHDR, LRESULT* pR
11、esult) / TODO: Add your control notification handler code here*pResult = 0;char* CMyDlg:print(int i)return ki;void CMyDlg:Onfenxi() / TODO: Add your control notification handler code here/CFile file(NULL,CFile:modeCreate|CFile:modeWrite); CString strText1=;CString strText2=;strText1=dealwith(); m_ri
12、chedit2.SetWindowText(strText1);void CMyDlg:GetChar()ch=bufferpp;pp+;void CMyDlg:getbc()while (ch= |int(ch)=10)GetChar();void CMyDlg:concat()strcat(strToken,&ch);int CMyDlg:IsLetterorDigit()if (a=ch&ch=z)|(A=ch&ch=Z)return letter;else if(0=ch&ch=9) return digit;else return notld;int CMyDlg:reserve()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 词法 分析 程序
链接地址:https://www.31ppt.com/p-2385912.html