Exemple #1
0
static void parse_sym(char **pscan)
{
    char rbuf[50];
    char *rbufp = rbuf;

    *rbufp++ = **pscan;
    ++*pscan;
    while (!is_delimiter(**pscan) && **pscan != '\0'){
        *rbufp++ = **pscan;
        if (!is_subsequent(**pscan)){
			printf("Error: %s is a illegal symbol. -- READ\n", rbuf);
            do_input_error(pscan);
        }
        ++*pscan;
    }
    *rbufp = '\0';
	reg = make_symbol(rbuf);
	current_state = stack_pop(&state_stack);
	if (current_state == STATE_QUOTE){
		reg = cons(reg, NIL);
		reg = cons(make_symbol("quote"), reg);
		current_state = stack_pop(&state_stack);
	}
	stack_push(&parser_stack, reg);
}
Exemple #2
0
/* this doesn't read the peculiar identifiers, they are scanned in the
 * main reader body */
static object read_identifier(FILE *in)
{
	object o;
	int str_len = 0;
	int str_size = STRING_MIN_BUFFER;
	char *buffer;
	int c;

	buffer = xmalloc(str_size);

	c = tolower(fgetc(in));
	assert(is_initial(c));

	buffer[str_len++] = c;

	while (1) {
		c = fgetc(in);

		if (is_delimiter(c)) {
			ungetc(c, in);
			break;
		}

		if (!is_subsequent(c))
			error("Symbol has bad name -- read", nil);

		/* we're a lower case scheme */
		buffer[str_len++] = tolower(c);
	}

	o = make_symbol(buffer, str_len);
	xfree(buffer);

	return o;
}