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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fcdlg.h

?? 編譯原理的一個課程設計
?? H
字號:
#if !defined(AFX_FCDLG_H__A6FFEF3A_FC86_4C56_83CE_059D27679C10__INCLUDED_)
#define AFX_FCDLG_H__A6FFEF3A_FC86_4C56_83CE_059D27679C10__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define nFUNCTION 32	//函數的最大數目
#define nIDENT 128		//單個函數中含有的標識符最大數目
#define nPARAM 16		//單個函數中含有的參數最大數目
#define IDENTLENGTH 32	//標識符的最大長度
#define nCODE 2048		//中間代碼的總長
#define nMEMORY 2048	//虛內存大小

#include "FCErrorDlg.h"
#include <fstream.h>

class CFCDlg : public CDialog
{
public:// Construction
	CFCDlg(CWnd* pParent = NULL);	// standard constructor
// Dialog Data
	//{{AFX_DATA(CFCDlg)
	enum { IDD = IDD_FC_DIALOG };
	CString	m_strEdit;
	CString	m_strPrecision;
	UINT	m_iPosition;
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CFCDlg)
protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	HICON m_hIcon;

	// Generated message map functions
	//{{AFX_MSG(CFCDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	afx_msg void OnOpen();
	afx_msg void OnSave();
	afx_msg void OnSaveAs();
	afx_msg void OnRun();
	afx_msg void OnClear();
	afx_msg void OnAboutEdit();
	afx_msg void OnAboutGrm();
	afx_msg void OnAppAbout();
	virtual void OnCancel();
	afx_msg void OnChangeEdit();
	afx_msg void OnSetPosition();
	afx_msg void OnKillfocusPosition();
	afx_msg void OnKillfocusPrecision();
	afx_msg void OnTranslate();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
private://界面交互函數定義
	void On_OpenSource();
	void On_OpenCode();
	void On_SaveSource();
	void On_SaveCode();
	void On_SaveAbout();
	void On_SaveAsSource();
	void On_SaveResult();
	void On_Compile();
	void On_Interpret();
	void On_Translate();
	void On_AboutEdit();
	void On_AboutGrm();
	void On_Exit();
	void On_ExitCompile();
	void On_ExitAbout();
	void On_ExitTranslate();
private://編輯界面 成員變量定義
	int m_iStatus;
	BOOL m_bSaved;
	CString m_source;
	CString m_strFile;
