编译原理课程设计Word文档下载推荐.docx
- 文档编号:19843639
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:16
- 大小:87.20KB
编译原理课程设计Word文档下载推荐.docx
《编译原理课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《编译原理课程设计Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
1)文件的读与写,即将nfa1、nfa2写入输入文件流,将nfa与输出文件流关联;
2)正规式的或运算与输出(含有对原正规式的输出);
3)关闭文件输入输出流.
四.程序测试
1.r1的NFA为M1,其状态转换矩阵及初态、终态信息为(&
表示空串):
5-9999(初态)
6-9999(终态)
5a5#
5b5#
5&
1#
1a3#
1b4#
3a2#
4b2#
2&
6#
6a6#
6b6@
状态转换图:
2.r2的NFA为M2,其状态转换矩阵及初态、终态信息为:
7-9999(初态)
10-9999(终态)
7c8#
7d9#
8c10#
8d9#
9c8#
9d10#
10c10#
10d10@
3.程序执行后,得正规式r1r2的NFA,其状态转换矩阵及初态、终态信息为:
x-9999
z-9999
x&
5#
6b6#
6&
y#
y&
7#
10d10#
10&
z@
实验截图如下:
根据以上信息,可知OnRun()实现的功能与正规式的或运算相同.
五.总结
通过状态转换图的或(合并、闭包)运算,可实现正规式与有限自动机的转换,以上程序可以实现或运算,同理,可以实现闭包和连接运算,所以正规式与有限自动机的转换这一过程可以用程序来实现。
通过本程序的编写,使我更深入了解了正规式与有限自动机的等价性,以及相互转换的过程,极大地锻炼了我的动手能力。
附录:
程序实现代码:
//编译原理Dlg.cpp:
implementationfile
//
#include"
stdafx.h"
编译原理.h"
编译原理Dlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
IDD)
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
voidCAboutDlg:
DoDataExchange(CDataExchange*pDX)
CDialog:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//CMyDlgdialog
CMyDlg:
CMyDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CMyDlg:
IDD,pParent)
//{{AFX_DATA_INIT(CMyDlg)
//NOTE:
theClassWizardwilladdmemberinitializationhere
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->
LoadIcon(IDR_MAINFRAME);
voidCMyDlg:
//{{AFX_DATA_MAP(CMyDlg)
DDX_Control(pDX,IDC_SHOWFILE2,m_showfile2);
DDX_Control(pDX,IDC_SHOWFILE1,m_showfile1);
DDX_Control(pDX,IDC_RUN,m_run);
DDX_Control(pDX,IDC_FILE2,m_file2);
DDX_Control(pDX,IDC_FILE,m_file);
DDX_Control(pDX,IDC_FILE1,m_file1);
BEGIN_MESSAGE_MAP(CMyDlg,CDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_RUN,OnRun)
ON_BN_CLICKED(IDC_FILE1,OnFile1)
ON_BN_CLICKED(IDC_FILE2,OnFile2)
//CMyDlgmessagehandlers
BOOLCMyDlg:
OnInitDialog()
OnInitDialog();
//Add"
About..."
menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&
0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<
0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->
AppendMenu(MF_SEPARATOR);
AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'
smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);
//Setbigicon
SetIcon(m_hIcon,FALSE);
//Setsmallicon
//TODO:
Addextrainitializationhere
m_file1.EnableWindow(true);
m_file2.EnableWindow(false);
m_run.EnableWindow(false);
number=0;
returnTRUE;
//returnTRUEunlessyousetthefocustoacontrol
OnSysCommand(UINTnID,LPARAMlParam)
if((nID&
0xFFF0)==IDM_ABOUTBOX)
CAboutDlgdlgAbout;
dlgAbout.DoModal();
else
CDialog:
OnSysCommand(nID,lParam);
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
OnPaint()
if(IsIconic())
CPaintDCdc(this);
//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&
rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
OnPaint();
//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags
//theminimizedwindow.
HCURSORCMyDlg:
OnQueryDragIcon()
return(HCURSOR)m_hIcon;
OnRun()
Addyourcontrolnotificationhandlercodehere
inthead,rear,i=0,a,b;
charmiddle,tail;
ifstreaminfile1("
nfa1.txt"
ios:
in);
if(!
infile1)
cerr<
<
"
openerrornfa1!
endl;
exit
(1);
ifstreaminfile2("
nfa2.txt"
openerrornfa2!
ofstreamoutfile("
nfa.txt"
out);
outfile)
openerrornfa!
outfile<
'
x'
\t'
-9999"
z'
infile1>
>
head;
a=number;
&
a<
#'
do{
inttemp=number;
infile1>
head>
middle>
rear>
tail;
if(head==rear)
outfile<
number<
middle<
else
number++;
temp<
}while(tail!
='
@'
);
infile2>
inttemp;
temp=number;
infile2>
if(tail=='
)
if(head==rear)
{
outfile<
}
else
number++;
break;
}while
(1);
outfile.close();
infile2.close();
infile1.close();
CFilefile;
file.Open("
CFile:
modeReadWrite);
file.Read(show.GetBuffer(file.GetLength()),file.GetLength());
file.Close();
GetDlgItem(IDC_FILE)->
SetWindowText(show);
OnFile1()
CStringstr;
CFilef;
f.Open("
f.Read(str.GetBuffer(f.GetLength()),f.GetLength());
f.Close();
GetDlgItem(IDC_SHOWFILE1)->
SetWindowText(str);
m_file1.EnableWindow(false);
m_file2.EnableWindow(true);
OnFile2()
GetDlgItem(IDC_SHOWFILE2)->
m_run.EnableWindow(true);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课程设计