/** * @file script-engine.h * @author M.H. Gholamrezaei (mh@hyperdbg.org) * @brief Script engine parser and codegen * @details * @version 0.1 * @date 2020-10-22 * * @copyright This project is released under the GNU Public License v3. * */ #pragma once #include "type.h" #ifndef SCRIPT_ENGINE_H # define SCRIPT_ENGINE_H VOID ShowMessages(const char * Fmt, ...); PSYMBOL NewSymbol(void); PSYMBOL NewStringSymbol(PSCRIPT_ENGINE_TOKEN Token); PSYMBOL NewWstringSymbol(PSCRIPT_ENGINE_TOKEN Token); unsigned int GetSymbolHeapSize(PSYMBOL Symbol); void RemoveSymbol(PSYMBOL * Symbol); PSYMBOL_BUFFER NewSymbolBuffer(void); PSYMBOL_BUFFER PushSymbol(PSYMBOL_BUFFER SymbolBuffer, const PSYMBOL Symbol); PSYMBOL ToSymbol(PSCRIPT_ENGINE_TOKEN PTOKEN, PSCRIPT_ENGINE_ERROR_TYPE Error); void ScriptEngineBooleanExpresssionParse( UINT64 BooleanExpressionSize, PSCRIPT_ENGINE_TOKEN FirstToken, PSCRIPT_ENGINE_TOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, char * str, char * c, PSCRIPT_ENGINE_ERROR_TYPE Error); UINT64 BooleanExpressionExtractEnd(char * str, BOOL * WaitForWaitStatementBooleanExpression, PSCRIPT_ENGINE_TOKEN CurrentIn); void CodeGen( PSCRIPT_ENGINE_TOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, PSCRIPT_ENGINE_TOKEN Operator, PSCRIPT_ENGINE_ERROR_TYPE Error, char** ScriptSource ); unsigned long long int RegisterToInt(char * str); unsigned long long int PseudoRegToInt(char * str); unsigned long long int SemanticRuleToInt(char * str); char * HandleError(PSCRIPT_ENGINE_ERROR_TYPE Error, char * str); int NewGlobalIdentifier(PSCRIPT_ENGINE_TOKEN PTOKEN); int GetGlobalIdentifierVal(PSCRIPT_ENGINE_TOKEN PTOKEN); VOID SetGlobalIdentifierVariableType(PSCRIPT_ENGINE_TOKEN Token, VARIABLE_TYPE * VariableType); VARIABLE_TYPE * GetGlobalIdentifierVariableType(PSCRIPT_ENGINE_TOKEN Token); unsigned long long NewLocalIdentifier(PSCRIPT_ENGINE_TOKEN PTOKEN, unsigned int VariableSize); int GetLocalIdentifierVal(PSCRIPT_ENGINE_TOKEN PTOKEN); VOID SetLocalIdentifierVariableType(PSCRIPT_ENGINE_TOKEN Token, VARIABLE_TYPE * VariableType); VARIABLE_TYPE * GetLocalIdentifierVariableType(PSCRIPT_ENGINE_TOKEN Token); int NewFunctionParameterIdentifier(PSCRIPT_ENGINE_TOKEN Token); int GetFunctionParameterIdentifier(PSCRIPT_ENGINE_TOKEN Token); int LalrGetRhsSize(int RuleId); BOOL LalrIsOperandType(PSCRIPT_ENGINE_TOKEN PTOKEN); PUSER_DEFINED_FUNCTION_NODE GetUserDefinedFunctionNode(PSCRIPT_ENGINE_TOKEN Token); BOOLEAN FuncGetNumberOfOperands(UINT64 FuncType, UINT32 * NumberOfGetOperands, UINT32 * NumberOfSetOperands); #endif