#pragma once struct r_KeywordType { enum Enumeration { Identifier, Type, Symbol, Number, FunctionDeclaration, ArgumentDeclaration, VariableDeclaration, Variable, ReservedVariable, Scope, // Reserved for the semantic analyzer FunctionCall, // Reserved for the semantic analyzer Unknown }; }; struct r_Keyword { r_Keyword(r_KeywordType::Enumeration ae_Type, const CString& as_Name, int ai_LineNumber) : me_Type(ae_Type) , ms_Name(as_Name) , mi_LineNumber(ai_LineNumber) , mr_SymbolTableEntry_(NULL) , mb_CanBeRenamed(true) { } r_KeywordType::Enumeration me_Type; CString ms_Name; int mi_LineNumber; bool mb_CanBeRenamed; r_Keyword* mr_SymbolTableEntry_; }; class k_LanguageSpecifier { std::vector mk_Identifiers; std::vector mk_Symbols; std::vector mk_Functions; std::vector mk_Types; std::vector mk_ReservedVariables; int mi_LineNumber; public: k_LanguageSpecifier(); virtual ~k_LanguageSpecifier() {} r_Keyword Classify(const CString& as_Keyword, char* ac_Char_); r_Keyword get_NextKeyword(char** ac_Chars__); };