QueryTree
Holds the value to which the statements have been evaluated. The children define previous steps of the evaluation, thus building a tree of all steps of the evaluation recursively until we reach the nodes of the CPG. This is necessary if we want to store all steps which are performed when evaluating a query. It helps to make the reasoning of the query more understandable to the user and gives an analyst the maximum of information available.
Numerous methods allow to evaluate the queries while keeping track of all the steps. Currently, the following operations are supported:
eq: Equality of two values.
ne: Inequality of two values.
IN: Checks if a value is contained in a Collection
IS: Checks if a value implements a type (Class).
Additionally, some functions are available only for certain types of values.
For boolean values:
and: Logical and operation (&&)
or: Logical or operation (||)
xor: Logical exclusive or operation (xor)
implies: Logical implication
For numeric values:
gt: Grater than (>)
ge: Grater than or equal (>=)
lt: Less than (<)
le: Less than or equal (<=)