亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 算符優先文法dlg.cpp

?? 這是一個語法的分析程序
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// 算符優先文法Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "算符優先文法.h"
#include "算符優先文法Dlg.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyDlg dialog

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMyDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMyDlg)
	m_grammar = _T("");
	m_sentence = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMyDlg)
	DDX_Control(pDX, IDC_LIST4, m_list4);
	DDX_Control(pDX, IDC_LIST3, m_list3);
	DDX_Control(pDX, IDC_LIST2, m_list2);
	DDX_Control(pDX, IDC_LIST1, m_list);
	DDX_Control(pDX, IDC_EDIT2, m_con_sentence);
	DDX_Control(pDX, IDC_EDIT1, m_con_grammar);
	DDX_Text(pDX, IDC_EDIT1, m_grammar);
	DDX_Text(pDX, IDC_EDIT2, m_sentence);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
	//{{AFX_MSG_MAP(CMyDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDOK, OnBianyi)
	ON_BN_CLICKED(IDOK2, OnInputDefault)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyDlg message handlers

BOOL CMyDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	FlagOk=true;                     //假定能夠成功規約
	m_grammar.Empty();
	CString str;
	str = "E->E+T|T\r\nT->T*F|F\r\nF->P^F|P\r\nP->(E)|i\r\n";
	m_con_grammar.SetWindowText(str);
	m_sentence.Empty();
	str.Empty();
	str = "i+i*(i+i)^i";
	m_con_sentence.SetWindowText(str);

	 m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP);
     m_list.SetTextColor(RGB(0,0,255));                  //顯示字體的顏色
     m_list.SetBkColor(RGB(240,247,233));             //選中此列的顏色
     m_list.SetTextBkColor(RGB(240,247,233));           //背景顏色

	 m_list2.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP);
     m_list2.SetTextColor(RGB(0,0,255));                  //顯示字體的顏色
     m_list2.SetBkColor(RGB(240,247,233));             //選中此列的顏色
     m_list2.SetTextBkColor(RGB(240,247,233));           //背景顏色

	 m_list3.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP);
     m_list3.SetTextColor(RGB(0,0,255));                  //顯示字體的顏色
     m_list3.SetBkColor(RGB(240,247,233));             //選中此列的顏色
     m_list3.SetTextBkColor(RGB(240,247,233));           //背景顏色

	 m_list4.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP);
     m_list4.SetTextColor(RGB(0,0,255));                  //顯示字體的顏色
     m_list4.SetBkColor(RGB(240,247,233));             //選中此列的顏色
     m_list4.SetTextBkColor(RGB(240,247,233));           //背景顏色

	 m_list2.InsertColumn(0,"步驟");
	 m_list2.InsertColumn(1,"符號棧");
	 m_list2.InsertColumn(2,"輸入串",LVCFMT_RIGHT);
	 m_list2.InsertColumn(3,"動作");
	 m_list2.InsertColumn(4,"原因");
	 m_list2.InsertColumn(5,"最左素短語");

	 m_list2.SetColumnWidth(0,40);
	 m_list2.SetColumnWidth(1,100);
	 m_list2.SetColumnWidth(2,100);
	 m_list2.SetColumnWidth(3,60);
	 m_list2.SetColumnWidth(4,110);
	 m_list2.SetColumnWidth(5,80);

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::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(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::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::InitVnVt(int Ptnum)                  //生成終結符集Vt
{                                                 //和非終結符集Vn
	Vn.Empty();
	Vt.Empty();
	Start.Empty();
	int i,j;
	Start=Pt[0].pleft;
	for(i=0;i<Ptnum;i++)
	{
		if(Vn.Find(Pt[i].pleft)==-1)
			Vn+=Pt[i].pleft;
		for(j=0;j<Pt[i].pright.GetLength();j++)
		{
			if(isupper(Pt[i].pright[j]))
			{
				if(Vn.Find(Pt[i].pright[j])==-1)
					Vn+=Pt[i].pright[j];
			}
			else
				if(Vt.Find(Pt[i].pright[j])==-1)
					Vt+=Pt[i].pright[j];
		}
	}
}
int CMyDlg::InitPt()                
{

	int i;
	int spacepos=0;
	int retpos=0;
	int retflag;
	int pos;
	for(i=0;i<50;i++)
	{
		Pt[i].pleft=' ';
		Pt[i].pright=" ";
	}
	i=0;


	CString s;
	CString temp1;
	CString temp2;
	CString ret;
	s.Empty();
	temp1.Empty();
	temp2.Empty();
	ret.Empty();
	s=m_grammar+"\r\n";

	while(1)                   //刪除文法之前的字符
	{
		if(s!="")
		{
			if(!isupper(s[0]))
				s.Delete(0,1);
			else break;
		}
		else
		{
			AfxMessageBox("非算符優先文法~!");
			return(-1);
		}
			
	}

	while(1)                   //刪除文法前中后的空格符
	{
		spacepos=s.Find(" ");
		if(spacepos==-1)
			break;
		s.Delete(spacepos,1);
	}

	spacepos=0;
	retflag=0;
	while(1)                   //刪除文法前中后多余回車符
	{
		ret.Empty();
		retpos=s.Find("\r\n",retflag);
		if(retpos==-1)
			break;
		if(retpos<=s.GetLength()-3)
		{
			ret+=s[retpos+2];
			ret+=s[retpos+3];
		}
		if(ret=="\r\n")
		{
			s.Delete(retpos,2);
			retflag=retpos;
		}
		else retflag=retpos+1;
	}


////////////////
	m_grammar=s;
	UpdateData(false);

	Start=m_grammar[0];
	s="$->#"+Start+"#\r\n"+s;

	while(s.Find("\r\n")!=-1)          //利用文法生成Pt
	{								   //每條將文法的左部存在Pt.pleft(char)	
		pos=s.Find("->");              //右部存入Pt.pright(CString)
        temp1=s.Left(pos);
		s.Delete(0,pos+2);
		while(s.Find("\r\n") > s.Find("|") && s.Find("|") != -1)
		{
			pos=s.Find("|");
			temp2=s.Left(pos);
			s.Delete(0,pos+1);
			if(temp1=="")
			{
				AfxMessageBox("非算符優先文法~!");
				return(-1);
			}
			Pt[i].pleft=temp1[0];
			Pt[i].pright=temp2;
			i++;
		}
		if(s.Find("\r\n")!=-1)
		{
			pos=s.Find("\r\n");
			temp2=s.Left(pos);
			s.Delete(0,pos+2);
			if(temp1=="")
			{
				AfxMessageBox("非算符優先文法~!");
				return(-1);
			}
			Pt[i].pleft=temp1[0];
			Pt[i].pright=temp2;
			i++;
		}
	}
	for(i=0;Pt[i].pleft!=' ' && Pt[i].pright!="";i++) {}  //計算文法長度 
	InitVnVt(i);
	return i;
}

void CMyDlg::InsertFirstOrLast(char P,char a,CString flag)
{
	int intVn;
	int intVt;
	intVn=Vn.Find(P);
	intVt=Vt.Find(a);
	if(flag=="First")
	{
		if(F[intVn][intVt]==false)
		{
			F[intVn][intVt]=true;
			stack.push(P,a);
		}
	}
	if(flag=="Last")		
	{
		if(L[intVn][intVt]==false)
		{
			L[intVn][intVt]=true;
			stack.push(P,a);
		}
	}
}

void CMyDlg::SetFirstVt(int Ptnum)               //建立FirstVt集
{
	int i,j;
	char Q;
	char a;
	for(i=0;i<100;i++)
		for(j=0;j<100;j++)
			F[i][j]=false;

	for(i=0;i<Ptnum;i++)
	{
		if(Vt.Find(Pt[i].pright[0])!=-1)
			InsertFirstOrLast(Pt[i].pleft,Pt[i].pright[0],"First");
		if(Pt[i].pright.GetLength()>=2)
			if(Vn.Find(Pt[i].pright[0])!=-1 && Vt.Find(Pt[i].pright[1])!=-1)
				InsertFirstOrLast(Pt[i].pleft,Pt[i].pright[1],"First");
	}
	while(!stack.empty())
	{
		stack.pop(Q,a);
		for(i=0;i<Ptnum;i++)
			if(Pt[i].pright[0]==Q)
				InsertFirstOrLast(Pt[i].pleft,a,"First");
	}
	

}

void CMyDlg::SetLastVt(int Ptnum)                  //建立LastVt集
{
	int i,j;
	char Q;
	char a;
	for(i=0;i<100;i++)
		for(j=0;j<100;j++)
			L[i][j]=false;
	for(i=0;i<Ptnum;i++)
	{
		if(Vt.Find(Pt[i].pright.Right(1)[0]))
			InsertFirstOrLast(Pt[i].pleft,Pt[i].pright.Right(1)[0],"Last");
		if(Pt[i].pright.GetLength()>=2)
			if(Vt.Find(Pt[i].pright.Right(2)[0])!=-1 && Vn.Find(Pt[i].pright.Right(2)[1])!=-1)
				InsertFirstOrLast(Pt[i].pleft,Pt[i].pright.Right(2)[0],"Last");
	}
	while(!stack.empty())
	{
		stack.pop(Q,a);
		for(i=0;i<Ptnum;i++)
			if(Pt[i].pright[0]==Q)
				InsertFirstOrLast(Pt[i].pleft,a,"Last");
	}

			
}

void CMyDlg::Create_G_table(int Ptnum)                   //創建算符優先表
{
	int i;
	int j;
	int k;
	int Vnnum;
	int Pos0;
	int Pos1;
	int Pos2;
	for(i=0;i<100;i++)
		for(j=0;j<100;j++)
			G[i][j]=' ';
	for(i=0;i<Ptnum;i++)
		for(j=0;j<Pt[i].pright.GetLength()-1;j++)
		{
			Pos0=Vt.Find(Pt[i].pright[j]);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色乱码一区二区三区88| 在线观看亚洲一区| 99精品欧美一区二区三区小说| 国产最新精品免费| 91麻豆123| 欧美精品123区| 精品av久久707| 亚洲激情欧美激情| 免费高清不卡av| 成人黄色免费短视频| 欧美日韩成人综合在线一区二区| 精品伦理精品一区| 一区二区三区鲁丝不卡| 青青草一区二区三区| 91尤物视频在线观看| 欧美日韩国产精品自在自线| 国产色一区二区| 午夜精品久久久久| 成人动漫在线一区| 在线这里只有精品| 精品久久久久久久人人人人传媒 | 2017欧美狠狠色| 亚洲乱码日产精品bd| 久久电影国产免费久久电影 | 国产suv精品一区二区三区| 色菇凉天天综合网| 日本一区二区三区在线观看| 日韩不卡一二三区| 欧美婷婷六月丁香综合色| 国产欧美一区二区精品仙草咪| 一区二区三区四区精品在线视频| 国产一区亚洲一区| 337p亚洲精品色噜噜| 夜夜精品视频一区二区| 成人动漫精品一区二区| 久久综合精品国产一区二区三区| 亚洲最色的网站| 91免费视频大全| 国产人成亚洲第一网站在线播放| 看电视剧不卡顿的网站| 3atv在线一区二区三区| 亚洲成av人片在线观看| 国产成人av一区二区三区在线| 日韩午夜激情av| 日本特黄久久久高潮| 欧美精品在线视频| 天天综合色天天综合| 欧美影片第一页| 亚洲精选视频在线| 91女神在线视频| 亚洲精品亚洲人成人网在线播放| 99精品视频一区| 国产精品美女久久久久aⅴ | 中文成人av在线| 国产成人午夜99999| 久久久噜噜噜久久人人看| 黑人巨大精品欧美一区| 国产一区二区三区综合| 99精品欧美一区二区蜜桃免费| 国产免费成人在线视频| 国产成人精品午夜视频免费| 久久久综合网站| 成人激情动漫在线观看| 国产精品色眯眯| 色综合久久精品| 一区二区三区四区高清精品免费观看 | 在线观看区一区二| 国产精品久线观看视频| 99久久综合色| 一区二区免费看| 91精品国产黑色紧身裤美女| 男女男精品视频| 久久日韩粉嫩一区二区三区| 国产精品一区免费视频| 欧美不卡视频一区| 国产99精品视频| 一区二区三区影院| 日韩免费电影一区| 国产乱人伦偷精品视频不卡| 国产精品国产三级国产aⅴ无密码| 91福利在线看| av在线这里只有精品| 久久精品72免费观看| 亚洲国产乱码最新视频| 欧美国产亚洲另类动漫| 欧美成人a视频| 欧美少妇xxx| 91一区二区三区在线观看| 国产乱色国产精品免费视频| 天天色天天操综合| 亚洲女子a中天字幕| 欧美国产成人精品| 精品国产亚洲在线| 欧美一区二区国产| 欧美人妖巨大在线| 欧美撒尿777hd撒尿| 白白色亚洲国产精品| 国产福利一区二区三区| 精品影视av免费| 麻豆精品一二三| 亚洲.国产.中文慕字在线| 国产女人18水真多18精品一级做| 免费成人在线视频观看| 亚洲成人av免费| 一区二区三区在线观看国产| 国产精品美女久久久久久久久久久| 精品国产网站在线观看| 欧美一级精品在线| 91.xcao| 欧美电影在哪看比较好| 欧美日韩一区小说| 欧美丝袜丝交足nylons| 欧美日韩一区二区三区在线| 91美女福利视频| 色婷婷精品大在线视频| 欧洲生活片亚洲生活在线观看| 99久久国产综合色|国产精品| 成人av先锋影音| 成人午夜视频在线| 99这里只有久久精品视频| 99久久精品国产导航| 在线免费观看成人短视频| 色吊一区二区三区| 欧美日韩卡一卡二| 欧美一二三在线| 久久婷婷成人综合色| 日本一区二区三区久久久久久久久不 | 色婷婷一区二区三区四区| 色婷婷国产精品综合在线观看| 在线欧美日韩国产| 欧美久久高跟鞋激| 26uuu欧美| 日韩美女视频一区| 洋洋av久久久久久久一区| 亚洲v中文字幕| 久久99精品国产.久久久久久| 国产精品自产自拍| 99国产欧美另类久久久精品| 欧美午夜精品理论片a级按摩| 在线综合亚洲欧美在线视频| 日韩免费视频线观看| 久久亚洲捆绑美女| 综合在线观看色| 日本欧美一区二区三区| 国产成人免费视频一区| 欧洲亚洲精品在线| 精品久久久久久久人人人人传媒 | 亚洲美女在线一区| 性做久久久久久久免费看| 精品一区二区三区免费观看| 99热在这里有精品免费| 欧美一级片免费看| 中文字幕一区二区三区av| 日本一道高清亚洲日美韩| 丁香婷婷综合激情五月色| 欧美日韩一区成人| 国产精品美女久久久久久| 日韩和欧美一区二区三区| 成人黄色小视频| 欧美一级国产精品| 亚洲精品视频一区二区| 国产在线播放一区三区四| 91福利区一区二区三区| 久久久久国产精品麻豆| 亚洲一区二区三区国产| 成人丝袜18视频在线观看| 欧美男同性恋视频网站| 综合分类小说区另类春色亚洲小说欧美| 日韩高清在线不卡| 91行情网站电视在线观看高清版| 欧美精品一区二区三区蜜桃视频| 一二三区精品福利视频| 99久久99久久免费精品蜜臀| 欧美成人高清电影在线| 天堂va蜜桃一区二区三区 | 亚洲一区日韩精品中文字幕| 国产成人三级在线观看| 欧美一区二区三区婷婷月色| 一区二区三区在线视频观看| 国产91在线看| 欧美精品一区视频| 日韩av电影免费观看高清完整版 | 成人美女视频在线看| 久久品道一品道久久精品| 免费精品视频在线| 欧美日韩精品一区二区三区蜜桃| 国产精品国产馆在线真实露脸| 国产在线播放一区三区四| 日韩精品一区二区在线| 天使萌一区二区三区免费观看| 91免费观看国产| 亚洲欧美激情插| 91国产精品成人| 亚洲蜜桃精久久久久久久| 色综合天天综合在线视频| 中文字幕中文乱码欧美一区二区 | 欧美性受xxxx黑人xyx性爽| 亚洲欧美日韩中文播放| 99精品视频在线播放观看| 国产精品国产三级国产aⅴ无密码|