📄 pascalsintanalyzer.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 + -