www.pudn.com > CLanCompiler.rar > MainFrm.cpp


// MainFrm.cpp : implementation of the CMainFrame class 
// 
 
#include "stdafx.h" 
#include "CLanCompiler.h" 
 
#include "Compiler.h" 
#include "MainFrm.h" 
#include "LeftView.h" 
#include "CLanCompilerView.h" 
 
	 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame 
 
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd) 
 
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) 
	//{{AFX_MSG_MAP(CMainFrame) 
	ON_WM_CREATE() 
     ON_COMMAND(ID_Error, OnError) 
	ON_COMMAND(ID_Source, OnSource) 
	ON_COMMAND(ID_StartCompile, OnStartCompile) 
	ON_UPDATE_COMMAND_UI(ID_Error, OnUpdateError) 
	ON_COMMAND(ID_StartCompiler, OnStartCompiler) 
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen) 
	ON_COMMAND(ID_FILE_SAVE, OnFileSave) 
	ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
static UINT indicators[] = 
{ 
	ID_SEPARATOR,           // status line indicator 
	ID_INDICATOR_CAPS, 
	ID_INDICATOR_NUM, 
	ID_INDICATOR_SCRL, 
}; 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame construction/destruction 
 
CMainFrame::CMainFrame() 
{ 
	IsDisplayed=false; 
	// TODO: add member initialization code here 
	 
} 
 
CMainFrame::~CMainFrame() 
{ 
} 
 
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
	if (CFrameWnd::OnCreate(lpCreateStruct) == -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 toolbar\n"); 
		return -1;      // fail to create 
	} 
 
	if (!m_wndStatusBar.Create(this) || 
		!m_wndStatusBar.SetIndicators(indicators, 
		  sizeof(indicators)/sizeof(UINT))) 
	{ 
		TRACE0("Failed to create status bar\n"); 
		return -1;      // fail to create 
	} 
 
	// TODO: Delete these three lines if you don't want the toolbar to 
	//  be dockable 
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); 
	EnableDocking(CBRS_ALIGN_ANY); 
	DockControlBar(&m_wndToolBar); 
 
    err_dlg.Create(IDD_OutputErr,this); 
	return 0; 
} 
 
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, 
	CCreateContext* pContext) 
{ 
 
 
    if (!m_wndSplitter.CreateStatic(this, 1, 2)) 
		return FALSE; 
     m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(100, 100), pContext); 
   
 
  if(m_wndSplitter1.CreateStatic(&m_wndSplitter,2,1,WS_CHILD|WS_VISIBLE, m_wndSplitter.IdFromRowCol(0, 1))==NULL)  
 
   return FALSE;  
  m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CCLanCompilerView),CSize(100,450),pContext); //将CView3类连接到第二个分栏对象的0行1列 
 
  m_wndSplitter1.CreateView(1,0,RUNTIME_CLASS(CCLanCompilerView),CSize(100,300),pContext);  
 
	 
       m_pTreeCtrl=&((CLeftView*)m_wndSplitter.GetPane(0,0))->GetTreeCtrl(); 
	   m_pEdit=&((CEditView*)m_wndSplitter1.GetPane(0,0))-> GetEditCtrl();	 
	   m_pEdit1=&((CEditView*)m_wndSplitter1.GetPane(1,0))-> GetEditCtrl(); 
	return TRUE; 
 
} 
 
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 _DEBUG 
void CMainFrame::AssertValid() const 
{ 
	CFrameWnd::AssertValid(); 
} 
 
void CMainFrame::Dump(CDumpContext& dc) const 
{ 
	CFrameWnd::Dump(dc); 
} 
 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame message handlers 
 
 
 
 
void CMainFrame::OnError()  
{ 
 
} 
 
 
 
void CMainFrame::OnSource()  
{  
	OnFileOpen() ; 
    /*	char *szStr; 
	 
	CFile file("Compiler.txt",CFile::modeRead); 
 
    int nLength=file.GetLength(); 
	szStr=new char[nLength+1]; 
	file.Read(szStr,nLength); 
	szStr[nLength]='\0';    
    file.Close (); 
    
      m_pEdit->SetWindowText (szStr); 
	   */ 
	// TODO: Add your command handler code here 
	 
} 
 
