ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:19.49KB ,
资源ID:18486240      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-18486240.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机编译原理编译程序构造实践第二版 附录三 文法输入输出系统的部分程序代码.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

计算机编译原理编译程序构造实践第二版 附录三 文法输入输出系统的部分程序代码.docx

1、计算机编译原理编译程序构造实践第二版 附录三 文法输入输出系统的部分程序代码附录三 在Visual C+开发平台上开发文法输入输出系统的部分程序代码本附录给出的是在Visual C+开发平台上所开发应用系统中与用户添加部分相关的的部分可执行程序,请读者注意在程序中何处给出用户添加部分。建议读者结合实际操作,进行对照,以熟练Visual C+开发平台的应用。/* * Mainfrm.h * */ MainFrm.h : interface of the CMainFrame class/#if !defined(AFX_MAINFRM_H_CA8C9B0D_82A4_4D43_BD70_6B3D

2、C428B2FF_INCLUDED_)#define AFX_MAINFRM_H_CA8C9B0D_82A4_4D43_BD70_6B3DC428B2FF_INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000class CMainFrame : public CFrameWnd protected: / create from serialization only CMainFrame(); DECLARE_DYNCREATE(CMainFrame)/ Attributespublic:/ Operationspublic:/

3、 Overrides / ClassWizard generated virtual function overrides /AFX_VIRTUAL(CMainFrame) virtual BOOL PreCreateWindow(CREATESTRUCT& cs); /AFX_VIRTUAL/ Implementationpublic: virtual CMainFrame();#ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const;#endifprotected: /

4、 control bar embedded members CStatusBar m_wndStatusBar; CToolBar m_wndToolBar;/ Generated message map functionsprotected: /AFX_MSG(CMainFrame) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnGread(); /* 用户定义,自动生成 */ afx_msg void OnGstore(); afx_msg void OnAppExit(); /AFX_MSG DEC

5、LARE_MESSAGE_MAP();/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif / !defined(AFX_MAINFRM_H_CA8C9B0D_82A4_4D43_BD70_6B3DC428B2FF_INCLUDED_)/* * Maingfrm.cpp * */ MainFrm.cpp : implementation of the CMainFrame class#include std

6、afx.h#include 文法输入输出系统.h /* 用户定义,自动生成 */#include MainFrm.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif#include GREAD.h /* 用户添加 */GREAD Dlg1;#include DISPG.hDISPG Dlg2;CString StartSymbol; /* 用户添加 */CString Products;CString VNC;CString VTC;/ CMainFrameIMPLEM

7、ENT_DYNCREATE(CMainFrame, CFrameWnd)BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) /AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() ON_COMMAND(ID_GREAD, OnGread) /* 用户定义,自动生成 */ ON_COMMAND(ID_GSTORE, OnGstore) ON_COMMAND(ID_APP_EXIT, OnAppExit) /AFX_MSG_MAPEND_MESSAGE_MAP()static UINT indicators = ID_SEPARATOR, /

8、status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL,;/ CMainFrame construction/destructionCMainFrame:CMainFrame() / TODO: add member initialization code hereCMainFrame:CMainFrame()int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) if (CFrameWnd:OnCreate(lpCreateStruct) =

9、 -1) return -1; if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) | !m_wndToolBar.LoadToolBar(IDR_MAINFRAME) TRACE0(Failed to create toolbarn); return -1; / fail to create if (!m_wndStatusBar.Create(this)

10、| !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT) TRACE0(Failed to create status barn); return -1; / fail to create / TODO: Delete these three lines if you dont want the toolbar to / be dockable m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); Dock

11、ControlBar(&m_wndToolBar); return 0;BOOL CMainFrame:PreCreateWindow(CREATESTRUCT& cs) if( !CFrameWnd:PreCreateWindow(cs) ) return FALSE; / TODO: Modify the Window class or styles here by modifying / the CREATESTRUCT cs return TRUE;/ CMainFrame diagnostics#ifdef _DEBUGvoid CMainFrame:AssertValid() co

12、nst CFrameWnd:AssertValid();void CMainFrame:Dump(CDumpContext& dc) const CFrameWnd:Dump(dc);#endif /_DEBUG/ CMainFrame message handlersvoid CMainFrame:OnGread() /*用户定义,自动生成 */ / TODO: Add your command handler code here Dlg1.DoModal( ); /*用户添加*/void CMainFrame:OnGstore() /*用户定义,自动生成 */ / TODO: Add yo

13、ur command handler code here Dlg2.m_SSV = StartSymbol; /*用户添加*/ Dlg2.m_RulesV = Products; Dlg2.m_VTSV = VTC; Dlg2.m_VNSV = VNC; Dlg2.DoModal( );void CMainFrame:OnAppExit() /*用户定义,自动生成 */ / TODO: Add your command handler code here CMainFrame:OnClose( ); /*用户添加*/* * GREAD.h * */#if !defined(AFX_GREAD_

14、H_F0B82C30_67C6_42C1_9CE2_F10546EB47CF_INCLUDED_)#define AFX_GREAD_H_F0B82C30_67C6_42C1_9CE2_F10546EB47CF_INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000/ GREAD.h : header file/ GREAD dialogclass GREAD : public Cdialog /*用户定义,自动生成 */ / Constructionpublic: GREAD(CWnd* pParent = NULL); /

