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

📄 defines.h

📁 袖珍型的pascal编译器
💻 H
字号:


#ifndef __ZSC_DEFINES_H
#define __ZSC_DEFINES_H

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


// defining the DWORD type if not defined
#ifndef DWORD
#define DWORD unsigned __int32
#endif

#ifndef BYTE
#define BYTE unsigned __int8
#endif

#ifndef QWORD
#define QWORD unsigned __int64
#endif


// definirea modului de reprezentare a tipurilor in memorie
// se poate alege MOD1 sau MOD2
#define MOD2


#ifdef MOD1	// define MOD1
// Constante cu pentru rezolvarea corecpondentei tipurilor Pascal -> C
#define REAL double
#define INTEGER int
#define CHAR TCHAR
#define BOOLEAN BOOL // you can't declare variables of this type in this version of pascal

// informatia de dimensiune maxima
#define INFOTYPE QWORD

// Constante cu dimensiunea diverselor tipuri elementare
#define SC_REAL	1
#define SC_INT	1
#define SC_CHAR 1
#endif


#ifdef MOD2	// define MOD2
// Constante cu pentru rezolvarea corecpondentei tipurilor Pascal -> C
#define REAL float
#define INTEGER int
#define CHAR TCHAR 

// informatia de dimensiune maxima
#define INFOTYPE DWORD

// Constante cu dimensiunea diverselor tipuri elementare
#define SC_REAL	1
#define SC_INT	1
#define SC_CHAR 1
#endif



// Constante de eroare

#define SET_GENERAL		-1
#define SET_EXPECTED	-10
#define	SET_INVALID_OP_TYPES	-11
#define SET_INVALID_OP	-12
  
// Constante de clasa symbol

#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

// Constante tip simplu


// EXPRESION TYPE CONSTANTS 

#define ET_INTEGER	2
#define ET_REAL		3
#define ET_CHAR		1


// LValue types

#define LV_ADDRESS	1
#define LV_VALUE	2

// Compiler settings

#define CODE_BLOCKSIZE	16000





// defining some VM characteristics

#define MACH32

// define 32 bit machine characteristics

#ifdef MACH32
#define VM_BYTES	4	// Processor bytes
#define VM_ICSIZE	1	// Instruction code size
#define AD(ADDR) (*((DWORD*) (m_pbMem + ADDR)))
#define REGISTER DWORD
#define OFFSET	int
#endif

#ifdef MACH16
#define VM_BYTES	2	// Processor bytes
#define VM_ICSIZE	1	// Instruction code size
#define AD(ADDR) (*((__int16*) (m_pbMem + ADDR)))
#define REGISTER __int16
#define OFFSET	__int16
#endif

// Memory addressing macros, addressing a stack entry from the memory
#define SE(ADDR) (*((StackEntry*) (m_pbMem + ADDR)))
#define OFFS(ADDR) (*((OFFSET*) (m_pbMem + ADDR)))


// Now defining the stack entry Types

#define SE_ADDRESS	10
#define SE_OFFSET	11
#define SE_BOOLEAN	12
#define SE_CHAR		ET_CHAR
#define SE_INTEGER	ET_INTEGER
#define SE_REAL		ET_REAL
#define SE_UNDEFINED 0


#define SE_SIZE sizeof(StackEntry)	// Stack Entry Size


// Now some macros for converting the info type
// Theese conversions make a bit conversion, not a value conversion


#define CV_REAL(something) (*((REAL *) &something))
#define CV_CHAR(something) (*((CHAR *) &something))
#define CV_INTEGER(something) (*((INTEGER *) &something))
#define CV_ADDRESS(something) (*((REGISTER *) &something))
#define CV_OFFSET(something) (*((OFFSET *) &something))
#define CV_BOOLEAN(something) (*((BOOL *) &something))


// now define some useful conversion macros

// the machine states

#define MS_ACTIVE	1
#define MS_STOP		2
#define MS_ERROR	4

// the machine instructions
#define INSTR_NUMBER 40

#define INSTR_NOP		0
#define INSTR_OR		1
#define INSTR_OUTP		2
#define INSTR_INP		3
#define INSTR_ERR		4
#define INSTR_STOP		5
#define INSTR_RET		6
#define INSTR_CALL		7
#define INSTR_MOD		8
#define INSTR_DIV		9
#define INSTR_MUL		10
#define INSTR_SUB		11
#define INSTR_ADD		12
#define INSTR_NEQ		13
#define INSTR_EQU		14
#define INSTR_GEQ		15
#define INSTR_GRT		16
#define INSTR_LEQ		17
#define INSTR_LES		18
#define INSTR_FJP		19
#define INSTR_UJP		20
#define INSTR_RED		21
#define INSTR_MVRX		22
#define INSTR_STO		23
#define INSTR_COPY		24
#define INSTR_LODIX		25
#define INSTR_LODI		26
#define INSTR_LOD		27
#define INSTR_AND		28
#define INSTR_ENTER		29
#define INSTR_LEAVE		30
#define INSTR_CHGSFP	31
#define INSTR_RSTSFP	32
#define INSTR_LODA		33
#define INSTR_LODAX		34
#define INSTR_LODEA		35
#define INSTR_USTO		36
#define INSTR_PUSH		37		// Unused
#define INSTR_POP		38		// Unused
#define INSTR_NFJP		39


////////////////////////////////////////////////
// Defining the Bynary file header struct

struct BinHeader
{
	char signature[3];
	DWORD version;
	DWORD headerSize;
	DWORD entryPoint;
	DWORD codeSize;
};





/////////////////////////////////////////////////////////////
// end of the defines stuff
#endif

⌨️ 快捷键说明

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