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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? 算符優(yōu)先文法dlg.cpp

?? 非常不錯(cuò)的算符優(yōu)先文法..課程設(shè)計(jì)時(shí)做的
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
// 算符優(yōu)先文法Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "算符優(yōu)先文法.h"
#include "算符優(yōu)先文法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;                     //假定能夠成功規(guī)約
	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,"符號(hào)棧");
	 m_list2.InsertColumn(2,"輸入串",LVCFMT_RIGHT);
	 m_list2.InsertColumn(3,"動(dòng)作");
	 m_list2.InsertColumn(4,"原因");
	 m_list2.InsertColumn(5,"最左素短語(yǔ)");

	 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)                  //生成終結(jié)符集Vt
{                                                 //和非終結(jié)符集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("非算符優(yōu)先文法~!");
			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("非算符優(yōu)先文法~!");
				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("非算符優(yōu)先文法~!");
				return(-1);
			}
			Pt[i].pleft=temp1[0];
			Pt[i].pright=temp2;
			i++;
		}
	}
	for(i=0;Pt[i].pleft!=' ' && Pt[i].pright!="";i++) {}  //計(jì)算文法長(zhǎng)度 
	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)                   //創(chuàng)建算符優(yōu)先表
{
	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]);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合一区二区三区| 91精选在线观看| 免费欧美在线视频| 亚洲国产精品成人综合色在线婷婷| 欧美日韩精品是欧美日韩精品| 国产成人亚洲精品狼色在线 | 精品国产自在久精品国产| 99精品国产视频| 久久99国产精品久久99| 香港成人在线视频| 最新日韩在线视频| 中文子幕无线码一区tr| 精品国产a毛片| 91精品福利在线一区二区三区 | 波波电影院一区二区三区| 日本aⅴ亚洲精品中文乱码| 亚洲午夜av在线| 亚洲精品久久久蜜桃| 中文字幕一区不卡| 国产精品免费网站在线观看| 久久久久综合网| 日韩精品一区二| 欧美一区二区国产| 欧美一区二区在线视频| 欧美日韩亚洲综合在线| 在线看不卡av| 欧美亚州韩日在线看免费版国语版| 91在线精品秘密一区二区| 国产成人精品亚洲日本在线桃色| 久久99国产乱子伦精品免费| 免费看日韩a级影片| 日韩精品亚洲专区| 日韩精彩视频在线观看| 日韩福利视频网| 蜜臀av性久久久久蜜臀av麻豆| 亚洲电影你懂得| 视频一区二区欧美| 日韩av高清在线观看| 青青草97国产精品免费观看无弹窗版| 亚洲成在线观看| 日日夜夜精品视频天天综合网| 亚洲电影视频在线| 日韩va亚洲va欧美va久久| 日韩精品久久理论片| 五月激情丁香一区二区三区| 日韩在线一区二区三区| 美女一区二区视频| 国产一区二区三区观看| 高清国产一区二区| 99久久久久久99| 欧美在线观看一区| 91精品国产综合久久精品 | 日韩一区在线看| 一区二区在线电影| 天堂va蜜桃一区二区三区漫画版| 日av在线不卡| 国产成人精品综合在线观看| av一二三不卡影片| 欧美三级一区二区| 日韩欧美自拍偷拍| 亚洲国产精品二十页| 玉米视频成人免费看| 青青草原综合久久大伊人精品| 国产精品一区二区91| 91亚洲午夜精品久久久久久| 欧美老人xxxx18| 国产欧美精品在线观看| 亚洲靠逼com| 另类的小说在线视频另类成人小视频在线| 精品中文av资源站在线观看| 成人国产精品免费网站| 欧美日韩黄色一区二区| 久久网这里都是精品| **性色生活片久久毛片| 免费观看成人鲁鲁鲁鲁鲁视频| 国产**成人网毛片九色| 欧美日韩成人综合| 国产日韩亚洲欧美综合| 午夜视频在线观看一区| 国产成人综合精品三级| 欧美揉bbbbb揉bbbbb| 国产日韩欧美激情| 日韩精品视频网| caoporm超碰国产精品| 欧美一级在线视频| 亚洲图片激情小说| 国产美女av一区二区三区| 在线观看av不卡| 久久精品夜色噜噜亚洲aⅴ| 亚洲一二三区视频在线观看| 国产精品18久久久久久久网站| 欧美日韩一区二区三区在线| 国产精品午夜免费| 六月婷婷色综合| 欧美午夜宅男影院| 中文字幕精品三区| 日韩高清欧美激情| 欧美综合一区二区三区| 中文字幕av不卡| 精品一区二区日韩| 欧美精品777| 亚洲欧洲另类国产综合| 国产精品亚洲人在线观看| 欧美日韩黄色一区二区| 亚洲天天做日日做天天谢日日欢 | 精品一区二区三区久久久| 91年精品国产| 欧美国产精品专区| 国产尤物一区二区| 欧美一级欧美一级在线播放| 亚洲精品中文在线| eeuss鲁片一区二区三区在线观看| 精品国产一区二区三区久久影院| 婷婷亚洲久悠悠色悠在线播放| 91视频免费看| 亚洲天堂av老司机| 国产sm精品调教视频网站| 日韩精品资源二区在线| 午夜伦欧美伦电影理论片| 在线区一区二视频| 一区二区三区视频在线看| 97成人超碰视| 亚洲欧洲av在线| av在线一区二区三区| 国产日韩欧美综合一区| 国产精品一区二区你懂的| 精品国产乱码久久| 久久丁香综合五月国产三级网站| 日韩欧美资源站| 免费久久99精品国产| 日韩欧美国产wwwww| 蜜桃av一区二区在线观看| 日韩午夜精品视频| 韩国毛片一区二区三区| 久久亚洲欧美国产精品乐播| 国产一区二区毛片| 日本一区二区三区在线观看| 丁香婷婷深情五月亚洲| 国产精品午夜春色av| 成人h精品动漫一区二区三区| 中文字幕不卡在线| 99久久777色| 亚洲高清一区二区三区| 8x8x8国产精品| 九一九一国产精品| 国产日本亚洲高清| a在线播放不卡| 亚洲高清视频的网址| 欧美一区国产二区| 国产精品夜夜嗨| 亚洲色图都市小说| 欧美日韩精品一区二区三区四区 | 日韩免费福利电影在线观看| 国内不卡的二区三区中文字幕 | 偷拍一区二区三区四区| 91精品欧美一区二区三区综合在| 美日韩一区二区三区| 久久综合网色—综合色88| 国产69精品久久777的优势| 亚洲欧洲综合另类| 在线播放欧美女士性生活| 激情综合色综合久久综合| 国产精品青草综合久久久久99| 色域天天综合网| 蜜臀久久久99精品久久久久久| 久久精品亚洲精品国产欧美kt∨| bt7086福利一区国产| 午夜日韩在线观看| 久久久高清一区二区三区| 99re热视频这里只精品| 午夜激情一区二区| 久久久久国产精品厨房| 91久久精品国产91性色tv| 欧美96一区二区免费视频| 国产精品欧美久久久久无广告| 欧美日韩亚州综合| 国产福利一区二区三区在线视频| 亚洲精选视频免费看| 日韩欧美一区在线| 91在线观看一区二区| 美女视频第一区二区三区免费观看网站| 久久精品人人做人人爽人人| 欧日韩精品视频| 国产伦精一区二区三区| 亚洲国产精品天堂| 国产午夜精品福利| 欧美日韩国产天堂| 丁香一区二区三区| 免费欧美日韩国产三级电影| 亚洲欧美日韩在线不卡| 精品久久久三级丝袜| 91成人国产精品| 国产黄色91视频| 三级久久三级久久久| 国产精品高清亚洲| 精品乱码亚洲一区二区不卡| 欧美三级资源在线| 99国产精品一区| 国产精品香蕉一区二区三区| 视频一区在线播放|