15、standard constructor/ Dialog Data /AFX_DATA(GREAD) enum IDD = IDD_INPUTG ; CEdit m_RuleV; /* 用户定义,自动生成 */ CEdit m_SV; /AFX_DATA/ Overrides / ClassWizard generated virtual function overrides /AFX_VIRTUAL(GREAD) protected: virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support /AFX_VIRTUAL

16、/ Implementationprotected: / Generated message map functions /AFX_MSG(GREAD) virtual void OnOK(); /*用户定义,自动生成 */ virtual void OnCancel(); afx_msg void OnReinput(); /AFX_MSG DECLARE_MESSAGE_MAP();/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the prev

17、ious line.#endif / !defined(AFX_GREAD_H_F0B82C30_67C6_42C1_9CE2_F10546EB47CF_INCLUDED_)/* * GREAD.CPP * */ GREAD.cpp : implementation file/#include stdafx.h#include 文法输入输出系统.h /* 用户定义,自动生成 */#include GREAD.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifextern

18、 GREAD Dlg1; /* 用户添加的自定义的外部数据对象 */extern CString StartSymbol;extern CString Products;extern CString VNC;extern CString VTC;char Input3030; /* 用户添加的自定义的数据类型和数据对象 */typedef struct char LeftSym; char Rightpart20; int RightLength; RuleT;RuleT GrammarC20;char VT20;char VN20;int NVN=0,NVT=0;typedef struct

19、 int LeftSymNum; int RightpartNum20; int RightLength; RuleType;RuleType Grammar20;int RuleN;char StartSym;int LineNumofG;int InputLength;/ GREAD dialogGREAD:GREAD(CWnd* pParent /*=NULL*/) /* 用户定义,自动生成 */ : CDialog(GREAD:IDD, pParent) /AFX_DATA_INIT(GREAD) /AFX_DATA_INITvoid GREAD:DoDataExchange(CDat

20、aExchange* pDX) CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(GREAD) DDX_Control(pDX, IDC_RULEV, m_RuleV); /* 用户定义,自动生成 */ DDX_Control(pDX, IDC_SV, m_SV); /AFX_DATA_MAPBEGIN_MESSAGE_MAP(GREAD, CDialog) /AFX_MSG_MAP(GREAD) ON_BN_CLICKED(IDC_REINPUT, OnReinput) /* 用户定义,自动生成 */ /AFX_MSG_MAPEND_MESSAGE_MAP

21、()/ GREAD message handlers/* 用户自定义的函数 */void GetGrammar( ) /* 从过渡文法转换到文法的存储表示 */ char LeftS,Sym; int k,j,m; StartSym=GrammarC1.LeftSym; for(k=1; k=RuleN; k+) LeftS=GrammarCk.LeftSym; for(j=1; j=NVN; j+) if(LeftS=VNj) Grammark.LeftSymNum=j+100; break; for(j=1; j=GrammarCk.RightLength; j+) Sym=Grammar

22、Ck.Rightpartj; for(m=1; m=NVN; m+) if(Sym=VNm) Grammark.RightpartNumj=m+100; break; if(m=NVN) continue; for(m=1; m=NVT; m+) if(Sym=VTm) Grammark.RightpartNumj=m; break; Grammark.RightLength=GrammarCk.RightLength; void GetInput( ) /* 把界面键入的数据存入Input中 */ int k,len, row=1,colum; char c; Input00=0; colu

23、m=0; len=Products.GetLength( ); for(k=0; k=len-1; k+) c=Productsk; if(c=n|c=012) Inputrowcolum=0; +row; colum=0; else if(c=015) continue; else if(c=0) Inputrowcolum=0; break; else /*c!=n& c!=0*/ Inputrowcolum+=c; LineNumofG=row;void StoreG( ) /* 把Input中的输入转换为字符型过渡文法 */ int row,colum, k,j,m; char sym

24、, U; StartSym=StartSymbol0; GetInput( ); RuleN=0; row=1; NVN=NVT=0; while(row=LineNumofG) colum=0; sym=Inputrowcolum; for(k=1; kNVN) VN+NVN=sym; GrammarC+RuleN.LeftSym=sym; colum=colum+4; /*规则行中放过符号“:=”*/ j=0; /*规则右部位置*/ while(Inputrowcolum!=0) /*规则右部未完)*/ sym=Inputrowcolum+; if(sym=|) GrammarCRuleN

25、.Rightpartj+1=0; GrammarCRuleN.RightLength=j; U=GrammarCRuleN.LeftSym; RuleN=RuleN+1; GrammarCRuleN.LeftSym=U; j=0; continue; /*继续while循环*/ else if(sym=n|sym=0) break; j=j+1; GrammarCRuleN.Rightpartj=sym; for(k=1;kNVT) /*sym不在VT中*/ VT+NVT=sym; /*多字符符号时需用函数strcpy*/ /*处理一行规则while结束*/ GrammarCRuleN.Rig

26、htLength=j; row=row+1; /* 处理文法while结束 */ /*从VT中删除出现在VN中的符号,求得VT基数*/ for( m=1; m=NVT; m+) for(k=1; k=NVN; k+) if(VTm=VNk) /*是非终结符号*/ VTm= ; break; for(m=1;m=NVT; m+) if(VTm= ) for(j=m+1; j=NVT; j+) VTj-1=VTj; /*删除VTm, 把其后的元素上移*/ NVT=NVT-1; if(VTm= ) m=m-1; continue; GetGrammar( ); /*转换成存储表示的文法*/void SetG( ) /* 为输出显示,置好界面全局数据对象 */ int i,k,j,m; char VNTmp20,VTTmp20,RuleTmp100; j=0; for

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2