Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
136 lines
2.9 KiB
C++
136 lines
2.9 KiB
C++
|
||
#ifndef _SyntaxTree_H_
|
||
#define _SyntaxTree_H_
|
||
|
||
#include "BaseDef.h"
|
||
#include "Message.h"
|
||
#include "STL.h"
|
||
|
||
|
||
#define MAXCHILD 3
|
||
|
||
|
||
class CSymbol;
|
||
class CSyntaxTree;
|
||
class CSymbolTable;
|
||
|
||
struct _iobuf;
|
||
typedef struct _iobuf FILE;
|
||
|
||
|
||
enum eSyntaxType
|
||
{
|
||
TYPE_STATEMENT_LIST = 0,
|
||
TYPE_EMPTY_STATEMENT,
|
||
TYPE_ERROR_STATEMENT,
|
||
TYPE_EXPRESSION,
|
||
TYPE_IF_STATEMENT,
|
||
TYPE_IF_ELSE_STATEMENT,
|
||
TYPE_SWITCH_STATEMENT,
|
||
TYPE_SWITCH_CASES,
|
||
TYPE_CASE_ONE,
|
||
TYPE_DEFAULT,
|
||
TYPE_FOR_STATEMENT,
|
||
TYPE_WHILE_STATEMENT,
|
||
TYPE_FOR_EXPRESSION,
|
||
TYPE_BREAK_STATEMENT,
|
||
TYPE_CONTINUE_STATEMENT,
|
||
TYPE_RETURN_STATEMENT,
|
||
TYPE_DECLARATION,
|
||
TYPE_SPECIFIER_VOID,
|
||
TYPE_SPECIFIER_INT,
|
||
TYPE_SPECIFIER_FLOAT,
|
||
TYPE_SPECIFIER_BOOL,
|
||
TYPE_SPECIFIER_STRING,
|
||
TYPE_VARIABLE,
|
||
TYPE_DECLARATOR_LIST,
|
||
TYPE_INIT_DECLARATION,
|
||
TYPE_NORMAL_DECLARATION,
|
||
TYPE_ARRAY_INITIALIZE,
|
||
TYPE_ARRAY_INITIALIZE2,
|
||
TYPE_ARRAY_DECLARATION,
|
||
TYPE_FUNCTION_DECLARATION,
|
||
TYPE_INITIALIZER_LIST,
|
||
TYPE_ARGUMENT_DECLARATION_LIST,
|
||
TYPE_ARGUMENT_DECLARATION,
|
||
TYPE_FUNCTION_DEFINITION,
|
||
TYPE_CONSTANT_EXPRESSION,
|
||
TYPE_EXPRESSION_LIST,
|
||
TYPE_ASSIGNMENT_EXPRESSION,
|
||
TYPE_OR_EXPRESSION,
|
||
TYPE_AND_EXPRESSION,
|
||
TYPE_NOT_EXPRESSION,
|
||
TYPE_EQUALITY_EXPRESSION,
|
||
TYPE_NOTEQAUL_EXPRESSION,
|
||
TYPE_LESSTHAN_EXPRESSION,
|
||
TYPE_MORETHAN_EXPRESSION,
|
||
TYPE_LESSTHANOREQUAL_EXPRESSION,
|
||
TYPE_MORETHANOREQUAL_EXPRESSION,
|
||
TYPE_ADDITION_EXPRESSION,
|
||
TYPE_SUBTRACTION_EXPRESSION,
|
||
TYPE_MULTIPLICATION_EXPRESSION,
|
||
TYPE_DIVISION_EXPRESSION,
|
||
TYPE_REMINDER_EXPRESSION,
|
||
TYPE_COMPOUND_ADDITION,
|
||
TYPE_COMPOUND_SUBTRACTION,
|
||
TYPE_COMPOUND_MULTIPLICATION,
|
||
TYPE_COMPOUND_DIVISION,
|
||
TYPE_COMPOUND_REMINDER,
|
||
TYPE_PREFIXINCREMENT,
|
||
TYPE_PREFIXDECREMENT,
|
||
TYPE_ARRAY_INDEXING,
|
||
TYPE_FUNCTION_CALL,
|
||
TYPE_POSTFIXINCREMENT,
|
||
TYPE_POSTFIXDECREMENT = 61,
|
||
};
|
||
|
||
///////////////////////////////////////////////////////////////////////////////////
|
||
//
|
||
|
||
struct SNode
|
||
{
|
||
int m_iLine;
|
||
eSyntaxType m_eType;
|
||
SNode * m_ArrPtrChilds[MAXCHILD];
|
||
int m_SymbolID;
|
||
eDataType m_eReturnType;
|
||
|
||
public:
|
||
SNode( int, eSyntaxType, SNode *, SNode *, SNode * );
|
||
void Show( int, MESSAGE_FUNCTION2, CSymbolTable * );
|
||
bool SemanticCheck( CSymbolTable * );
|
||
};
|
||
|
||
class CSyntaxTree
|
||
{
|
||
protected:
|
||
SNode * m_pRoot;
|
||
CSymbolTable * m_pSymbolTable;
|
||
|
||
typedef set<void *> PTRSTORAGE;
|
||
|
||
PTRSTORAGE * m_pPtrStorage;
|
||
|
||
|
||
public:
|
||
CSyntaxTree();
|
||
~CSyntaxTree();
|
||
|
||
void Create( const char * ); //Ư<><C6AF> <20><>ũ<EFBFBD><C5A9>Ʈ ȭ<><C8AD><EFBFBD><EFBFBD> <20>о SyntaxƮ<78><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||
void Create( FILE * );
|
||
void Destroy();
|
||
|
||
int Insert( int line, eSyntaxType, int childID1 = 0, int childID2 = 0, int childID3 = 0 );
|
||
int Insert( int line, int symbolID, eSyntaxType, int childID1 = 0, int childID2 = 0, int childID3 = 0 );
|
||
void SetRoot( int nodeID );
|
||
void Show( MESSAGE_FUNCTION2 );
|
||
|
||
CSymbolTable * GetSymbolTable() { return m_pSymbolTable; }
|
||
|
||
SNode * GetRoot() { return m_pRoot; }
|
||
};
|
||
|
||
///////////////////////////////////////////////////////////////////////////////////
|
||
|
||
#endif
|