Exemplo n.º 1
0
Arquivo: Tree.c Projeto: a-krebs/YACC
/*
 * Walks thourge the parse tree. Emits code to resolve each expression
 * at an operator node.
 *
 * Parameters:
 *		node: starting node
 *
 * Return: symbol of resulting expression type
 */
Symbol *postOrderWalk(struct treeNode *node) {
	Symbol *x = NULL;
	Symbol *y = NULL;

	if (node->left == NULL) {
		if (node->opToken == FUNCTION_INVOCATION) {
			emitBabyTree(node->symbol, node->opToken, NULL);
			// TODO: make exchange with tmp so old symbol can be free'd
			/* We exchange the value of the func_kind symbol with its
			 * type so that we don't have to add more special cases
			 * to other emission function */
			node->symbol = getTypeSym(node->symbol);
		}
		return node->symbol;
	} else if (node->opToken == RECORD_ACCESS) {
		x = postOrderWalk(node->left);
		emitBabyTree(x, node->opToken, node->symbol);
		return node->symbol;
	} else {
		x = postOrderWalk(node->left);
		y = postOrderWalk(node->right);
		emitBabyTree(x, node->opToken, y);
		return node->symbol;
	}
}		
Exemplo n.º 2
0
void postOrderWalk(struct node **root)
{
	if(*root==0)
		return;

	postOrderWalk(&(*root)->left);
	postOrderWalk(&(*root)->right);
	printf("%i ", (*root)->number);
}
Exemplo n.º 3
0
// @TODO dopsat funkci pro vytvoření stromu, aby byl veškerý kód ve funkcích
int main(int argc, char **argv)
{
	struct node *tree = 0;

	add(1, &tree);
	add(2, &tree);
	add(3, &tree);
	add(4, &tree);
	add(5, &tree);
	add(6, &tree);
	add(7, &tree);

	printf("Height: %i\n", maxHeight(&tree));

	printf("inOrderWalk:   ");
	inOrderWalk(&tree);
	printf("\n");

	printf("preOrderWalk:  ");
	preOrderWalk(&tree);
	printf("\n");

	printf("postOrderWalk: ");
	postOrderWalk(&tree);
	printf("\n");
	return 0;
}