/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  parse_input
 *  Description: separates a line of input into tokens. Passes tokens off for additional
 *  processing. 
 * =====================================================================================
 */
	void
parse_input (char *input, size_t size)
{
	char s[(int)size];
	strcpy(s, input);

	char *op_code = strtok(s, " ");
  char *raw_arg_a = strtok(NULL, " ");
	char *raw_arg_b = strtok(NULL, " ");
	char *raw_arg_c = strtok(NULL, " ");

	int argc = 0;

	struct arg_t args[3];
	if(raw_arg_a != 0) {
		args[0] = parse_arg(raw_arg_a);
		argc++;
	}
	if(raw_arg_b != 0) {
		args[1] = parse_arg(raw_arg_b);
		argc++;
	}
	if(raw_arg_c != 0) {
		args[2] = parse_arg(raw_arg_b);
		argc++;
	}

	op_code = trim_whitespace(op_code);
	str_to_lower(op_code);
	unsigned long op_hashed = hash(op_code);
	assemble_op(op_hashed, args, argc);
}		/* -----  end of function parse_input  ----- */
示例#2
0
文件: 7a.c 项目: 7shi/Betelgeuse
int assemble_token(enum Token token)
{
    switch (token)
    {
    case Addr:
        {
            if (curad == 0) text_addr = token_num;
            curad = token_num;
            return 1;
        }
    case EndL:
        return 1;
    case Symbol:
        {
            int opn;
            if ((opn = search_op(token_buf)) != -1)
                assemble_op(opcodes[opn]);
            else if ((opn = search_pop(token_buf)) != -1)
                assemble_pop((enum POp)opn);
            else if (token_buf[0] == 'o' && token_buf[1] == 'p' && token_buf[2] == 'c')
            {
                int op1 = (int)strtoul(token_buf + 3, &dummy, 10);
                uint64_t num;
                if (!parse_value(&num)) return 0;
                assemble_pcd(op1, (int)num);
            }
            else
                return 0;
            return 1;
        }
    }
    return 0;
}