⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cifaview.cpp

📁 词法分析
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// CIFAView.cpp : implementation of the CCIFAView class
//

#include "stdafx.h"
#include "CIFA.h"

#include "CIFADoc.h"
#include "CIFAView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CCIFAView

IMPLEMENT_DYNCREATE(CCIFAView, CFormView)

BEGIN_MESSAGE_MAP(CCIFAView, CFormView)
	//{{AFX_MSG_MAP(CCIFAView)
	ON_BN_CLICKED(IDC_BUTTON1, OnInput)
	ON_BN_CLICKED(IDC_BUTTON2, Onoutput)
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
	ON_BN_CLICKED(IDC_RADIO6, OnRadio6)
	ON_BN_CLICKED(IDC_RADIO7, OnRadio7)
	ON_BN_CLICKED(IDC_RADIO8, OnRadio8)
	ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCIFAView construction/destruction

CCIFAView::CCIFAView()
	: CFormView(CCIFAView::IDD)
{
	//{{AFX_DATA_INIT(CCIFAView)
	m_edit = _T("");
	str="";
	select=0;
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CCIFAView::~CCIFAView()
{
}

void CCIFAView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCIFAView)
	DDX_Control(pDX, IDC_LIST1, m_list);
	DDX_Text(pDX, IDC_EDIT1, m_edit);
	//}}AFX_DATA_MAP
}

BOOL CCIFAView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}

void CCIFAView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

    //SetWindowText("词法分析");
	str.Format("%s","/*输入或载入文件*/");
    this->SetDlgItemText(IDC_EDIT1,str);
    m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	m_list.InsertColumn(0,"一",LVCFMT_CENTER,45);
	m_list.InsertColumn(1,"二",LVCFMT_CENTER,45);
	m_list.InsertColumn(2,"三",LVCFMT_CENTER,45);
	m_list.InsertColumn(3,"四",LVCFMT_CENTER,45);
	m_list.InsertColumn(4,"五",LVCFMT_CENTER,45);
	m_list.InsertColumn(5,"符号",LVCFMT_CENTER,100);
}

/////////////////////////////////////////////////////////////////////////////
// CCIFAView printing

BOOL CCIFAView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CCIFAView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CCIFAView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

void CCIFAView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
	// TODO: add customized printing code here
}

/////////////////////////////////////////////////////////////////////////////
// CCIFAView diagnostics

#ifdef _DEBUG
void CCIFAView::AssertValid() const
{
	CFormView::AssertValid();
}

