7 #ifndef RETDEC_LLVMIR2HLL_HLL_BRACKET_MANAGER_H
8 #define RETDEC_LLVMIR2HLL_HLL_BRACKET_MANAGER_H
106 static const bool T =
true;
107 static const bool F =
false;
130 virtual std::string
getId()
const = 0;
A base class of all brackets managers.
Definition: bracket_manager.h:38
void treeTraversalForCallWithStackOperations(ShPtr< CallExpr > expr, Operators currentOperator)
Function visit arguments of CallExpr. Function also add operator on stack of previous operators and a...
Definition: bracket_manager.cpp:273
void treeTraversalForCastWithStackOperations(ShPtr< CastExpr > expr, Operators currentOperator)
Function visit operand of CastExpr. Function also add operator on stack of previous operators and aft...
Definition: bracket_manager.cpp:258
Direction
Enumeration for direction tree traversal.
Definition: bracket_manager.h:74
BracketManager(ShPtr< Module > module)
Constructs a new base class for brackets managers.
Definition: bracket_manager.cpp:69
void treeTraversalForUnaryOpWithStackOperations(ShPtr< UnaryOpExpr > expr, Operators currentOperator)
Function visit operand of UnaryOpExpr. Function also add operator on stack of previous operators and ...
Definition: bracket_manager.cpp:201
void removeOperatorFromStackIfSupported(Operators currentOperator)
Pop element from prevOperatorsStack. If operator is not supported, operator is not popped from stack.
Definition: bracket_manager.cpp:186
virtual ItemOfPrecTable checkPrecTable(Operators currentOperator, Operators prevOperator)=0
ShPtr< Module > module
The module to be analyzed.
Definition: bracket_manager.h:120
void treeTraversalForBinaryOpWithStackOperations(ShPtr< BinaryOpExpr > expr, Operators currentOperator)
Function visit operands of BinaryOpExpr. Function also add operator on stack of previous operators an...
Definition: bracket_manager.cpp:216
virtual bool isOperatorSupported(Operators currentOperator)=0
static const int PREC_TABLE_SIZE
Constant for size of precedence table.
Definition: bracket_manager.h:110
bool areBracketsNeeded(ShPtr< Expression > expr)
Function that decides whether the brackets are needed. This function is needed to be called from HLL ...
Definition: bracket_manager.cpp:101
virtual std::string getId() const =0
Returns the ID of the BracketManager.
Operators
Enumeration for operators.
Definition: bracket_manager.h:41
void addOperatorOnStackIfSupported(Operators currentOperator, Direction direction)
Create a structure which contains previous operator and direction of tree traversal and add it on sta...
Definition: bracket_manager.cpp:171
virtual void visit(ShPtr< GlobalVarDef > varDef) override
Definition: ordered_all_visitor.cpp:95
void areBracketsNeededForExpr(ShPtr< Expression > expr, Operators currentOperator)
Function find out, if brackets are needed for input expression.
Definition: bracket_manager.cpp:112
static const bool F
Definition: bracket_manager.h:107
void init()
Iterate through the module and visit all functions and all global variables. Starts brackets analyse.
Definition: bracket_manager.cpp:77
void treeTraversalForTernaryOpWithStackOperations(ShPtr< TernaryOpExpr > expr, Operators currentOperator)
Function visit operands of TernaryOpExpr. Function also add operator on stack of previous operators a...
Definition: bracket_manager.cpp:235
bool areBracketsNeededPrecTable(Operators currentOperator)
This function enter to precedence table with function checkPrecTable(...) and accordance it decide to...
Definition: bracket_manager.cpp:129
static const bool T
Bool constants.
Definition: bracket_manager.h:106
FirstParInItemOfPrecTable
Definition: bracket_manager.h:84
@ L
Definition: bracket_manager.h:85
@ R
Definition: bracket_manager.h:86
@ S
Definition: bracket_manager.h:88
@ N
Definition: bracket_manager.h:87
std::map< ShPtr< Expression >, bool > bracketsAreNeededMap
Definition: bracket_manager.h:118
std::stack< PrevOperators > prevOperatorsStack
Definition: bracket_manager.h:115
PrevOperators getPrevOperator()
Top element from prevOperatorsStack.
Definition: bracket_manager.cpp:158
A visitor that visits everything in an ordered way.
Definition: ordered_all_visitor.h:44
virtual void visit(ShPtr< GlobalVarDef > varDef) override
Definition: ordered_all_visitor.cpp:95
A library providing API for working with back-end IR.
std::shared_ptr< T > ShPtr
An alias for a shared pointer.
Definition: smart_ptr.h:18
Definition: archive_wrapper.h:19
A visitor that visits everything in an ordered way.
Declarations, aliases, macros, etc. for the use of smart pointers.
Definition: bracket_manager.h:93
FirstParInItemOfPrecTable association
Definition: bracket_manager.h:94
bool bracketsNeeded
Definition: bracket_manager.h:95
Definition: bracket_manager.h:100
Direction treeDirection
Definition: bracket_manager.h:102
Operators prevOperator
Definition: bracket_manager.h:101
Aliases for several useful types.