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

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

?? analysentendlg.cpp

?? 編譯原理語句分析 對PASCAL語言的語句分析
?? CPP
字號:
// AnalySentenDlg.cpp : implementation file
//

#include "stdafx.h"
#include "AnalySenten.h"
#include "AnalySentenDlg.h"
#include <vector>
#include <cassert>
#include "string.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)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAnalySentenDlg dialog

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

void CAnalySentenDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAnalySentenDlg)
	DDX_Control(pDX, IDC_LIST2, m_anaList);
	DDX_Text(pDX, IDC_SENTEN, m_sentence);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAnalySentenDlg, CDialog)
	//{{AFX_MSG_MAP(CAnalySentenDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(ID_ANA_OK, OnAnaOk)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAnalySentenDlg message handlers

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

	// 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
    
	DWORD dwSytle=::GetWindowLong(m_anaList.m_hWnd,GWL_STYLE);
	SetWindowLong(m_anaList.m_hWnd,GWL_STYLE,dwSytle|LVS_REPORT);
	DWORD ExStyle=m_anaList.GetExtendedStyle();
    m_anaList.SetExtendedStyle(ExStyle|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	//網(wǎng)格類型的列表框
	m_anaList.InsertColumn(0,"步驟",LVCFMT_CENTER,45);   
    m_anaList.InsertColumn(1,"狀態(tài)棧",LVCFMT_CENTER,75);   
    m_anaList.InsertColumn(2,"符號棧",LVCFMT_CENTER,75);
	m_anaList.InsertColumn(3,"輸入串",LVCFMT_CENTER,60);  
	m_anaList.InsertColumn(4,"ACTION",LVCFMT_LEFT,90);  
	m_anaList.InsertColumn(5,"GOTO",LVCFMT_LEFT,80);  
	                
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CAnalySentenDlg::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 CAnalySentenDlg::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 CAnalySentenDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CAnalySentenDlg::OnAnaOk() 
{
	UpdateData(TRUE);
	//LR lr;
	// TODO: Add your control notification handler code here
	
	int k,loop=0;//循環(huán)變量
	int i=0;
	nPos=0; //定位變量
	step=1;  
	char cbuffer;
	char Vp;//非終結(jié)符號 

	bool bContinue,bError,bnFind;
	bContinue=true;
	bError=false;
	bnFind=true;

	m_anaList.DeleteAllItems();//滯空列表的內(nèi)容
	
	//1首先讀入字符輸入串 壓狀態(tài)為0 符號為#
	vStatus.push_back(0);//狀態(tài)從0開始
	vSymbol.push_back('#');//符號從#開始

	if (m_sentence.IsEmpty()||(!IsSmlChar(m_sentence)))//循環(huán)查看句子的內(nèi)容 是否有非小寫字母 有則報錯
		{
			MessageBox("輸入的句子錯誤,請改正!", "錯誤", MB_OK | MB_ICONSTOP);
			return;
		}
//	while(bnFind)
//	{
//		bnFind=jihe.Find(m_sentence.GetAt(loop));
//		loop++;
//	}
//	if(!bnFind)
//	{
//		MessageBox("輸入的句子不全由文法的終結(jié)符號組成,請改正!", "錯誤", MB_OK | MB_ICONSTOP);
//		return ;
//	}
	

	//增加第一行
	m_temp=m_sentence+"#";//句子放入臨時變量
	
	while((bContinue) && (!bError))
	{   
		assert(nPos < m_sentence.GetLength());		//異常捕捉
		assert(vStatus.size() == vSymbol.size());
		for(int j=0;j<vStatus.size();j++)
		{
			t1.Format("%d",vStatus[j]);//將vector放入字符串
		}
		for(j=0;j<vSymbol.size();j++)//
		{
			t2.Format("%c",vSymbol[j]);//將VECTOR放入字符串
		}
		cbuffer=m_sentence.GetAt(nPos);
		//2利用action(status,symbol)返回一個字符串  判斷類型:R(規(guī)約)/S(移進)/acc(接受)/錯誤
//	    m_act=lr.GetAction(vStatus.back(),cbuffer);
		//3這里用選擇語句來判斷是S/R 判斷規(guī)約還是移進 1個函數(shù) GoDir()返回int 向哪走 并用來壓棧
		switch(m_act.GetAt(0))
		{
		case 'S':
			m_buffer.Format("%d",step);
			m_anaList.InsertItem(nPos,m_buffer);//輸入步驟
			m_anaList.SetItemText(nPos,1,t1);//輸入狀態(tài)棧
			m_anaList.SetItemText(nPos,2,t2);//輸入符號串
			m_anaList.SetItemText(nPos,3,m_temp.Mid(nPos,m_sentence.GetLength()-1));//輸入串
			m_anaList.SetItemText(nPos,4,m_act);//ACTION
			m_anaList.SetItemText(nPos,5,m_goto);//GOTO
			vSymbol.push_back(cbuffer);//將當前符號壓棧
		
			//5移進的話就將symbol的下一個字符壓棧 符號串取后面N-1位 將Sn的n狀態(tài)壓棧
			vStatus.push_back(GoDir(m_act));//將ACT返回的值的第2個元素--狀態(tài) 壓棧
			m_temp=m_temp.Mid(nPos,m_sentence.GetLength()-1);//把當前字符從輸入串中刪去
			nPos++;
			break;
		case 'R':
			//6規(guī)約的話輸入串不變,先彈出STATUS和SYMBOL的棧頂,因為goto(status,BIGsymbol)是N,語法分析器把
			//BIGsymbol和N分別壓入棧
			m_buffer=GoDir(m_act);
			r_temp=atoi(m_buffer);		//得到產(chǎn)生式的序號
//			Vp=lr.GetLeftSymbol(r_temp);//得到非終結(jié)符號
//			r_dir=lr.GetGoTo(vStatus.back(),cbuffer);
		
			m_buffer.Format("%d",nPos);m_anaList.InsertItem(nPos,m_buffer);
			m_anaList.SetItemText(nPos,1,t1);
			m_anaList.SetItemText(nPos,2,t2);
			m_anaList.SetItemText(nPos,3,m_temp);//輸入串不變
			m_anaList.SetItemText(nPos,4,m_act);//ACTION
			m_buffer.Format("%d",r_dir);
			m_anaList.SetItemText(nPos,5,m_buffer);//GOTO
//			for(k=0;k<lr.GetRightNum(r_temp);k++)//產(chǎn)生式右邊的字符個數(shù)
//			{
//				vSymbol.pop_back();
//				vStatus.pop_back();
//			}//將規(guī)約產(chǎn)生式右邊的字符彈棧
			vSymbol.push_back(Vp);
			vStatus.push_back(r_dir);
			//取到產(chǎn)生式對應(yīng)的左邊的非終結(jié)符并壓棧 
			//彈棧后,壓DIR(goto的內(nèi)容)到狀態(tài)棧
			break;
			//4如果不是R/S 就判斷是否ACC 是的話表示完成。
		case 'a'://直到acc退出循環(huán)
			if (m_sentence.GetAt(nPos) == '#')
			{
				m_buffer.Format("%d",step);
				m_anaList.InsertItem(nPos,m_buffer);//輸入步驟
				m_anaList.SetItemText(nPos,1,t1);//輸入狀態(tài)棧
				m_anaList.SetItemText(nPos,2,t2);//輸入符號串
				m_anaList.SetItemText(nPos,3,m_temp.Mid(nPos,m_temp.GetLength()-1));//輸入串
				m_anaList.SetItemText(nPos,4,m_act);//ACTION
				m_anaList.SetItemText(nPos,5,m_goto);//GOTO
				bContinue=false;//正確輸出
			}
			else
				bError=true;
				break;
		//錯誤,句子不是文法G的句子
		default:
				bError=true;//停止循環(huán)和記錄錯誤
		}
		
		step++;//步驟自加
	}//7循環(huán)
	if (!bError)
	{
		MessageBox("語句分析正確!", "結(jié)果提示", MB_OK | MB_ICONSTOP);
	
	}
	else
	{
		MessageBox("分析失敗,所給句子不是文法能產(chǎn)生的句子", "結(jié)果提示", MB_OK | MB_ICONSTOP);
	
	}
}

bool CAnalySentenDlg::IsSmlChar(CString inputStr)//判斷字符串是否全為小寫字母
{
	for(int i=0;i<inputStr.GetLength();i++ ) 
   { 
	char oneChar=inputStr.GetAt(i);
	if((oneChar<'a')||(oneChar>'z')) 
	return false; 
   } 
   return true; 
}


int CAnalySentenDlg::GoDir(CString godir)//取action得到的字符后面的狀態(tài)或產(chǎn)生式序號
{	
		CString buffer1=godir.Mid(1,godir.GetLength()-1);
		int  buffer2;
		buffer2=atoi(buffer1);
		return buffer2;
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月综合激情网| 久久嫩草精品久久久精品一| 樱花草国产18久久久久| 91在线国产观看| 一区二区三区四区精品在线视频| 91小视频在线观看| 亚洲婷婷国产精品电影人久久| 色综合天天做天天爱| 亚洲一区二区三区中文字幕| 欧美精品aⅴ在线视频| 欧美aaaaaa午夜精品| 久久综合狠狠综合久久激情| 国产精品一区专区| 最新中文字幕一区二区三区| 欧洲激情一区二区| 蜜桃av一区二区| 国产精品私人自拍| 在线国产亚洲欧美| 久久精品久久99精品久久| 久久久综合九色合综国产精品| 成人在线综合网| 亚洲激情在线激情| 日韩亚洲欧美高清| 国产精一区二区三区| 亚洲免费观看高清完整版在线| 欧美老肥妇做.爰bbww视频| 国产一区亚洲一区| 一级女性全黄久久生活片免费| 日韩欧美亚洲一区二区| www.99精品| 免费观看一级欧美片| 中文字幕在线免费不卡| 日韩午夜三级在线| 99精品在线免费| 奇米在线7777在线精品| 亚洲天天做日日做天天谢日日欢 | 日韩欧美一区二区三区在线| 国产成人日日夜夜| 日韩精品一卡二卡三卡四卡无卡| 国产欧美一区二区精品婷婷| 欧美欧美午夜aⅴ在线观看| 国产91富婆露脸刺激对白| 丝袜亚洲另类丝袜在线| 国产精品久久影院| 日韩免费观看高清完整版在线观看| 99久久精品99国产精品 | 亚洲在线视频免费观看| 久久亚洲一级片| 欧美日韩在线免费视频| 国产成人精品1024| 青青草国产成人av片免费| 一区二区三区欧美久久| 国产日韩v精品一区二区| 日韩免费一区二区三区在线播放| 色综合天天综合网国产成人综合天| 狠狠色丁香婷婷综合| 三级欧美韩日大片在线看| 亚洲精品欧美综合四区| 中文字幕av一区 二区| 精品日韩一区二区三区免费视频| 欧美性色黄大片| 成人av影视在线观看| 老司机午夜精品| 日本vs亚洲vs韩国一区三区二区 | 国产欧美一区在线| 久久影院午夜论| 日韩一区二区视频| 欧美日韩在线三级| 欧美日韩视频一区二区| 色综合亚洲欧洲| 色八戒一区二区三区| 色综合网色综合| 色婷婷av一区二区| 欧美在线免费视屏| 欧美伊人久久大香线蕉综合69| 91麻豆国产在线观看| 91视频免费观看| 色婷婷久久99综合精品jk白丝| 99在线精品观看| 91在线高清观看| 91美女片黄在线| 91美女蜜桃在线| 欧美视频在线播放| 欧美日韩久久久一区| 51久久夜色精品国产麻豆| 4438亚洲最大| 久久影院午夜论| 久久精品男人的天堂| 久久综合av免费| 国产精品视频一二三区 | 亚洲欧美日本韩国| 亚洲在线观看免费视频| 亚洲va韩国va欧美va| 天天综合天天综合色| 久久99久久99| 成人免费看的视频| 91成人在线精品| 欧美一区二区三区白人| 精品日产卡一卡二卡麻豆| 久久精品人人做人人综合| 国产欧美一区二区三区鸳鸯浴| 《视频一区视频二区| 亚洲高清中文字幕| 精品一区二区三区在线观看| 国产成人免费在线观看不卡| 99在线热播精品免费| 精品视频免费在线| 欧美精品一区二区不卡| 久久久三级国产网站| 亚洲国产精品成人久久综合一区 | 91麻豆精品国产91久久久久久久久| 日韩一区二区三区视频在线| 日韩欧美一卡二卡| 国产精品色一区二区三区| 亚洲一级二级三级| 奇米在线7777在线精品| 成人av午夜电影| 日韩一级欧美一级| 国产精品全国免费观看高清 | 欧美一区二区三区在线电影 | 成人av片在线观看| 在线观看视频91| 久久网站热最新地址| 亚洲精品成人在线| 国产美女娇喘av呻吟久久| 欧美在线播放高清精品| 久久久久成人黄色影片| 亚洲国产裸拍裸体视频在线观看乱了| 麻豆精品精品国产自在97香蕉| 99在线视频精品| 2014亚洲片线观看视频免费| 亚洲你懂的在线视频| 精品中文av资源站在线观看| 91看片淫黄大片一级在线观看| 欧美大片日本大片免费观看| 亚洲一区免费观看| 国产91综合一区在线观看| 欧美一级片在线| 一区二区三区不卡视频| 国产成人av电影免费在线观看| 日韩欧美综合在线| 一区二区三区中文字幕| 成人精品鲁一区一区二区| 日韩欧美国产成人一区二区| 亚洲va欧美va国产va天堂影院| www.日韩大片| 国产欧美一区二区精品性色超碰| 日本午夜精品视频在线观看 | 不卡电影一区二区三区| 欧美xxxxxxxx| 青草av.久久免费一区| 色综合久久天天| 国产精品热久久久久夜色精品三区| 麻豆成人免费电影| 3atv在线一区二区三区| 午夜视频一区在线观看| 欧美性淫爽ww久久久久无| 亚洲视频香蕉人妖| 97精品国产97久久久久久久久久久久| ww久久中文字幕| 日韩美女精品在线| 91精品国产欧美一区二区18| 国产精品女人毛片| 成人毛片视频在线观看| 国产午夜三级一区二区三| 国模冰冰炮一区二区| 精品国产乱码久久久久久影片| 青青青爽久久午夜综合久久午夜| 欧美精品免费视频| 日本视频一区二区三区| 91精品在线观看入口| 日韩精品福利网| 欧美成人性战久久| 精品一区二区免费视频| 久久综合九色综合欧美亚洲| 国产制服丝袜一区| 国产欧美综合色| av男人天堂一区| 亚洲在线成人精品| 欧美高清视频不卡网| 日韩黄色片在线观看| 日韩精品一区二区三区swag| 久久精品99久久久| 久久综合九色综合久久久精品综合| 国产精品99久久久久久宅男| 欧美国产一区在线| 色综合色综合色综合色综合色综合| 亚洲一区二区三区自拍| 91精品国产综合久久久久久| 久久9热精品视频| 日本一区二区三区久久久久久久久不| 成人精品鲁一区一区二区| 国产一区二区三区不卡在线观看| 欧美日韩在线播放三区| 一区二区三区鲁丝不卡| 7777女厕盗摄久久久| 九九精品一区二区| 亚洲一区在线看| 欧美一区二区在线观看| 国产不卡在线一区|