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

📄 pascalsintanalyzer.h

📁 C++ mfc 源代码
💻 H
字号:
// PascalSintAnalyzer.h: interface for the CPascalCompiler class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PASCALSINTANALYZER_H__5D1CA609_A57E_11D2_8AB9_00002145DF63__INCLUDED_)
#define AFX_PASCALSINTANALYZER_H__5D1CA609_A57E_11D2_8AB9_00002145DF63__INCLUDED_

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

#include "PascalAnalyzer.h"


#define NERROR	throw CPascalCompiler::error(-1,CString(""))
#define MAX_SYMB 1000

#define SET_GENERAL		-1
#define SET_EXPECTED	-10


#define CT_PROCEDURE	1
#define CT_FUNCTION		2
#define CT_VAR_SIMP		3
#define CT_VAR_RECORD	4
#define CT_VAR_RECORD_FIELD	5
#define CT_VAR_ARRAY	6
#define CT_PARAM_VAL	7
#define CT_PARAM_ADR	8
#define CT_CONST		9
#define CT_PROGNAME		10

#define ST_INTEGER	1
#define ST_CHAR		2
#define ST_REAL		3


// si acum sa ne declaram tabela de simboluri

struct Param
{
	int m_nType;
	int m_nTransmisie;
};

typedef CList<Param,Param&> ParamList;


struct Symbol
{
	CString m_sName;	// symbol name
	int m_nClass;		// CT constants
	CString m_nType;	// ST constants
	CString m_sVal;		// string value
	double m_dVal;		// double value
	int m_nAdrel;		// rel addr
	int m_nDeplRec;		// deplasamentul in record
	int m_nNivel;		// nivelul de imbricare
	int m_nNrPar;		// numarul de parametrii
	int m_nDimVar;		// nnumarul de locatii necesar memorarii variabilelor
	int m_nAdrStart;	// adresa de start
	ParamList m_ListaPar;	// lista de parametrii
	int m_nIndMin;		// indice inferior la tablouri
	int m_nIndMax;		// indice superior la tablouri
	// LISTA_REC
	int m_nIncDom;		// valoarea curenta a indicelui din tabela de cod
	
};


typedef CList<Symbol, Symbol&> SymbolList;

typedef CMap<CString,LPCSTR,SymbolList*,SymbolList*> SymbolTable;

// Tipuri de simboluri






class CPascalCompiler : public CPascalLexAnalyzer  
{
public:
	struct error
	{
		int m_nType;
		CString m_sData;
		error(int type, CString& str)
		{ m_nType = type; m_sData = str; }
	};
	CString GetErrStr(CPascalCompiler::error& e);
	void InstrRead();
	void InstrPrint();
	void ApelProcedura();
	void ListaAltern();
	void InstrCase();
	void InstrFor();
	void InstrIf();
	void InstrRepeat();
	void ExprLogica();
	void Conditie();
	void InstrWhile();
	void ApelFunc();
	void Factor();
	void Termen();
	void Expr();
	void Variabila();
	void Atribuire(void);
	void Instr();
	void FactorStatic();
	void TermenStatic();
	void DeclCamp();
	void TipRecord();
	void TipTablou();
	void DeclVar();
	void ExprStatica();
	void InstrCompusa();
	void DeclParam();
	void Parametri();
	void TipSimplu();
	void Tip();
	void AntetFunc();
	void AntetProc();
	void ListaDeclVar();
	void DeclConst();
	void ListaDeclConst();
	void Bloc(void);
	void ProgramSursa(void);		// throws exception
	CPascalCompiler(CString str);
	virtual ~CPascalCompiler();
private:
	BOOL IsFunc(CString &str);
	BOOL IsProc(CString& str);
	void InsertSymbol(Symbol &symb);
	SymbolTable m_SymbTable;
};

#endif // !defined(AFX_PASCALSINTANALYZER_H__5D1CA609_A57E_11D2_8AB9_00002145DF63__INCLUDED_)

⌨️ 快捷键说明

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