Exemplo n.º 1
0
object *read_character(FILE *in){
  int c;
  c = getc(in); /* / */
  if(c != '\\'){
    fprintf(stderr, "Invalid character, expected '\\', got %c\n", c);
  }
  c = getc(in); /* <character> */
  switch(c){
    case EOF:
      fprintf(stderr, "Incomplete character literal\n");
      exit(1);
    case 's':
      if(peek(in) == 'p'){
        eat_expected_string(in, "pace");
        peek_expected_delimiter(in);
        return make_character(' ');
      }
      break;
    case 'n':
      if(peek(in) == 'e'){
        eat_expected_string(in, "ewline");
        peek_expected_delimiter(in);
        return make_character(' ');
      }
      break;
  }
  /* make sure the character is followed by a delimiter */
  peek_expected_delimiter(in);
  return make_character(c);
}
Exemplo n.º 2
0
static scheme_object* read_character(vm* context, FILE* in)
{
	int c = getc(in);
	switch(c)
	{
		case EOF:
			fprintf(stderr, "incomplete character literal\n");
			exit(1);
		case 's':
			if(peek(in) == 'p')
			{
				eat_expected_string(in, "pace");
				peek_expected_delimiter(in);
				return make_character(context, ' ');
			}
			break;
		case 'n':
			if(peek(in) == 'e')
			{
				eat_expected_string(in, "ewline");
				peek_expected_delimiter(in);
				return make_character(context, '\n');
			}
			break;
		case 't':
			if(peek(in) == 'a')
			{
				eat_expected_string(in, "ab");
				peek_expected_delimiter(in);
				return make_character(context, '\t');
			}
			break;
	}
	peek_expected_delimiter(in);
	return make_character(context, c);
}