Exemplo n.º 1
0
void process_phrase(char *action,  char *word, bool add_to_hist){
  /* Add to history */
  if(add_to_hist){
    int errnum;
    errnum = add_to_history(word, hist_fname);
  }

  /* Look up and call the function */
  func_symbol = scm_c_lookup(action);
  func = scm_variable_ref(func_symbol);
  ret_val = scm_call_1(func, scm_from_locale_string(word));

  /* TODO: process output based on the result of the Scheme function */
  /* SCM is_list = scm_list_p (ret_val); */

  /* Print the output */
  print_scheme_list(ret_val);
}
Exemplo n.º 2
0
int print_compozite(FILE* dest, struct ast_node_t* node, int padding, int wrap) {

	ast_node_t* child = node->value.child;

	int new_pad = padding + (wrap ? 1 : 1);	//lol, wtf?

	switch (node->type) {
	//absolutelly syntactically specifically printed
	case JST_PROGRAM:
		print_whole_program(dest, child, padding, wrap);
		break;
	case JST_VARIABLE_DECL: {
		int done = print_variable_decl(dest, node, padding, wrap);
		return done;
		break;
	}
	case JST_VARIABLE: {
		print_single_node(dest, child, padding, wrap);
		break;
	}
	case JST_PROCEDURE: {
		print_procedure(dest, node, padding, wrap);
		return 1;
		break;
	}
	case JST_PROCCALL:
		print_proccal(dest, node, padding, wrap);
		break;
	case JST_ARRAY:
		print_array(dest, node, padding, wrap);
		break;
	case STK_SIZEOF:
		print_sizeof(dest, node, padding, wrap);
		break;

		// printing of containers
	case CNT_PARAMETERS:
		print_scheme_list(dest, child, new_pad, 0);
		break;
	case CNT_STATEMENTS:
		print_renamed(dest, "begin", child, new_pad, 1);
		break;
	case CNT_EXPRESSIONS:
		print_renamed(dest, "list", child, new_pad, 0);
		break;

	case JST_EXPRESSION:
		print_single_node(dest, child, new_pad, 0);
		break;
		// renaming
	case STK_ASSIGNMENT:
		print_renamed(dest, "set-at", child, new_pad, 0);
		break;
	case OPT_INDEX:
		print_renamed(dest, "at", child, new_pad, 0);
		break;
	case OPT_DEREFERENCE:
		print_renamed(dest, "adress-of", child, new_pad, 0);
		break;
	case OPT_REFERENCE:
		print_renamed(dest, "at-adress", child, new_pad, 0);
		break;
	case OPT_TERNARY:
		print_renamed(dest, "if", child, new_pad, 0);
		break;
	case OPT_NOT:
		print_renamed(dest, "not", child, new_pad, 0);
		break;
	case OPT_AND:
		print_renamed(dest, "and", child, new_pad, 0);
		break;
	case OPT_OR:
		print_renamed(dest, "or", child, new_pad, 0);
		break;
	case OPT_BITWISE_NOT:
		print_renamed(dest, "bit-not", child, new_pad, 0);
		break;
	case OPT_BITWISE_AND:
		print_renamed(dest, "bit-and", child, new_pad, 0);
		break;
	case OPT_BITWISE_OR:
		print_renamed(dest, "bit-or", child, new_pad, 0);
		break;
	case OPT_BITWISE_XOR:
		print_renamed(dest, "bit-xor", child, new_pad, 0);
		break;
	case OPT_MODULO:
		print_renamed(dest, "mod", child, new_pad, 0);
		break;
	case STK_DO:
		print_renamed(dest, "do-while", child, new_pad, 1);
		break;

		//normally printed, but with wrap
	case STK_IF:
	case STK_WHILE:
	case STK_FOR: {
		const char* str = to_string(node->type);
		print_labeled_scheme_list(dest, str, child, new_pad, 1);
	}
		break;
	default: {	//print inline (operators)
		const char* str = to_string(node->type);
		print_labeled_scheme_list(dest, str, child, new_pad, 0);
	}
	}
	return 0;
}