Example #1
0
int check_member_stmt(is_member_stmt* node, bool first_pass)
{
	int errors = 0;

	switch (node->type)
	{
		case t_member_stmt_var:
			if (first_pass)
				errors += check_var_stmt(node->data.var, true);
		break;

		case t_member_stmt_func_def:
			errors += check_func_def(node->data.func_def, first_pass);
		break;
	}

	return errors;
}
Example #2
0
/**
* Given the first token to an input line, will attempt to parse it and
* process the related instruction.
*
* @param tok 		The first token on the input line, this is expected to be
* 					a clean (non-whitespace) token.
* @param program 	Contains all current program information gathered so far,
* 					primarily used for error reporting.
*/
void process_token(char *tok, struct program *program){

	// check for comments
	if(check_comment(tok, program)){
		process_comment(program);
		return;
	}

	// process constant definitions
	else if(check_const_def(tok, program)){
		process_const_def(tok, program);
		return;
	}

	// Function definitions
	else if(check_func_def(tok, program)){
		process_func_def(tok, program);
		return;
	}
	
	// check if we have a label
	else if(check_label_def(tok, program)){
		process_label_def(tok, program);
		return;
	}

	// the first token should contain our instruction
	else if(!strcmp(tok, "HALT")){
		process_instruction(program, HALT, HALT_F , 0);
	}
	else if(!strcmp(tok, "NOT")){
		process_instruction(program, NOT, NOT_F, 0);
	}
	else if(!strcmp(tok, "SHL")){
		process_instruction(program, SHL, SHL_F, 0);
	}
	else if(!strcmp(tok, "SHR")){
		process_instruction(program, SHR, SHR_F, 0);
	}
	else if(!strcmp(tok, "OR")){
		process_instruction(program, OR, OR_F, 0);
	}
	else if(!strcmp(tok, "AND")){
		process_instruction(program, AND, AND_F, 0);
	}
	else if(!strcmp(tok, "ADD")){
		process_instruction(program, ADD, ADD_F, 0);
	}
	else if(!strcmp(tok, "SW")){
		process_instruction(program, SW, SW_F, 0);
	}
	else if(!strcmp(tok, "SI")){
		process_instruction(program, SI, SI_F, 0);
	}
	else if(!strcmp(tok, "LW")){
		process_instruction(program, LW, LW_F, 0);
	}
	else if(!strcmp(tok, "LI")){
		process_instruction(program, LI, LI_F, 0);
	}
	else if(!strcmp(tok, "BEZ")){
		process_instruction(program, BEZ, BEZ_F, 0);
	}
	else if(!strcmp(tok, "ROT")){
		process_instruction(program, ROT, ROT_F, 0);
	}
	else if(!strcmp(tok, "ROT1")){
		process_instruction(program, ROT1, ROT1_F, 0);
	}
	else if(!strcmp(tok, "JMP")){
		process_instruction(program, JMP, JMP_F, 0);
	}
	else if(!strcmp(tok, "NOP")){
		process_instruction(program, NOP, NOP_F, 0);
	}
	else if(!strcmp(tok, "LFSJ")){
		process_instruction(program, LFSJ, LFSJ_F, 0);
	}
	else if(!strcmp(tok, "STJ")){
		process_instruction(program, STJ, STJ_F, 0);
	}

	// looks like a bad opcode
	else{
		#ifdef DEBUG
			fprintf(stderr, "BAD CODE '%s'\n", tok);
		#endif
		print_unexpected_ident(tok, program);
	}
}