private://有關編譯的成員函數及成員變量定義 ---- 必須為 private
	enum ZElement
	{
		E_FILEEND,		//源代碼結束符
		E_NULL,			//空,不認識的符號
		E_IDENT,		//標識符
		E_INUMBER,		//整數
		E_DNUMBER,		//實數
		E_STRING,		//字符串
//////運算符
		E_PLUS,			//加
		E_MINUS,		//減
		E_TIMES,		//乘
		E_SLASH,		//除
		E_MOD,			//余
		E_EQUAL,		//等于
		E_NOTEQUAL,		//不等于
		E_LESS,			//小于
		E_LESSEQUAL,	//小于等于
		E_GREAT,		//大于
		E_GREATEQUAL,	//大于等于
		E_BECOMES,		//賦值號
		E_NOT,			//非
		E_AND,			//與
		E_OR,			//或
//////界符
		E_LPAREN,		//左圓括號
		E_RPAREN,		//右圓括號
		E_LSUB,			//左方括號
		E_RSUB,			//右方括號
		E_BEGIN,		//左花括號
		E_END,			//右花括號
		E_COMMA,		//逗號
		E_COLON,		//冒號
		E_SEMICOLON,	//分號
//////關鍵字
		E_BREAK,		//break
		E_CASE,			//case
		E_CONTINUE,		//continue
		E_DEFAULT,		//default
		E_DO,			//do
		E_DOUBLE,		//double
		E_ELSE,			//else
		E_EXIT,			//exit
		E_IF,			//if
		E_INT,			//int
		E_INPUT,		//input
		E_OUTPUT,		//output
		E_RETURN,		//return
		E_SWITCH,		//switch
		E_VOID,			//void
		E_WHILE,		//while
	};
	enum ZOperator
	{
		OP_AND,			//與
		OP_CALL,		// . a => 調用函數于地址a
		OP_CHANGESIGNALD,//改變符號
		OP_CHANGESIGNALI,//改變符號
		OP_COPYD,		//復制棧頂數值
		OP_COPYI,		//復制棧頂數值
		OP_D2I,			// . a => 實數變整數(地址為棧頂偏移a)
		OP_DELARRAYD,	// . a => 刪除一個實數數組(a為數組頭地址)
		OP_DELARRAYI,	// . a => 刪除一個整數數組(a為數組頭地址)
		OP_DELETE,		//刪除棧頂數(棧頂指針減一)
		OP_EQUALD,		//等于
		OP_EQUALI,		//等于
		OP_EXIT,		//程序結束
		OP_GREATD,		//大于
		OP_GREATEQUALD,	//大于等于
		OP_GREATEQUALI,	//大于等于
		OP_GREATI,		//大于
		OP_I2D,			// . a => 整數變實數(地址為棧頂偏移a)
		OP_INPUTARRAYD,	// . a => 輸入實型數組值(a位數組頭位置,下標在棧頂)
		OP_INPUTARRAYI,	// . a => 輸入整型數組值(a位數組頭位置,下標在棧頂)
		OP_INPUTD,		// . a => 輸入實數后存于地址a
		OP_INPUTI,		// . a => 輸入整數后存于地址a
		OP_JUMP,		// . a => 跳轉于地址a
		OP_JUMPC,		// . a => 條件跳轉于地址a
		OP_LESSD,		//小于
		OP_LESSEQUALD,	//小于等于
		OP_LESSEQUALI,	//小于等于
		OP_LESSI,		//小于
		OP_LOADARRAYD,	// . a => 導入實數數組值(a為數組頭地址,下標在棧頂)
		OP_LOADARRAYI,	// . a => 導入整數數組值(a為數組頭地址,下標在棧頂)
		OP_LOADCONSTD,	// . a => 到入實常數a
		OP_LOADCONSTI,	// . a => 導入整常數a
		OP_LOADVARD,	// . a => 導入實數于地址a
		OP_LOADVARI,	// . a => 導入整數于地址a
		OP_MINUSD,		//減
		OP_MINUSI,		//減
		OP_MOD,			//余
		OP_NEWARRAYD,	// . a => 申請一個實數數組(a為數組頭地址,長度在棧頂)
		OP_NEWARRAYI,	// . a => 申請一個整數數組(a為數組頭地址,長度在棧頂)
		OP_NOT,			//非
		OP_NOTEQUALD,	//不等于
		OP_NOTEQUALI,	//不等于
		OP_NULL,		//空操作,用于標志函數的頭尾
		OP_OR,			//或
		OP_OUTPUTD,		//輸出實數
		OP_OUTPUTI,		//輸出整數
		OP_OUTPUTS,		// . a => 輸出字符串于實地址a
		OP_PARAMTRANSD,	//參數傳遞,(sd為參數數目)
		OP_PARAMTRANSI,	//參數傳遞,(sd為參數數目)
		OP_PLUSD,		//加
		OP_PLUSI,		//加
		OP_RETURN,		// . a => 函數返回(a為當前函數的參數數目)
		OP_RETURND,		// . a => 函數返回(a為當前函數的參數數目)
		OP_RETURNI,		// . a => 函數返回(a為當前函數的參數數目)
		OP_SAVEARRAYD,	// . a => 存儲實數數組值(a為數組頭地址,數值在棧頂,下標在棧次頂)
		OP_SAVEARRAYI,	// . a => 存儲整數數組值(a為數組頭地址,數值在棧頂,下標在棧次頂)
		OP_SAVED,		// . a => 存儲于地址a
		OP_SAVEI,		// . a => 存儲于地址a
		OP_SLASHD,		//除
		OP_SLASHI,		//除
		OP_TIMESD,		//乘
		OP_TIMESI,		//乘
	};
	enum ZIdentType
	{
		IT_NULL,
		IT_VOID,		//void
		IT_INT,			//int
		IT_DOUBLE,		//double
		IT_INTARRAY,	//int[]
		IT_DOUBLEARRAY,	//double[]
		IT_FUNCTION,	//函數
		IT_INTINRANG,	//非當前嵌套層的作用域內的int
		IT_DOUBLEINRANG,//非當前嵌套層的作用域內的double
		IT_IARRAYINRANG,//非當前嵌套層的作用域內的int[]
		IT_DARRAYINRANG,//非當前嵌套層的作用域內的double[]
	};
	struct ZIdent
	{
		char name[IDENTLENGTH];	//標識符名
		int level;				//標識符定義處的嵌套層次,若為-1則已經在作用域外
		ZIdentType type;		//標識符類型
	};
	struct ZFunction
	{
		char name[IDENTLENGTH];	//函數名
		ZIdentType ReturnType;	//返回類型
		ZIdent ident[nIDENT];	//標識符表
		ZIdent param[nPARAM];	//參數表
		int iParam;				//參數計數
		int iIdent;				//當前的標識符計數
		int level;				//當前的嵌套層次
		int iMaxIdent;			//標識符數目的最大值
	};
	union ZSecond
	{
		char *string;
		struct{int iNumber;int nParam;};
		double dNumber;
	};
	struct ZCode
	{
		ZOperator op;
		ZSecond sd;
	};
	union ZMemory
	{
		int iNumber;
		double dNumber;
		struct{union{int *iArray;double *dArray;};int length;};
	};
	char		m_curIdent[IDENTLENGTH];//當前標識符
	int			m_nCurNumber;			//當前整數
	double		m_dCurNumber;			//當前實數
	CString		m_curString;			//當前字符串
	ZElement	m_curElement;			//當前的ZElement
	ZFunction	m_function[nFUNCTION];	//函數表
	ZCode		m_code[nCODE];			//代碼序列
	int m_iFunction;		//函數數目計數
	int m_iCode;			//中間代碼計數
	int m_iCount;			//源代碼字符計數
	int m_iLine;			//源代碼行計數
	int m_iErrorCount;		//所查到的錯誤計數
	int m_SourceLength;		//源代碼總長
	BOOL m_bCompiled;		//為避免重復編譯,當一次編譯成功后設下此標記,即可多次運行

	BOOL m_bDouble;				//全局變量,標記表達式中是否含有浮點數運算
	int m_iContinue,m_iBreak;	//全局變量,標記continue和break的跳轉位置
	int m_iCase;				//全局變量,標記case的跳轉位置

	ZIdentType GetIdentType(char ident[IDENTLENGTH]);
	BOOL ErrorReport(CFCErrorDlg::ZErrorType et);
	BOOL GetElement(void);//返回值為是否成功的取得 ZElement
	BOOL TestCode(void);//檢查代碼是否太多
	BOOL SearchMain(void);				//查找main函數
	int SearchFunction(int n);			//查找第n個函數的地址
	int IdentIndex(char ident[IDENTLENGTH]);
	int FunctionIndex(char ident[IDENTLENGTH]);
	BOOL RecycleMemory(void);//回收內存,回收局部變量和數組所占用的內存

	BOOL Compile(void);			//返回值為是否成功的編譯
	BOOL Interpret(void);		//返回值為是否成功的運行

	BOOL DoFunction(void);		//處理 函數
	BOOL DoStatement(void);		//處理 語句
	BOOL DoOutput(void);		//處理 輸出語句
	BOOL DoExpression(void);	//處理 表達式
	BOOL DoTerm(void);			//處理 項
	BOOL DoFactor(void);		//處理 因子
	BOOL DoCall(void);			//處理 函數調用
	BOOL DoDefine(void);		//處理 變量定義
	BOOL DoBecomes(void);		//處理 賦值語句
	BOOL DoInput(void);			//處理 輸入語句
	BOOL DoSpecial(void);		//處理 特殊語句
	BOOL DoCondition(void);		//處理 條件
	BOOL DoAndCondition(void);	//處理 條件與項
	BOOL DoSubCondition(void);	//處理 條件子項
	BOOL DoIf(void);			//處理 判斷語句
	BOOL DoWhile(void);			//處理 循環語句
	BOOL DoDoWhile(void);		//處理 重復語句
	BOOL DoSwitch(void);		//處理 選擇語句
	BOOL DoCase(void);			//處理 選擇語句的case項
	BOOL DoDefault(void);		//處理 選擇語句的default項
	BOOL DoSubscript(void);		//處理 數組下標

	BOOL TestAddress(int iAddress);		//檢查地址是否溢出
	BOOL ZeroSlashMod(int i);			//除以或余0
	BOOL ZeroSlashMod(double d);		//除以或余0.0
	BOOL ArraySubscript(int index,int length);//檢查數組下標的有效值
	BOOL ValideArray(void *pArray);

	void Output(CString);		//輸出字符串
	void Output(int);			//輸出整數
	void Output(double);		//輸出實數
	int InputInt(void);			//輸入整數
	double InputDouble(void);	//輸入實數
private://有關翻譯的成員函數和成員變量定義
	int m_iLevel;
	BOOL m_bMainFunction;
	ofstream m_fout;

	int m_iBack;
	int m_iBackChoice;
	BOOL m_bBlankLine;
	BOOL m_bExitWait;
	BOOL m_bOpSpace;
	BOOL m_bOutPrecision;
	BOOL m_bOutRuntime;
	CString m_strCppFile;

	void SpaceBack(void);
	void Translate(void);
	void OutOperator(char op[]);

	void TrsAndCondition(void);
	void TrsCondition(void);
	void TrsDefine(void);
	void TrsDoWhile(void);
	void TrsExpression(void);
	void TrsFactor(void);
	void TrsFunction(void);		//翻譯 函數
	void TrsIf(void);
	void TrsInput(void);
	void TrsMultStat(void);
	void TrsOutput(void);
	void TrsParameter(void);
	void TrsSpecial(void);
	void TrsStatement(void);
	void TrsSubCondition(void);
	void TrsSwitch(void);
	void TrsTerm(void);
	void TrsWhile(void);
};

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

#endif // !defined(AFX_FCDLG_H__A6FFEF3A_FC86_4C56_83CE_059D27679C10__INCLUDED_)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚州韩日在线看免费版国语版 | 亚洲一区二区三区小说| 亚洲国产精品成人综合色在线婷婷 | 国产亚洲欧美一级| 精品福利在线导航| 26uuu久久天堂性欧美| 精品99一区二区三区| 久久综合九色综合久久久精品综合| 精品国产制服丝袜高跟| 精品久久五月天| 国产日产欧美一区二区视频| 26uuu亚洲| 最新国产成人在线观看| 亚洲精品日日夜夜| 婷婷成人综合网| 久久99久久久久| 粉嫩高潮美女一区二区三区| 9色porny自拍视频一区二区| 91免费在线播放| 欧美群妇大交群的观看方式| 日韩免费观看2025年上映的电影| 久久精品这里都是精品| 国产精品白丝在线| 午夜影视日本亚洲欧洲精品| 日本伊人午夜精品| 东方aⅴ免费观看久久av| 一本一本大道香蕉久在线精品| 欧美精品一卡二卡| 亚洲国产精品99久久久久久久久| 亚洲欧美韩国综合色| 奇米影视在线99精品| 成人黄色大片在线观看| 欧美日韩五月天| 国产精品天天看| 日韩国产精品久久| 成人免费视频免费观看| 在线播放中文一区| 国产精品久久久久aaaa樱花| 亚洲国产美国国产综合一区二区| 另类小说色综合网站| 在线视频一区二区三区| 国产亚洲综合性久久久影院| 一区二区三区免费网站| 国产麻豆精品theporn| 99久久亚洲一区二区三区青草| 欧美美女一区二区在线观看| 国产精品污www在线观看| 免费成人在线播放| 色婷婷av一区| 国产精品全国免费观看高清| 看电影不卡的网站| 欧美三级在线看| 国产精品国产馆在线真实露脸 | 日韩成人免费在线| 91在线视频在线| 国产视频一区二区三区在线观看| 性做久久久久久免费观看欧美| www.亚洲在线| 国产欧美一区二区精品性色| 日韩国产欧美一区二区三区| 欧美自拍偷拍一区| 亚洲桃色在线一区| 99久久综合色| 欧美国产精品中文字幕| 狠狠网亚洲精品| 欧美一二三四在线| 人人超碰91尤物精品国产| 91久久精品一区二区三区| 亚洲欧美在线aaa| 97久久精品人人爽人人爽蜜臀| 精品欧美久久久| 精油按摩中文字幕久久| 精品少妇一区二区三区| 蜜臀va亚洲va欧美va天堂| 91精品国产高清一区二区三区蜜臀| 中文字幕亚洲在| 91老司机福利 在线| 国产欧美日本一区视频| 国产精品99久久久久久似苏梦涵 | 婷婷成人综合网| 在线综合+亚洲+欧美中文字幕| 亚洲综合成人在线| 色悠久久久久综合欧美99| 亚洲综合一二区| 制服.丝袜.亚洲.另类.中文| 久久国产麻豆精品| 久久久亚洲精品石原莉奈| 成人国产一区二区三区精品| 国产精品天干天干在观线| 国内偷窥港台综合视频在线播放| 欧美视频一区二区三区在线观看| 久久先锋资源网| 激情综合五月天| 99久久99久久久精品齐齐| 日韩一级高清毛片| 亚洲一区二区在线免费观看视频 | 日韩一级成人av| 亚洲欧美怡红院| 国产传媒日韩欧美成人| 久久综合久久鬼色中文字| 免费观看日韩电影| 91超碰这里只有精品国产| 99国产精品99久久久久久| 91麻豆精品在线观看| 91精品国产色综合久久不卡蜜臀| 亚洲大片免费看| 欧美一级高清片| 亚洲6080在线| 欧美欧美欧美欧美| 日韩欧美一级片| av中文一区二区三区| 日本一区二区久久| 99re热视频这里只精品| 亚洲色图视频网| 色综合久久久久综合99| 中文字幕一区二区三区蜜月 | 日韩一区二区在线看片| 视频一区二区三区中文字幕| 日本福利一区二区| 亚洲人成伊人成综合网小说| 五月婷婷激情综合网| 精品蜜桃在线看| 国产一区二区三区最好精华液| 久久久精品免费网站| av不卡免费电影| 亚洲视频 欧洲视频| 欧美三级视频在线| 欧美一区二区精品在线| 麻豆91精品91久久久的内涵| 久久久国产综合精品女国产盗摄| 麻豆精品一区二区三区| 久久久久久久久久看片| 蜜芽一区二区三区| 久久久国产精品午夜一区ai换脸| 首页国产丝袜综合| 国产精品乱码一区二区三区软件 | 欧美视频一二三区| 亚洲一区二区四区蜜桃| 欧美一级黄色录像| 色悠久久久久综合欧美99| 日韩福利电影在线观看| 亚洲国产成人午夜在线一区| 亚洲国产精品传媒在线观看| 在线播放/欧美激情| 国产99久久久精品| 午夜欧美一区二区三区在线播放| 精品裸体舞一区二区三区| 亚洲一区二区成人在线观看| 91在线丨porny丨国产| 麻豆精品一二三| 欧美国产日韩a欧美在线观看| 99精品国产热久久91蜜凸| 中文字幕在线不卡一区二区三区| 91精品国产综合久久福利| 国产麻豆欧美日韩一区| 制服.丝袜.亚洲.另类.中文 | aaa亚洲精品| 专区另类欧美日韩| 久久国产成人午夜av影院| 69堂国产成人免费视频| 成人免费小视频| 欧美日韩免费观看一区二区三区| 欧美成人伊人久久综合网| 欧美激情在线看| 欧美猛男男办公室激情| 成人毛片视频在线观看| 精品一区二区三区欧美| 成人av网站在线观看| 亚洲一区影音先锋| 玉足女爽爽91| 亚洲激情五月婷婷| 亚洲男人电影天堂| 亚洲女人的天堂| 久久久精品天堂| 日韩一区二区三区在线观看| 99国产精品一区| 91丨porny丨首页| 五月激情综合婷婷| 色综合视频在线观看| 日韩高清一区二区| 三级欧美在线一区| 日本三级韩国三级欧美三级| 亚洲精品伦理在线| 久久精品亚洲乱码伦伦中文| 在线播放一区二区三区| 欧美色中文字幕| 欧美区一区二区三区| 国产乱人伦精品一区二区在线观看 | 亚洲欧美日韩久久| 亚洲私人黄色宅男| 69p69国产精品| 日本在线不卡视频一二三区| 午夜影院久久久| 日本不卡1234视频| 麻豆成人久久精品二区三区红| 91日韩在线专区| 亚洲综合视频在线| 日本伊人精品一区二区三区观看方式| 亚洲成av人片在线| 蜜臀国产一区二区三区在线播放|