Exemple #1
0
void DotBuilder::doOperator(ASTOperator* element)
{
  uint operatorType = element->getOperatorType();

  ASTElement* left  = element->getLeft();
  ASTElement* right = element->getRight();

  const char* opString = NULL;

  switch (operatorType)
  {
    case MOPERATOR_ASSIGN: opString = "="; break;
    case MOPERATOR_PLUS  : opString = "+"; break;
    case MOPERATOR_MINUS : opString = "-"; break;
    case MOPERATOR_MUL   : opString = "*"; break;
    case MOPERATOR_DIV   : opString = "/"; break;
    case MOPERATOR_MOD   : opString = "%"; break;
	case MOPERATOR_POW   : opString = "^"; break;
    default:
      MP_ASSERT_NOT_REACHED();
  }

  _sb.appendFormat("  N_%u [label=\"<L>|<F0>%s|<R>\"];\n", element->getElementId(), opString);
  _sb.appendFormat("  N_%u:L -> N_%u:F0;\n", element->getElementId(), left->getElementId());
  _sb.appendFormat("  N_%u:R -> N_%u:F0;\n", element->getElementId(), right->getElementId());

  doElement(left);
  doElement(right);
}
Exemple #2
0
void DotBuilder::doTransform(ASTTransform* element)
{
  uint transformType = element->getTransformType();
  ASTElement* child = element->getChild();

  const char* opString = NULL;

  switch (transformType)
  {
    case MTRANSFORM_NONE  : opString = ""; break;
    case MTRANSFORM_NEGATE: opString = "-"; break;
    default:
      MP_ASSERT_NOT_REACHED();
  }

  _sb.appendFormat("  N_%u [label=\"<F0>%s\"];\n", element->getElementId(), opString);
  _sb.appendFormat("  N_%u -> N_%u:F0;\n", element->getElementId(), child->getElementId());
  doElement(child);
}