/** * In MathML, <plus/> and <times/> are n-ary operators but the infix * FormulaParser represents them as binary operators. To ensure a * consistent AST representation, this function is part of the n-ary to * binary reduction process. */ static void reduceBinary (ASTNode& node) { if (node.getNumChildren() == 2) { ASTNode* op = new ASTNode( node.getType() ); node.swapChildren(op); node.prependChild(op); } }
/** * Ensures the given ASTNode has the appropriate number of arguments. If * arguments are missing, appropriate defaults (per the MathML 2.0 * specification) are added: * * log (x) -> log (10, x) * root(x) -> root( 2, x) */ static void checkFunctionArgs (ASTNode& node) { if (node.getNumChildren() == 1) { if (node.getType() == AST_FUNCTION_LOG) { ASTNode* child = new ASTNode; child->setValue(10); node.prependChild(child); } else if (node.getType() == AST_FUNCTION_ROOT) { ASTNode* child = new ASTNode; child->setValue(2); node.prependChild(child); } } }