void CMainFrame::OnStartCompile()  
{    
	CFile file; 
	num=-1; 
	file.Open ("Compiler.txt",CFile::modeWrite|CFile::modeCreate); 
     
	m_pEdit->GetWindowText(s); 
	int nLength=s.GetLength(); 
	file.Write (s,nLength); 
	file.Close(); 
   
    com.Compile ("Compiler.txt"); 
    com.flagVar=false; 
    com.flagErrSta=false; 
    com.flagErrNum=false; 
	com.flagChar=false; 
   
     
   TREENODE_LPV tnlpvTemp; 
 
 
 
	m_vectorTreeNode_Lpv.clear(); 
 
	HTREEITEM hFindRoot=m_pTreeCtrl->GetRootItem(); 
	if(m_pTreeCtrl->GetItemText(hFindRoot)=="段秀平") 
	m_pTreeCtrl->DeleteItem(hFindRoot); 
 
	HTREEITEM hRoot=m_pTreeCtrl->InsertItem("段秀平",0,0); 
 
    HTREEITEM hKeyWordSubRoot=m_pTreeCtrl->InsertItem("关键字",hRoot,0); 
	HTREEITEM hIdSubRoot=m_pTreeCtrl->InsertItem("变量和变量",hRoot,0); 
 
	HTREEITEM hOprSymSubRoot=m_pTreeCtrl->InsertItem("运算符",hRoot,0); 
	HTREEITEM hBndSymSubRoot=m_pTreeCtrl->InsertItem("界符",hRoot,0); 
	HTREEITEM hIllegalCharSubRoot=m_pTreeCtrl->InsertItem("非法字符",hRoot,0); 
   
 
	bool bKeyWord=0; 
	bool bId=0; 
    
	bool bOprSym=0; 
	bool bBndSym=0; 
	bool bIllegalChar=0; 
 
   
 
   int nLen=com.m_vectorSymbol.size (); 
	for(int i=0;iInsertItem(com.m_vectorSymbol[i].szStr,hKeyWordSubRoot,0); 
			bKeyWord=1; 
			} 
			break; 
 
		case Id: 
		      if(!Ismemberof(com.m_vectorSymbol[i].szStr)) 
			{ 
			  tnlpvTemp.hTreeItem=m_pTreeCtrl->InsertItem(com.m_vectorSymbol[i].szStr,hIdSubRoot,0); 
			bId=1; 
			  } 
			break; 
 
		case OprSym: 
			 if(!Ismemberof(com.m_vectorSymbol[i].szStr)) 
			{ 
			tnlpvTemp.hTreeItem=m_pTreeCtrl->InsertItem(com.m_vectorSymbol[i].szStr,hOprSymSubRoot,0); 
			bOprSym=1; 
			 } 
			break; 
 
		case BndSym: 
			 if(!Ismemberof(com.m_vectorSymbol[i].szStr)) 
			{ 
			tnlpvTemp.hTreeItem=m_pTreeCtrl->InsertItem(com.m_vectorSymbol[i].szStr,hBndSymSubRoot,0); 
			bBndSym=1; 
			 } 
			break; 
		 
		case IllegalChar: 
			 if(!Ismemberof(com.m_vectorSymbol[i].szStr)) 
			{ 
			tnlpvTemp.hTreeItem=m_pTreeCtrl->InsertItem(com.m_vectorSymbol[i].szStr,hIllegalCharSubRoot,0); 
			bIllegalChar=1; 
			 } 
			break; 
		} 
        num++; 
	 
	} 
 
   if(!bKeyWord) 
		m_pTreeCtrl->DeleteItem(hKeyWordSubRoot); 
	if(!bId) 
		m_pTreeCtrl->DeleteItem(hIdSubRoot); 
	if(!bOprSym) 
		m_pTreeCtrl->DeleteItem(hOprSymSubRoot); 
	if(!bBndSym) 
		m_pTreeCtrl->DeleteItem(hBndSymSubRoot); 
	if(!bIllegalChar) 
		m_pTreeCtrl->DeleteItem(hIllegalCharSubRoot); 
    
	m_pTreeCtrl->Expand(hKeyWordSubRoot,TVE_EXPAND); 
	m_pTreeCtrl->EnsureVisible(hKeyWordSubRoot); 
	 
	m_pTreeCtrl->Expand(hIdSubRoot,TVE_EXPAND); 
 
   
     m_pTreeCtrl->Expand(hOprSymSubRoot,TVE_EXPAND); 
 
	 m_pTreeCtrl->Expand(hBndSymSubRoot,TVE_EXPAND); 
 
	m_pTreeCtrl->Expand(hIllegalCharSubRoot,TVE_EXPAND); 
 
   char *szStr; 
	CFile file1("Err.txt",CFile::modeRead); 
     
    nLength=file1.GetLength(); 
	szStr=new char[nLength+1]; 
	file1.Read(szStr,nLength); 
	szStr[nLength]='\0';    
    file1.Close (); 
     m_pEdit1->SetWindowText (szStr); 
 
	// TODO: Add your command handler code here 
	 
} 
bool CMainFrame::Ismemberof(char  sz[]) 
{ 
	 
   for(int i=0;iSetCheck (IsDisplayed); 
    
	// TODO: Add your command update UI handler code here 
	 
} 
 
void CMainFrame::OnStartCompiler()  
{ 
    OnStartCompile(); 
	// TODO: Add your command handler code here 
	 
} 
 
void CMainFrame::OnFileOpen()  
{ 
      CFile f; 
	  char sl[]="*.txt\0\0"; 
       char *szStr; 
       CFileDialog fdlg(TRUE); 
	   fdlg.m_ofn.lpstrFilter=(LPSTR)sl; 
	  
	   if(fdlg.DoModal ()==IDOK) 
	  { 
         CString file=fdlg.GetFileName (); 
         CFile f;     
      	f.Open(file,CFile::modeRead); 
       	  
	    int  nLength=f.GetLength(); 
	    szStr=new char[nLength+1]; 
	    f.Read(szStr,nLength); 
	    szStr[nLength]='\0';    
        f.Close (); 
        m_pEdit->SetWindowText (szStr); 
	   } 
     
	// TODO: Add your command handler code here 
	 
} 
 
void CMainFrame::OnFileSave()  
{ 
 
    /* 
       char s1[]="*.txt\0\0"; 
       CString  str; 
	   CFileDialog fdlg(FALSE); 
 
	   fdlg.m_ofn.lpstrFilter=(LPSTR)s1; 
	  
	   if(fdlg.DoModal ()==IDOK) 
	  { 
            CString file=fdlg.GetFileName (); 
            CFile f;     
      	    f.Open(file,CFile::modeWrite | CFile::modeCreate); 
		 
   	      	m_pEdit->GetWindowText(str); 
	        int nLength=str.GetLength(); 
	        f.Write(str,nLength); 
        	f.Close(); 
	  } 
	  */ 
	 
} 
 
void CMainFrame::OnFileSaveAs()  
{ 
	 
}