void CCIFAView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CCIFADoc* CCIFAView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCIFADoc)));
	return (CCIFADoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CCIFAView message handlers

void CCIFAView::OnInput() 
{
     CFile  l_file;
     char *buffer=NULL; 
	 CString strfile;
	 switch(select)
	 {case 0:
	   strfile="cifa.txt";break;
	 case 1:
       strfile="cifa1.txt";break;
	 case 2:
       strfile="cifa2.txt";break;
	 default:
		 break;
	 }
	
	 if(l_file.Open((LPCTSTR)strfile,CFile::modeReadWrite))    	 
	 {int length=l_file.GetLength();   
   buffer=new char[length+1];   
   l_file.SeekToBegin();
   l_file.Read(buffer,length);
   buffer[length]='\0';
   this->SetDlgItemText(IDC_EDIT1,buffer);
   //str.Format("%d",length);
   //m_list.InsertItem(0,str);
   l_file.Close();   
   str=buffer;
	 }
	 else
	 {	str.Format("%s","没有文件!");
    this->SetDlgItemText(IDC_EDIT1,str);
	 }
}

typedef struct NUM{    
	int A;       
	int B; 
	int C;
	int D;
	int E;
}NUM,*Npoint;  

  typedef struct ArrNOde
  {
	  CString fuhao;
      NUM N;
    
  }ArrNOde;

void CCIFAView::Onoutput() 
{m_list.DeleteAllItems();
    CEdit *PEdit1=(CEdit*)GetDlgItem(IDC_EDIT1);
    PEdit1->GetWindowText(str);
	int length=str.GetLength();
    //CString g=str.GetAt(length);
	if(str=="")
	{   
	str.Format("%s","没有文件!");
    this->SetDlgItemText(IDC_EDIT1,str);
		
	}

    ArrNOde Arr[100];
    Arr[0].fuhao="void";Arr[0].N.A=1; Arr[0].N.B=0;Arr[0].N.C=0;Arr[0].N.D=0;Arr[0].N.E=22;
    Arr[1].fuhao="int";Arr[1].N.A=1; Arr[1].N.B=1;Arr[1].N.C=0;Arr[1].N.D=0;Arr[1].N.E=23;
	Arr[2].fuhao="float";Arr[2].N.A=1; Arr[2].N.B=1;Arr[2].N.C=0;Arr[2].N.D=0;Arr[2].N.E=24;
	Arr[3].fuhao="if";Arr[3].N.A=1; Arr[3].N.B=0;Arr[3].N.C=0;Arr[3].N.D=0;Arr[3].N.E=25;
	Arr[4].fuhao="else";Arr[4].N.A=1; Arr[4].N.B=0;Arr[4].N.C=0;Arr[4].N.D=0;Arr[4].N.E=26;
	Arr[5].fuhao="while";Arr[5].N.A=1; Arr[5].N.B=0;Arr[5].N.C=0;Arr[5].N.D=0;Arr[5].N.E=27;
	Arr[6].fuhao="do";Arr[6].N.A=1; Arr[6].N.B=0;Arr[6].N.C=0;Arr[6].N.D=0;Arr[6].N.E=28;
	Arr[7].fuhao="return";Arr[7].N.A=1; Arr[7].N.B=0;Arr[7].N.C=0;Arr[7].N.D=0;Arr[7].N.E=29;
	Arr[8].fuhao="+";Arr[8].N.A=1; Arr[8].N.B=0;Arr[8].N.C=1;Arr[8].N.D=4;Arr[8].N.E=3;
	Arr[9].fuhao="-";Arr[9].N.A=1; Arr[9].N.B=0;Arr[9].N.C=1;Arr[9].N.D=5;Arr[9].N.E=5;
	Arr[10].fuhao="*";Arr[10].N.A=1;  Arr[10].N.B=0;Arr[10].N.C=0;Arr[10].N.D=0;Arr[10].N.E=22;
	Arr[11].fuhao="/";Arr[11].N.A=1;Arr[11].N.B=0;Arr[11].N.C=1;Arr[11].N.D=5;Arr[11].N.E=6;
	Arr[12].fuhao="<";Arr[12].N.A=1; Arr[12].N.B=0;Arr[12].N.C=1;Arr[12].N.D=3;Arr[12].N.E=7;
	Arr[13].fuhao="<=";Arr[13].N.A=1; Arr[13].N.B=0;Arr[13].N.C=1;Arr[13].N.D=3;Arr[13].N.E=8;
	Arr[14].fuhao=">";Arr[14].N.A=1; Arr[14].N.B=0;Arr[14].N.C=1;Arr[14].N.D=3;Arr[14].N.E=9;
	Arr[15].fuhao=">=";Arr[15].N.A=1; Arr[15].N.B=0;Arr[15].N.C=1;Arr[15].N.D=3;Arr[15].N.E=10;
	Arr[16].fuhao="!=";Arr[16].N.A=1; Arr[16].N.B=0;Arr[16].N.C=1;Arr[16].N.D=2;Arr[16].N.E=12;
    Arr[17].fuhao="=";Arr[17].N.A=1; Arr[17].N.B=0;Arr[17].N.C=1;Arr[17].N.D=1;Arr[17].N.E=13;
	Arr[18].fuhao="==";Arr[18].N.A=1; Arr[18].N.B=0;Arr[18].N.C=1;Arr[18].N.D=2;Arr[18].N.E=11;
	Arr[19].fuhao=";";Arr[19].N.A=1; Arr[19].N.B=0;Arr[19].N.C=0;Arr[19].N.D=0;Arr[19].N.E=14;
	Arr[20].fuhao=",";Arr[20].N.A=1; Arr[20].N.B=0;Arr[20].N.C=0;Arr[20].N.D=0;Arr[20].N.E=15;
	Arr[21].fuhao="(";Arr[21].N.A=1; Arr[21].N.B=0;Arr[21].N.C=0;Arr[21].N.D=0;Arr[21].N.E=16;
	Arr[22].fuhao=")";Arr[22].N.A=1; Arr[22].N.B=0;Arr[22].N.C=0;Arr[22].N.D=0;Arr[22].N.E=17;
	Arr[23].fuhao="[";Arr[23].N.A=1; Arr[23].N.B=0;Arr[23].N.C=0;Arr[23].N.D=0;Arr[23].N.E=18;
	Arr[24].fuhao="]";Arr[24].N.A=1; Arr[24].N.B=0;Arr[24].N.C=0;Arr[24].N.D=0;Arr[24].N.E=19;
	Arr[25].fuhao="{";Arr[25].N.A=1; Arr[25].N.B=0;Arr[25].N.C=0;Arr[25].N.D=0;Arr[25].N.E=20;
	Arr[26].fuhao="}";Arr[26].N.A=1; Arr[26].N.B=0;Arr[26].N.C=0;Arr[26].N.D=0;Arr[26].N.E=21;
	
	CString ch="";
	CString sym="";   
	int pos=0;
	int flag=-1;
	int h=-1;
	int c=-1;
	//int length=str.GetLength();
	CString temp="";
	ch=str.GetAt(pos);
	while( pos<length)
	{  
	   ch=str.GetAt(pos);
       flag=-1;
	   h=-1;
	        if(ch>='a'&&ch<='z')
			{ 
				while (ch!=" "&&pos<length)
				{   ch=str.GetAt(pos);
				    if(ch>='a'&&ch<='z'||ch>='0'&&ch<='9')
					{sym=sym+ch;
					 pos++;
                     }
					else
						break;
				}
			          for(int i=0;i<=26;i++)
						{ 
				           if(sym==Arr[i].fuhao)
						   {flag=1;
						   c++;
			                  temp.Format("%d",Arr[i].N.A);
		                      m_list.InsertItem(c,temp);
                              temp.Format("%d",Arr[i].N.B);
		                      m_list.SetItemText(c,1,temp);
		                      temp.Format("%d",Arr[i].N.C);
		                      m_list.SetItemText(c,2,temp);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -