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

📄 pl0doc.h

📁 编译原理实践教程PL0语言编译程序源代码。参考书:清华大学出版社的《编译原理》作者吕映芝、张素琴等。 实现主要功能有:对使用PL0语言编写的程序进行词法分析
💻 H
字号:
// PL0Doc.h : interface of the CPL0Doc class
//
/////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_PL0DOC_H__493B6EEC_89CC_4D52_9232_FA9737C51D22__INCLUDED_)
#define AFX_PL0DOC_H__493B6EEC_89CC_4D52_9232_FA9737C51D22__INCLUDED_

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

#include "Tables.h"

#include "Show.h"
#define StackSize   2000
class CPL0Doc : public CDocument
{
protected: // create from serialization only
	CPL0Doc();
	DECLARE_DYNCREATE(CPL0Doc)

// Attributes
public:
     MyPoint    InPoint;
// Operations
public:

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CPL0Doc)
	public:
	virtual BOOL OnNewDocument();//生成新的窗口
	virtual void Serialize(CArchive& ar);//数据的串行化
	virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);//打开文件
	virtual BOOL CanCloseFrame(CFrameWnd* pFrame);//允许关闭窗口
	virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);//保存文件
	virtual void DeleteContents();
	//}}AFX_VIRTUAL

// Implementation
public:
	//词法分析用函数
	char GetChar(int n=1);
	CString OutputKeyWord();//输出关键词
	int SearchKeyWord(CString str);//寻找关键词
	//语法分析用函数
	void Advance(int i=1);
	bool test(CString n, int lev,int tx);//检查语法错误
	bool test(CString n,int lev,int tx,KIND k);
	bool enter(CString n,KIND k,int lev,int val,int r,int c);
    void error(int a);

	void factor(int lev, int tx);	
	void expression(int lev, int tx);
	void term(int lev, int tx);
	void condition(int lev,int tx);
	void statement(int lev,int tx);
	void block(int lev,int tx);
	void program();

	void Constdeclaration(int & dep);
	void Vardeclaration(int & dep);
	void Advanced(int i=1);
	int Position(CString idname);
	void Factor(int lev,int tx);
	void Term(int lev,int tx,int i=1);
	void Expression(int lev,int tx);
	void Condition(int lev,int tx);
	void Statement(int lev,int tx);
	void Block(int lev,int tx);	
    bool Generate(Functions func,int lev,int amount);

	int Base(int lev);
	void Interpret(bool & interrupt,int count);


	virtual ~CPL0Doc();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// Generated message map functions
protected:
	//{{AFX_MSG(CPL0Doc)
	afx_msg void OnFileSaveAs();
	afx_msg bool OnSyntaxAnalyze();
	afx_msg void OnWordAnalyze();
	afx_msg void OnWordAnalyzeFile();
	afx_msg void OnWordAnalyzeSee();
	afx_msg bool OnCodesAnalyze();
	afx_msg void OnExecute();
	afx_msg void OnCodesview();
	afx_msg void OnInstru();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
private:
	CString source;         //源程序

	CString keyword[KeywordTotal+1];

	int nPreChar;
	int nPreLine;
	int nPreColumn;
	TwoElement twoelement;  //二元组
	DefConstant defconstant;//常量表
	DefSymbol defsymbol;    //变量表
	TEI PreTEI;             //二元组项
	TEI MyPointer;
	TEI MyAssitPointer;

	int Sym;
	CString temp;
	int num;


	int TX;

	TABLE table[500];       //语法分析符号表
	int sym;                //Advance()读到的种类
	CString sym_name;       //Advance()读到的标识符
	int sym_val;            //Advance()读到的标识符值
	int sym_line;           //Advance()读到的标识符所在行
	int sym_column;         //Advance()读到的标识符所在列
   /////////////////////////////////////////////////
	int sym_word;
//	Point CurPoint;
	Instruction   Codes[MaxCodeLine];
	int CIndex;
	//int CIndex0;
	int CIndexCode;
    /////////////
	//int DX;

	//int TX0;
    int TXCode ;
	int total_err;          //当前程序分析出的语法错误总数
	CString all_err[500];   //当前程序分析出的语法错误
	CString err[34];        //语法错误种类
    //////////////
	//int RelDepth;
    int Stack[StackSize];
    int CurBase;
	int Top;
    int Ip;
	Instruction Instructor;


	//Show Input;


};

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

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

#endif // !defined(AFX_PL0DOC_H__493B6EEC_89CC_4D52_9232_FA9737C51D22__INCLUDED_)

⌨️ 快捷键说明

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