A Composite/Visitor pattern for expression processing
To demonstrate the journey from the GoF pattern catalog to Observables, we will model a four-function calculator as a running example. Since expression trees or AST are hierarchical in nature, they will be a good example to model as a Composite pattern. We have purposefully omitted writing a parser to keep the code listing small:
#include <iostream> #include <memory> #include <list> #include <stack> #include <functional> #include <thread> #include <future> #include <random> #include "FuncCompose.h" // available int the code base using namespace std; //---------------------List of operators supported by the evaluator enum class OPERATOR{ ILLEGAL,PLUS,MINUS,MUL,DIV,UNARY_PLUS,UNARY_MINUS };
We have defined an enum type to represent the four binary operators (+
, -
, *
, /
) and two unary operators (+
, -
). Other than the standard C++ headers, we have included a custom header (FuncCompose...