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

📄 impubasicview.h

📁 编译原理课程设计是用Microsoft Visual C++ 6.0编写。实现了语法词法及代码优化
💻 H
字号:
// IMPUBasicView.h : interface of the CIMPUBasicView class
//
/////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_IMPUBASICVIEW_H__691156A8_D764_4F60_8C56_B0DA70D8ED2D__INCLUDED_)
#define AFX_IMPUBASICVIEW_H__691156A8_D764_4F60_8C56_B0DA70D8ED2D__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "RunDlg.h"
#include "RunResultDlg.h"
#include "HelpDlg.h"
#include "MainFrm.h"
/////////////////////////////////////////////////
#include "stdio.h"
#include "setjmp.h"
#include "math.h"
#include "ctype.h"
#include "stdlib.h"
#include "InputDlg.h"
#include "StopDlg.h"
#define NUM_LAB      1000
#define LAB_LEN      10
#define PROG_SIZE    10000

#define DELIMITER    1
#define VARIABLE     2
#define NUMBER       3
#define COMMAND      4
#define STRING       5
#define QUOTE        6


#define PRINT        1
#define INPUT        2
#define IF           3
#define THEN         4
#define FOR          5
#define NEXT         6
#define TO           7
#define GOTO         8
#define EOL          9
#define FINISHED     10
#define GOSUB        11
#define RETURN       12
#define END          13
#define WHILE        14
#define WEND         15
#define ENDIF        16
#define ELSE         17
#define REM          18
#define DO           19
#define LOOP         20
#define EXITDO       21
#define UNTIL        22
#define SELECT       23
#define CASE         24
#define ENDSELECT    25
#define STEP         26
#define IS           27
#define STOP         28
#define ON           29
#define AND          30
#define OR           31
#define NOT          32

/////////////////////////////////////////////////////////////////////////////
// CRunDlg dialog
#include "RunDlg.h"
int variables[26]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
struct  CCommands{
	CString command;
	int tok;
};
struct for_stack{
	int var;
	int step;
	int target;
	char *loc;
};
struct label{
	char name[LAB_LEN];
	char *p;
}label_table[NUM_LAB];
struct casenode{
	int n;
};
    char * prog;
    char token[80];
    CPtrList wstack1;//whileջ
    CPtrList gstack1;//gosubջ
    CPtrList fstack1;//forջ
    CStringList ifstack1;//ifջ
    CPtrList dstack1;//do-loopջ
    CPtrList slestack1;//selectջ
    CStringList casestack1;//caseջ
/////////////////////////////////////////////////////
class CIMPUBasicView : public CEditView
{
protected: // create from serialization only
	CIMPUBasicView();
	DECLARE_DYNCREATE(CIMPUBasicView)

// Attributes
public:
	int tok,token_type;
	CString val_Edit1,val_Edit2;
public:
	void exec_on();
	void exec_stop();
	int isdelim3(CString c);
	int get_rel(int x,CString op,int y);
	void findeolelse();
	CString getctop();
	void cpop();
	void cpush(CString s);
	int  getstop();
	void spop();
	void spush(casenode *s);
	void endselect();
	void gonextcase();
	void exec_case();
	void exec_select();
	void findloop();
	char * dpop();
	void dpush(char *s);
	void exitdo();
	void exec_loop();
	void exec_do();
	void rem();
	CString ifgettop();
	void ifpop();
	void ifpush(CString s);
	void findendifelse();
	void exec_endif();
	void exec_else();
	char * wpop();
	void wpush(char *s);
	void find_wend();
	void wend();
	void exec_while();
	void input();
	char * gpop();
	void gpush(char *s);
	void greturn();
	void gosub();
	void scan_labels();
	int get_next_label(char *s);
	int find_label(CString s);
	void label_init();
	void exec_goto();
	struct for_stack * fpop();
	void fpush(struct for_stack *i);
	void next();
	void exec_for();
	void find_eol();
	void exec_if();
	
	void print();
	int assignment();
	void putback();
	int find_var(char *s);
	void unary(char o,int *r);
	void arith(char o,int *r,int *h);
	void primitive(int *result);
	void level6(int *result);
	void level5(int *result);
	void level4(int *result);
	void level3(int *result);
	void level2(int *result);
	void get_exp(int *result);
	int isdelim2(CString c);
	int get_token();
	int look_up(CString str);
	int iswhite(CString c);
	int isdelim1(CString c);
	int isdelim(CString c);
	void Error(int error);

public:
	CIMPUBasicDoc* GetDocument();

// Operations
public:

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CIMPUBasicView)
	public:
	virtual void OnDraw(CDC* pDC);  // overridden to draw this view
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
	protected:
	virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
	virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
	virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
	//}}AFX_VIRTUAL

// Implementation
public:
	int get_logic1(CString op, int y);
	int get_logic(int x,CString op,int y);
	virtual ~CIMPUBasicView();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// Generated message map functions
protected:
	//{{AFX_MSG(CIMPUBasicView)
	afx_msg void OnProgramRun();
	afx_msg void OnResultView();
	afx_msg void OnHelpView();
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
	afx_msg void OnSetFocus(CWnd* pOldWnd);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

#ifndef _DEBUG  // debug version in IMPUBasicView.cpp
inline CIMPUBasicDoc* CIMPUBasicView::GetDocument()
   { return (CIMPUBasicDoc*)m_pDocument; }
#endif

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_IMPUBASICVIEW_H__691156A8_D764_4F60_8C56_B0DA70D8ED2D__INCLUDED_)

⌨️ 快捷键说明

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