2020-10-22 18:56:58 +03:30
|
|
|
/**
|
2021-06-10 17:33:05 +04:30
|
|
|
* @file script-engine.h
|
2022-01-18 22:38:56 +03:30
|
|
|
* @author M.H. Gholamrezaei (mh@hyperdbg.org)
|
2020-10-24 12:19:10 +03:30
|
|
|
* @brief Script engine parser and codegen
|
2020-10-22 18:56:58 +03:30
|
|
|
* @details
|
|
|
|
|
* @version 0.1
|
|
|
|
|
* @date 2020-10-22
|
|
|
|
|
*
|
|
|
|
|
* @copyright This project is released under the GNU Public License v3.
|
|
|
|
|
*
|
|
|
|
|
*/
|
2024-03-02 01:59:33 +08:00
|
|
|
|
2020-11-04 15:50:14 +03:30
|
|
|
#pragma once
|
2024-03-02 01:59:33 +08:00
|
|
|
#include "type.h"
|
2021-06-10 15:25:18 +04:30
|
|
|
|
2020-12-03 18:02:49 +03:30
|
|
|
#ifndef SCRIPT_ENGINE_H
|
2021-03-22 18:19:39 +04:30
|
|
|
# define SCRIPT_ENGINE_H
|
2020-12-01 22:26:46 +03:30
|
|
|
|
2020-10-20 19:35:15 +03:30
|
|
|
|
2024-09-26 12:53:52 +02:00
|
|
|
VOID
|
|
|
|
|
ShowMessages(const char * Fmt, ...);
|
|
|
|
|
|
2021-03-22 18:19:39 +04:30
|
|
|
PSYMBOL
|
|
|
|
|
NewSymbol(void);
|
2020-12-01 22:26:46 +03:30
|
|
|
|
2021-03-22 18:19:39 +04:30
|
|
|
PSYMBOL
|
2025-07-07 11:46:10 -07:00
|
|
|
NewStringSymbol(PSCRIPT_ENGINE_TOKEN Token);
|
2020-12-03 18:02:49 +03:30
|
|
|
|
2023-11-08 23:48:59 +08:00
|
|
|
PSYMBOL
|
2025-07-07 11:46:10 -07:00
|
|
|
NewWstringSymbol(PSCRIPT_ENGINE_TOKEN Token);
|
2023-11-08 23:48:59 +08:00
|
|
|
|
2021-03-22 18:19:39 +04:30
|
|
|
unsigned int
|
2023-11-24 04:51:56 +08:00
|
|
|
GetSymbolHeapSize(PSYMBOL Symbol);
|
2023-11-08 23:48:59 +08:00
|
|
|
|
2021-03-22 18:19:39 +04:30
|
|
|
void
|
2022-05-19 20:16:57 +09:00
|
|
|
RemoveSymbol(PSYMBOL * Symbol);
|
2020-12-02 02:32:49 +03:30
|
|
|
|
2021-03-22 18:19:39 +04:30
|
|
|
PSYMBOL_BUFFER
|
|
|
|
|
NewSymbolBuffer(void);
|
2020-12-02 02:32:49 +03:30
|
|
|
|
2021-03-22 18:19:39 +04:30
|
|
|
PSYMBOL_BUFFER
|
|
|
|
|
PushSymbol(PSYMBOL_BUFFER SymbolBuffer, const PSYMBOL Symbol);
|
2020-12-02 02:32:49 +03:30
|
|
|
|
2021-03-22 18:19:39 +04:30
|
|
|
PSYMBOL
|
2025-07-07 11:46:10 -07:00
|
|
|
ToSymbol(PSCRIPT_ENGINE_TOKEN PTOKEN, PSCRIPT_ENGINE_ERROR_TYPE Error);
|
2020-10-20 19:35:15 +03:30
|
|
|
|
2022-01-30 01:02:29 +09:00
|
|
|
void
|
2021-04-11 18:27:23 +04:30
|
|
|
ScriptEngineBooleanExpresssionParse(
|
2024-08-21 03:42:03 +08:00
|
|
|
UINT64 BooleanExpressionSize,
|
2025-07-07 11:46:10 -07:00
|
|
|
PSCRIPT_ENGINE_TOKEN FirstToken,
|
|
|
|
|
PSCRIPT_ENGINE_TOKEN_LIST MatchedStack,
|
2024-08-21 03:42:03 +08:00
|
|
|
PSYMBOL_BUFFER CodeBuffer,
|
|
|
|
|
char * str,
|
|
|
|
|
char * c,
|
|
|
|
|
PSCRIPT_ENGINE_ERROR_TYPE Error);
|
2021-04-14 03:16:31 +04:30
|
|
|
|
|
|
|
|
UINT64
|
2025-07-07 11:46:10 -07:00
|
|
|
BooleanExpressionExtractEnd(char * str, BOOL * WaitForWaitStatementBooleanExpression, PSCRIPT_ENGINE_TOKEN CurrentIn);
|
2021-04-10 19:02:23 +04:30
|
|
|
|
2021-04-11 18:27:23 +04:30
|
|
|
void
|
2024-07-20 11:58:17 +08:00
|
|
|
CodeGen(
|
2025-07-07 11:46:10 -07:00
|
|
|
PSCRIPT_ENGINE_TOKEN_LIST MatchedStack,
|
2024-08-21 03:42:03 +08:00
|
|
|
PSYMBOL_BUFFER CodeBuffer,
|
2025-07-07 11:46:10 -07:00
|
|
|
PSCRIPT_ENGINE_TOKEN Operator,
|
2026-01-06 16:38:22 +08:00
|
|
|
PSCRIPT_ENGINE_ERROR_TYPE Error,
|
|
|
|
|
char** ScriptSource
|
|
|
|
|
);
|
2020-10-20 19:35:15 +03:30
|
|
|
|
2021-03-22 18:19:39 +04:30
|
|
|
unsigned long long int
|
|
|
|
|
RegisterToInt(char * str);
|
2020-10-20 19:35:15 +03:30
|
|
|
|
2021-03-22 18:19:39 +04:30
|
|
|
unsigned long long int
|
|
|
|
|
PseudoRegToInt(char * str);
|
2020-10-20 19:35:15 +03:30
|
|
|
|
2021-03-22 18:19:39 +04:30
|
|
|
unsigned long long int
|
|
|
|
|
SemanticRuleToInt(char * str);
|
2020-10-20 19:35:15 +03:30
|
|
|
|
2021-03-22 18:19:39 +04:30
|
|
|
char *
|
2021-06-27 19:48:25 +04:30
|
|
|
HandleError(PSCRIPT_ENGINE_ERROR_TYPE Error, char * str);
|
|
|
|
|
|
|
|
|
|
int
|
2025-10-15 08:01:17 +08:00
|
|
|
NewGlobalIdentifier(PSCRIPT_ENGINE_TOKEN PTOKEN);
|
2021-03-03 16:53:19 +03:30
|
|
|
|
2021-03-22 18:19:39 +04:30
|
|
|
int
|
2025-10-15 08:01:17 +08:00
|
|
|
GetGlobalIdentifierVal(PSCRIPT_ENGINE_TOKEN PTOKEN);
|
2021-09-26 21:42:36 +09:00
|
|
|
|
2025-10-15 08:01:17 +08:00
|
|
|
VOID
|
2025-10-21 12:56:21 +02:00
|
|
|
SetGlobalIdentifierVariableType(PSCRIPT_ENGINE_TOKEN Token, VARIABLE_TYPE * VariableType);
|
2025-10-15 08:01:17 +08:00
|
|
|
|
2025-10-21 12:56:21 +02:00
|
|
|
VARIABLE_TYPE *
|
2025-10-15 08:01:17 +08:00
|
|
|
GetGlobalIdentifierVariableType(PSCRIPT_ENGINE_TOKEN Token);
|
2021-09-26 21:42:36 +09:00
|
|
|
|
2026-07-20 23:21:34 +08:00
|
|
|
BOOLEAN
|
|
|
|
|
GetGlobalIdentifierIsImplicitType(PSCRIPT_ENGINE_TOKEN Token);
|
|
|
|
|
|
2025-10-21 16:46:49 +08:00
|
|
|
unsigned long long
|
|
|
|
|
NewLocalIdentifier(PSCRIPT_ENGINE_TOKEN PTOKEN, unsigned int VariableSize);
|
2021-03-03 16:53:19 +03:30
|
|
|
|
2021-04-11 18:27:23 +04:30
|
|
|
int
|
2025-10-15 08:01:17 +08:00
|
|
|
GetLocalIdentifierVal(PSCRIPT_ENGINE_TOKEN PTOKEN);
|
2021-04-11 18:27:23 +04:30
|
|
|
|
2025-10-15 08:01:17 +08:00
|
|
|
VOID
|
2025-10-21 12:56:21 +02:00
|
|
|
SetLocalIdentifierVariableType(PSCRIPT_ENGINE_TOKEN Token, VARIABLE_TYPE * VariableType);
|
2025-10-15 08:01:17 +08:00
|
|
|
|
2025-10-21 12:56:21 +02:00
|
|
|
VARIABLE_TYPE *
|
2025-10-15 08:01:17 +08:00
|
|
|
GetLocalIdentifierVariableType(PSCRIPT_ENGINE_TOKEN Token);
|
2021-04-11 18:27:23 +04:30
|
|
|
|
2026-07-20 23:21:34 +08:00
|
|
|
BOOLEAN
|
|
|
|
|
GetLocalIdentifierIsImplicitType(PSCRIPT_ENGINE_TOKEN Token);
|
|
|
|
|
|
2024-03-02 01:59:33 +08:00
|
|
|
int
|
2025-07-07 11:46:10 -07:00
|
|
|
NewFunctionParameterIdentifier(PSCRIPT_ENGINE_TOKEN Token);
|
2024-03-02 01:59:33 +08:00
|
|
|
|
|
|
|
|
int
|
2025-07-07 11:46:10 -07:00
|
|
|
GetFunctionParameterIdentifier(PSCRIPT_ENGINE_TOKEN Token);
|
2024-06-17 17:35:23 +09:00
|
|
|
|
2025-10-15 08:01:17 +08:00
|
|
|
int
|
|
|
|
|
LalrGetRhsSize(int RuleId);
|
|
|
|
|
|
|
|
|
|
BOOL
|
|
|
|
|
LalrIsOperandType(PSCRIPT_ENGINE_TOKEN PTOKEN);
|
|
|
|
|
|
2024-08-21 03:42:03 +08:00
|
|
|
PUSER_DEFINED_FUNCTION_NODE
|
2025-07-07 11:46:10 -07:00
|
|
|
GetUserDefinedFunctionNode(PSCRIPT_ENGINE_TOKEN Token);
|
2024-08-21 03:42:03 +08:00
|
|
|
|
2024-09-25 16:27:42 +02:00
|
|
|
BOOLEAN
|
|
|
|
|
FuncGetNumberOfOperands(UINT64 FuncType, UINT32 * NumberOfGetOperands, UINT32 * NumberOfSetOperands);
|
|
|
|
|
|
2020-12-03 18:02:49 +03:30
|
|
|
#endif
|