s4g  0.9.2
высокоуровневый, императивный, процедурный, встраиваемый, скриптовый язык программирования общего назначения, написанный на C++.
s4g_main.h
См. документацию.
1 
2 /*
3 Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
4 license MIT see in LICENSE or
5 https://s4g.su/
6 */
7 
17 #ifndef __S4G_MAIN_H
18 #define __S4G_MAIN_H
19 
20 #include "s4g_types.h"
21 #include "s4g_parse.h"
22 
23 
24 class s4g_Lexer;
25 class s4g_Parser;
26 class s4g_Compiler;
27 class s4g_VM;
28 class s4g_GC;
29 
30 
31 extern s4g_report_func g_fnReport;
32 
34 const char* s4g_GetStrType(S4G_TYPE type, char *szStrType);
35 
37 void s4g_GenMsg(s4g_Main *s4gm, int iLevel, const char *szFormat, ...);
38 
39 #define S4G_COND_TYPE1(s4gm, val,retval) if (!val){s4g_GenMsg(s4gm, S4G_ERROR, "value is not init, api function [%s]",__FUNCTION__); return retval;}
40 #define S4G_COND_TYPE2(s4gm, val,retval) if (!val->pdata){s4g_GenMsg(s4gm, S4G_ERROR, "value is has not data, api function [%s]",__FUNCTION__); return retval;}
41 #define S4G_COND_TYPE_12(s4gm, val,retval) S4G_COND_TYPE1(s4gm, val,retval) S4G_COND_TYPE2(s4gm, val,retval)
42 
45 struct s4g_Main
46 {
47  s4g_Main(const char *szName);
48  ~s4g_Main();
49  void clear();
52  s4g_Parser *m_pBst;
57  int m_iError;
58  char m_szError[1024];
60  Array<String> m_aFiles;
61  UINT m_tTimeStart;
62 
63 };
64 
65 //##########################################################################
66 
70 s4g_Lexeme* LEXgetLexeme(s4g_Main *s4gm, ID id);
72 
75 
78 
81 
83 ID LEXgetCountFile(s4g_Main *s4gm);
84 
86 const char* LEXgetFile(s4g_Main *s4gm, ID id);
87 
89 ID LEXgetCurrPos(s4g_Main *s4gm);
90 
92 
93 //##########################################################################
94 
100 
103 
105 void GCactivatePrev(s4g_Main *s4gm, ID idLastContext);
106 
108 void GCremoveTableInContext(s4g_Main *s4gm, ID id);
109 
111 ID GCdeactivatePrev(s4g_Main *s4gm);
112 
115 
118 
120 void GCdeleteTopContext(s4g_Main *s4gm, bool canClear);
121 
123 void GCclearTopContext(s4g_Main *s4gm);
124 
128 ID GCexistsInAccessibleContexts(s4g_Main *s4gm, const char *szName, s4g_Variable **ppVar);
129 
132 s4g_Variable* GCgetVarFromContextByNum(s4g_Main *s4gm, ID idRelativeTopContext, ID idVar);
133 
135 
138 
141 
144 
147 
150 
153 
156 
159 
161 s4g_Variable* GCcreateVarInt(s4g_Main *s4gm, s4g_int num, int typeVar = S4G_GC_TYPE_VAR_FREE, int typeData = S4G_GC_TYPE_DATA_FREE);
162 
164 s4g_Variable* GCcreateVarUint(s4g_Main *s4gm, s4g_uint num, int typeVar = S4G_GC_TYPE_VAR_FREE, int typeData = S4G_GC_TYPE_DATA_FREE);
165 
168 
170 s4g_Variable* GCcreateVarString(s4g_Main *s4gm, const char *szString, int typeVar = S4G_GC_TYPE_VAR_FREE, int typeData = S4G_GC_TYPE_DATA_FREE);
171 
173 s4g_Variable* GCcreateVarClassEmpty(s4g_Main *s4gm, const char *szName);
174 
177 
178 
180 s4g_Data* GCcreateDataInt(s4g_Main *s4gm, s4g_int num, int typeData = S4G_GC_TYPE_DATA_FREE);
181 
184 
187 
189 
192 
194 s4g_Variable* GCgetVarBool(s4g_Main *s4gm, bool bf);
195 
198 
202 s4g_int GCgetInt(s4g_Main *s4gm, s4g_Variable *pVar);
204 
207 
210 
212 const char* GCgetStr(s4g_Main *s4gm, s4g_Variable *pVar);
213 
215 String* GCgetStr2(s4g_Main *s4gm, s4g_Variable *pVar);
216 
219 
222 
225 
228 
231 
234 
237 
240 
242 
244 
246 s4g_OwnerVar* GCgetContextOwner(s4g_Main *s4gm, ID id);
247 
249 s4g_OwnerVar* GCgetDataOwner(s4g_Main *s4gm, ID id);
250 
252 void GCassign(s4g_Main *s4gm, s4g_Variable *pVarDest, s4g_Variable *pVarSrc);
253 
255 s4g_Variable* GCcreateVarDataCopy(s4g_Main *s4gm, s4g_Variable *pVarSrc, int typeVar = S4G_GC_TYPE_VAR_FREE, int typeData = S4G_GC_TYPE_DATA_FREE, bool canCopyData = false);
256 
258 const char* GCgetVarName(s4g_Main *s4gm, s4g_Variable *pVar, char* szName=0);
259 
261 
262 #endif
263 
264 //!@} main
базовый класс нода АСТ
Definition: s4g_parse.h:568
s4g_bool GCgetBool(s4g_Main *s4gm, s4g_Variable *pVar)
bool
Definition: s4g_main.cpp:334
Заголовочный файл с основными типами и данными для парсинга кода
s4g_Data * GCcreateDataInt(s4g_Main *s4gm, s4g_int num, int typeData=S4G_GC_TYPE_DATA_FREE)
создать int со значением num.
Definition: s4g_main.cpp:267
S4G_TYPE
все типы данных которые могут быть использованы в скриптах
Definition: s4g.h:160
s4g_OwnerVar * GCgetContextOwner(s4g_Main *s4gm, ID id)
возвращает указатель на s4g_OwnerVar контекста по id.
Definition: s4g_main.cpp:367
const char * GCgetVarName(s4g_Main *s4gm, s4g_Variable *pVar, char *szName=0)
в szName запишет имя переменной по ее указателю (поиск перебором), в ppOwner запишет владельца ...
Definition: s4g_main.cpp:387
void GCassign(s4g_Main *s4gm, s4g_Variable *pVarDest, s4g_Variable *pVarSrc)
присвоить в pVarDest данные из pVarSrc.
Definition: s4g_main.cpp:377
const char * GCgetStr(s4g_Main *s4gm, s4g_Variable *pVar)
const char*
Definition: s4g_main.cpp:304
ID LEXgetCountFile(s4g_Main *s4gm)
возвращает количество загруженных файлов
Definition: s4g_main.cpp:120
s4g_Compiler * m_pCompiler
компилятор
Definition: s4g_main.h:54
void GCactivatePrev(s4g_Main *s4gm, ID idLastContext)
активирует предыдущие контексты до idLastContext (это значение было получено при вызове deactivatePre...
Definition: s4g_main.cpp:148
s4g_BaseNode * m_pNode
построенное аст
Definition: s4g_main.h:51
s4g_c_function GCgetCfunc(s4g_Main *s4gm, s4g_Variable *pVar)
Си++ функция
Definition: s4g_main.cpp:329
s4g_Data * GCcreateDataFloat(s4g_Main *s4gm, s4g_float num, int typeData=S4G_GC_TYPE_DATA_FREE)
создать float со значением num.
Definition: s4g_main.cpp:277
Array< String > m_aFiles
массив с путями загруженных файлов
Definition: s4g_main.h:60
s4g_Variable * GCcreateVarFloat(s4g_Main *s4gm, s4g_float num, int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE)
создать переменную со значением num.
Definition: s4g_main.cpp:245
тип скриптовая функция
Definition: s4g_types.h:362
char m_szName[S4G_MAX_LEN_VAR_NAME]
имя
Definition: s4g_main.h:59
s4g_ClassObject * GCgetClassObject(s4g_Main *s4gm, s4g_Variable *pVar)
объект класса
Definition: s4g_main.cpp:349
const char * LEXgetFile(s4g_Main *s4gm, ID id)
возвращает имя файла (путь) по его идентификатору
Definition: s4g_main.cpp:125
long s4g_int
int
Definition: s4g.h:270
s4g_Variable * GCcreateVarClassObjectEmpty(s4g_Main *s4gm, s4g_Variable *pVarClass, int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE)
создать переменную со значением объект класса
Definition: s4g_main.cpp:260
#define S4G_GC_TYPE_DATA_FREE
простое публичное значение, когда счетчик ссылок обнулится можно удалять
Definition: s4g_types.h:34
s4g_Variable * GCcreateVarUint(s4g_Main *s4gm, s4g_uint num, int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE)
создать переменную со значением num.
Definition: s4g_main.cpp:240
s4g_Variable * GCcreateVarInt(s4g_Main *s4gm, s4g_int num, int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE)
создать переменную со значением num.
Definition: s4g_main.cpp:235
char m_szError[1024]
сообщение об ошибке
Definition: s4g_main.h:58
const char * s4g_GetStrType(S4G_TYPE type, char *szStrType)
возвращает строкое представление типа, и записывает в szStrType.
Definition: s4g_main.cpp:69
s4g_Lexeme * LEXgetLexemeNext(s4g_Main *s4gm)
возвращает следующую лексему и делает ее идентификатор текущим
Definition: s4g_main.cpp:115
void * s4g_pdata
указатель
Definition: s4g.h:282
s4g_Variable * GCcreateVarClassEmpty(s4g_Main *s4gm, const char *szName)
создать переменную со значением класса
Definition: s4g_main.cpp:255
s4g_Parser * m_pBst
строитель аст
Definition: s4g_main.h:52
s4g_Variable * GCcreateVarCfunc(s4g_Main *s4gm, s4g_c_function func, int typeVar=S4G_GC_TYPE_VAR_FREE)
создать переменную со значением С++ функция
Definition: s4g_main.cpp:215
таблица, наиболее распространенный тип в скриптах
Definition: s4g_types.h:123
s4g_Class * GCgetClass(s4g_Main *s4gm, s4g_Variable *pVar)
класс
Definition: s4g_main.cpp:344
s4g_Data * GCcreateDataUint(s4g_Main *s4gm, s4g_uint num, int typeData=S4G_GC_TYPE_DATA_FREE)
создать uint со значением num.
Definition: s4g_main.cpp:272
ID LEXgetCurrPos(s4g_Main *s4gm)
возвращает текущий идентфиикатор лексемы (позиция в массиве лексем)
Definition: s4g_main.cpp:130
#define S4G_GC_TYPE_VAR_FREE
переменная подлежит удалению
Definition: s4g_types.h:52
s4g_Lexeme * LEXgetLexemePrev(s4g_Main *s4gm)
возвращает предыдущую лексему и делает ее идентификатор текущим
Definition: s4g_main.cpp:105
лексема
Definition: s4g_parse.h:342
s4g_Variable * GCcreateVarArrayEmpty(s4g_Main *s4gm, int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE)
создать переменную со значением "пустой массив".
Definition: s4g_main.cpp:225
void GCclearTopContext(s4g_Main *s4gm)
очистить верхний контекст
Definition: s4g_main.cpp:178
s4g_Variable * GCcreateVarTable(s4g_Main *s4gm, s4g_Table *pTable, int typeVar=S4G_GC_TYPE_VAR_FREE)
создать переменную со значением уже существующей таблицы
Definition: s4g_main.cpp:230
s4g_int GCgetInt(s4g_Main *s4gm, s4g_Variable *pVar)
int
Definition: s4g_main.cpp:289
s4g_Array * GCgetArray(s4g_Main *s4gm, s4g_Variable *pVar)
массив
Definition: s4g_main.cpp:319
ID GCcreateContext(s4g_Main *s4gm, s4g_Table **ppTable, S4G_CONTEXT_TYPE_WORK typeWork=S4G_CONTEXT_TYPE_WORK_ONLINE)
добавить контекст основанный на таблице, возвращает id добавленного контекста, используется для замык...
Definition: s4g_main.cpp:168
s4g_Variable * GCgetVarNull(s4g_Main *s4gm)
возвращает уже созданную переменную с null значением
Definition: s4g_main.cpp:355
String * GCgetStr2(s4g_Main *s4gm, s4g_Variable *pVar)
String*.
Definition: s4g_main.cpp:309
s4g_Variable * GCcreateVarDataCopy(s4g_Main *s4gm, s4g_Variable *pVarSrc, int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE, bool canCopyData=false)
создание копии переменной со значение, canCopyData - копировать ли данные, или просто присвоить (без ...
Definition: s4g_main.cpp:382
s4g_Lexeme * LEXgetLexeme(s4g_Main *s4gm, ID id)
возвращает лексему по ее идентификатору
Definition: s4g_main.cpp:100
S4G_CONTEXT_TYPE_WORK
типы контекстов
Definition: s4g_types.h:378
компилятор
Definition: s4g_compiler.h:24
s4g_Table * GCgetGtable(s4g_Main *s4gm)
возвращает таблицу глобального пространства имен
Definition: s4g_main.cpp:137
s4g_GC * m_pGC
сборщик мусора
Definition: s4g_main.h:56
s4g_OwnerVar * GCgetDataOwner(s4g_Main *s4gm, ID id)
возвращает указатель на s4g_OwnerVar значения по id.
Definition: s4g_main.cpp:372
s4g_Variable * GCcreateVarSfuncEmpty(s4g_Main *s4gm, int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE)
создать переменную со значением скриптовой функции (пустой)
Definition: s4g_main.cpp:205
s4g_float GCgetFloat(s4g_Main *s4gm, s4g_Variable *pVar)
float
Definition: s4g_main.cpp:299
ID GCdeactivatePrev(s4g_Main *s4gm)
деактивировать все предыдущие контексты, возвращает номер контекста который деактивирован последним ...
Definition: s4g_main.cpp:158
void s4g_GenMsg(s4g_Main *s4gm, int iLevel, const char *szFormat,...)
генерирует сообщение, если уровень (iLevel из S4G_MSG_LEVEL_) == S4G_MSG_LEVEL_ERROR то это остановит...
Definition: s4g_main.cpp:82
int(* s4g_c_function)(s4g_Main *s4gm)
тип си(++) функции
Definition: s4g.h:289
Сборщик мусора
Definition: s4g_gc.h:32
S4G_TYPE GCgetType(s4g_Main *s4gm, s4g_Variable *pVar)
получить тип переменной
Definition: s4g_main.cpp:284
лексический анализатор
Definition: s4g_lexer.h:99
рабочий
Definition: s4g_types.h:381
s4g_Variable * GCcreateVarTableEmpty(s4g_Main *s4gm, int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE)
создать пустую переменную со значением "пустая таблица".
Definition: s4g_main.cpp:220
s4g_Sfunction * GCgetSfunc(s4g_Main *s4gm, s4g_Variable *pVar)
скриптовая функция
Definition: s4g_main.cpp:324
short int s4g_bool
bool
Definition: s4g.h:279
s4g_Table * GCgetTable(s4g_Main *s4gm, s4g_Variable *pVar)
таблица
Definition: s4g_main.cpp:314
s4g_Variable * GCcreateVarString(s4g_Main *s4gm, const char *szString, int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE)
создать переменную со значением szString.
Definition: s4g_main.cpp:250
s4g_VM * m_pVM
виртуальная машина
Definition: s4g_main.h:55
s4g_Variable * GCcreateVarBool(s4g_Main *s4gm, s4g_bool bf, int typeVar=S4G_GC_TYPE_VAR_FREE)
создать переменную со значением bf.
Definition: s4g_main.cpp:200
s4g_Stack< s4g_Command > * m_pCommands
массив с байт кодом
Definition: s4g_main.h:53
s4g_Lexer * m_pLexer
лексический анализатор
Definition: s4g_main.h:50
#define S4G_MAX_LEN_VAR_NAME
максимальная длина имени переменной
Definition: s4g.h:188
основа взаимодествия
Definition: s4g_main.h:45
массив переменной длины
Definition: s4g_types.h:221
переменная
Definition: s4g_types.h:101
s4g_Variable * GCcreateVarSfunc(s4g_Main *s4gm, s4g_Sfunction *func, int typeVar=S4G_GC_TYPE_VAR_FREE)
создать переменную со значением уже существующей скриптовой функции
Definition: s4g_main.cpp:210
s4g_Lexeme * LEXgetLexemeCurr(s4g_Main *s4gm)
возвращает текущую лексему
Definition: s4g_main.cpp:110
unsigned long s4g_uint
uint
Definition: s4g.h:273
s4g_pdata GCgetPdata(s4g_Main *s4gm, s4g_Variable *pVar)
юзердата
Definition: s4g_main.cpp:339
void GCremoveTableInContext(s4g_Main *s4gm, ID id)
заменить таблицу в контексте на контекстную таблицу, ибо если этот вызов произошел то у нас стояла за...
Definition: s4g_main.cpp:153
виртуальная машина
Definition: s4g_vm.h:104
Заголовочный файл с основными типами данных
s4g_uint GCgetUint(s4g_Main *s4gm, s4g_Variable *pVar)
uint
Definition: s4g_main.cpp:294
s4g_Variable * GCgetVarFromContextByNum(s4g_Main *s4gm, ID idRelativeTopContext, ID idVar)
получить переменную по idVar из контекста, которые расположен на top - idRelativeTopContext позиции о...
Definition: s4g_main.cpp:188
мета класс
Definition: s4g_types.h:262
void(* s4g_report_func)(s4g_Main *s4gm, int level, const char *format,...)
тип функции вывода информации и обработки ошибок
Definition: s4g.h:292
значение
Definition: s4g_types.h:76
float s4g_float
float
Definition: s4g.h:276
UINT m_tTimeStart
системное время запуска скриптововй системы
Definition: s4g_main.h:61
s4g_Variable * GCgetVarBool(s4g_Main *s4gm, bool bf)
возвращает уже созданную переменную с bool значением
Definition: s4g_main.cpp:360
s4g_Variable * GCcreateVarNull(s4g_Main *s4gm, int typeVar=S4G_GC_TYPE_VAR_FREE)
создать переменную со значением null (то есть пустую переменную)
Definition: s4g_main.cpp:195
объект класса
Definition: s4g_types.h:317
ID GCexistsInAccessibleContexts(s4g_Main *s4gm, const char *szName, s4g_Variable **ppVar)
существует ли переменная с именем szName во всех доступных контекстах, если да то возвращает id конте...
Definition: s4g_main.cpp:183
void GCdeleteTopContext(s4g_Main *s4gm, bool canClear)
пометить контекст как ненужный и при сборке мусора снести все с него
Definition: s4g_main.cpp:173
s4g_Variable * GCgetGvar(s4g_Main *s4gm)
возвращает переменную со значением таблицы глобального пространства имен
Definition: s4g_main.cpp:142
ID GCaddContext(s4g_Main *s4gm, s4g_Table *tt, S4G_CONTEXT_TYPE_WORK status_valid=S4G_CONTEXT_TYPE_WORK_ONLINE)
добавить контекст основанный на таблице, возвращает id добавленного контекста, используется для замык...
Definition: s4g_main.cpp:163