s4g  0.9.2
высокоуровневый, императивный, процедурный, встраиваемый, скриптовый язык программирования общего назначения, написанный на C++.
s4g_optimizer.h
См. документацию.
1 
2 /*
3 Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
4 license MIT see in LICENSE or
5 https://s4g.su/
6 */
27 #ifndef s4g_optimizer_h
28 #define s4g_optimizer_h
29 
30 
31 #include "s4g_parser.h"
32 
35 {
36 public:
38  static void optimize(s4g_Main *ps4gm);
39  static bool nodeCallback(s4g_BaseNode **ppNode);
40 
42  static bool isConstNode(S4G_NODE_TYPE node_type);
43 
45  static s4g_BaseNode *calcNode(s4g_BaseNode *pNode);
46 
48  static void testBlock(s4g_BaseNode **ppNode);
50  static void testStmt(s4g_BaseNode **ppNode);
52  static void testFor(s4g_BaseNode **ppNode);
54  static void testIf(s4g_BaseNode **ppNode);
55 
57  static void testTable(s4g_BaseNode **ppNode);
58 
59  static bool listUsedVarsCallback(s4g_BaseNode **ppNode);
60  static bool checkForSideEffectsCallback(s4g_BaseNode **ppNode);
61 
62  static bool constToBool(s4g_BaseNode *pNode);
63 
64  static void warning(s4g_BaseNode *pNode, const char *szMsg);
65 protected:
66  static int m_iUpdates;
67  static s4g_Main *s4gm;
68 
69  static s4g_Stack<const char*> m_stUsedVars;
70  static bool m_bExprHasSideEffects;
71 
74 };
75 
77 
78 #endif
Заголовочный файл синтаксического анализатора
базовый класс нода АСТ
Definition: s4g_parse.h:568
Оптимизатор
Definition: s4g_optimizer.h:34
static void testTable(s4g_BaseNode **ppNode)
Выполняет проверку таблиц
Definition: s4g_optimizer.cpp:140
static void testStmt(s4g_BaseNode **ppNode)
Выполняет проверки инструкций
Definition: s4g_optimizer.cpp:216
static s4g_Stack< const char * > m_stSafeVars
Переменные, которые при проверке на сайд-эффекты не учитываются
Definition: s4g_optimizer.h:73
static s4g_BaseNode * calcNode(s4g_BaseNode *pNode)
Выполняет вычисление поддерева AST.
Definition: s4g_optimizer.cpp:438
Стек, а точнее простой динамический массив с элементами стека
Definition: s4g_stack.h:22
S4G_NODE_TYPE
типы нодов
Definition: s4g_parse.h:357
static void testFor(s4g_BaseNode **ppNode)
Выполняет проверки цикла FOR.
Definition: s4g_optimizer.cpp:157
static void testIf(s4g_BaseNode **ppNode)
Выполняет проверку переходов условия
Definition: s4g_optimizer.cpp:98
static bool isConstNode(S4G_NODE_TYPE node_type)
Является ли нода константной
Definition: s4g_optimizer.cpp:427
static bool checkForSideEffectsCallback(s4g_BaseNode **ppNode)
Проверит выражение на наличие сайд-эффектов(вызовы функций, неявные изменения переменных ...
Definition: s4g_optimizer.cpp:240
static void testBlock(s4g_BaseNode **ppNode)
Выполняет проверки, связаные с блоком
Definition: s4g_optimizer.cpp:279
основа взаимодествия
Definition: s4g_main.h:45
static void optimize(s4g_Main *ps4gm)
Выполняет оптимизацию всего AST.
Definition: s4g_optimizer.cpp:19