Пример #1
0
/**
    @brief Prints node and ALL subnodes in preorder to file

    @param tree_p Pointer to node
    @param file File thah will contain nodes
    @param dump_file File that may contain debug info
    @return 0 always
*/
int Node_fprint(Node_t* tree_p, FILE* file, FILE* dump_file)
{
    VALID_NODE(tree_p, "Invalid node in the beginning of Node_fprint", dump_file);
    assert(file);

    fprintf(file,"(\"%s\"", tree_p->data);
    if (tree_p->lft)
    {
        Node_fprint(tree_p->lft, file, dump_file);
    }
    else
    {
        fprintf(file, "(0)");
    }

    if (tree_p->rgt)
    {
        Node_fprint(tree_p->rgt, file, dump_file);
    }
    else
    {
        fprintf(file, "(0)");
    }
    fprintf(file, ")");

    VALID_NODE(tree_p, "Invalid node in the end of Node_fprint", dump_file);

    return 0;
}
Пример #2
0
static void Rule_fprint(FILE *stream, Node *node)
{
  assert(node);
  assert(Rule == node->type);
  fprintf(stream, "%s.%d =", node->rule.name, node->rule.id);
  if (node->rule.expression)
    Node_fprint(stream, node->rule.expression);
  else
    fprintf(stream, " UNDEFINED");
  fprintf(stream, " ;\n");
}
Пример #3
0
static void Node_fprint(FILE *stream, Node *node)
{
  assert(node);
  switch (node->type)
    {
    case Rule:		fprintf(stream, " %s", node->rule.name);				break;
    case Variable:	fprintf(stream, " %s:", node->variable.name);				break;
    case Name:		fprintf(stream, " %s", node->name.rule->rule.name);			break;
    case Dot:		fprintf(stream, " .");							break;
    case Character:	fprintf(stream, " '%s'", node->character.value);			break;
    case String:	fprintf(stream, " \"%s\"", node->string.value);				break;
    case Class:		fprintf(stream, " [%s]", node->cclass.value);				break;
    case Action:	fprintf(stream, " { %s }", node->action.text);				break;
    case Predicate:	fprintf(stream, " ?{ %s }", node->action.text);				break;

    case Alternate:	node= node->alternate.first;
			fprintf(stream, " (");
			Node_fprint(stream, node);
			while ((node= node->any.next))
			  {
			    fprintf(stream, " |");
			    Node_fprint(stream, node);
			  }
			fprintf(stream, " )");
			break;

    case Sequence:	node= node->sequence.first;
			fprintf(stream, " (");
			Node_fprint(stream, node);
			while ((node= node->any.next))
			  Node_fprint(stream, node);
			fprintf(stream, " )");
			break;

    case PeekFor:	fprintf(stream, "&");  Node_fprint(stream, node->query.element);	break;
    case PeekNot:	fprintf(stream, "!");  Node_fprint(stream, node->query.element);	break;
    case Query:		Node_fprint(stream, node->query.element);  fprintf(stream, "?");	break;
    case Star:		Node_fprint(stream, node->query.element);  fprintf(stream, "*");	break;
    case Plus:		Node_fprint(stream, node->query.element);  fprintf(stream, "+");	break;
    default:
      fprintf(stream, "\nunknown node type %d\n", node->type);
      exit(1);
    }
}
Пример #4
0
void Node_print(Node *node)	{ Node_fprint(stderr, node); }