Пример #1
0
void L(void) {

	if(lookahead == '('){
		match('(');

		if(lookahead == INT || lookahead == CHAR){
			match(lookahead);
			pointers();
			match(')');
			L();
			printf("cast\n");
		}
		else{
			expression();
			match(')');
		}
		
		
	}
	
	else{
		M();
	}
	


}
Пример #2
0
/*void translationunit(void){
	globaldeclaration();
	translationunit();
}*/
void globaldeclaration(void){
	
		typespecifier();
		pointers();
		match(ID);
			if(lookahead == '('){
				match('(');
				parameters();
				match(')');
				match('{');
				declarations();
				statements();
				match('}');
			}
	
	
	else{
		if(lookahead == '['){
			match('[');
			match(NUM);
			match(']');
			
		}
		if(lookahead == ','){
			declaratorlist();
			
		}
		match(';');

	}
	
}
Пример #3
0
void pointers(void) {
	if(lookahead == '*')
	{
      match('*');
      pointers();
	}

}
Пример #4
0
void declarator(void){
	pointers();
	match(ID);
	if(lookahead == '['){
		match('[');
		match(NUM);
		match(']');
	}
	
}
Пример #5
0
bool Shader::compile() {
    CORRADE_ASSERT(sources.size() > 1, "Shader::compile(): no files added", false);

    /* Array of source string pointers and their lengths */
    /** @todo Use `Containers::ArrayTuple` to avoid one allocation if it ever
        gets to be implemented (we need properly aligned memory too) */
    Containers::Array<const GLchar*> pointers(sources.size());
    Containers::Array<GLint> sizes(sources.size());
    for(std::size_t i = 0; i != sources.size(); ++i) {
        pointers[i] = static_cast<const GLchar*>(sources[i].data());
        sizes[i] = sources[i].size();
    }

    /* Create shader and set its source */
    glShaderSource(_id, sources.size(), pointers, sizes);

    /* Compile shader */
    glCompileShader(_id);

    /* Check compilation status */
    GLint success, logLength;
    glGetShaderiv(_id, GL_COMPILE_STATUS, &success);
    glGetShaderiv(_id, GL_INFO_LOG_LENGTH, &logLength);

    /* Error or warning message. The string is returned null-terminated, scrap
       the \0 at the end afterwards */
    std::string message(logLength, '\0');
    if(message.size() > 1)
        glGetShaderInfoLog(_id, message.size(), nullptr, &message[0]);
    message.resize(std::max(logLength, 1)-1);

    /* Show error log */
    if(!success) {
        Error out;
        out.setFlag(Debug::NewLineAtTheEnd, false);
        out.setFlag(Debug::SpaceAfterEachValue, false);
        out << "Shader: " << shaderName(_type)
            << " shader failed to compile with the following message:\n"
            << message;

    /* Or just message, if any */
    } else if(!message.empty()) {
        Error out;
        out.setFlag(Debug::NewLineAtTheEnd, false);
        out.setFlag(Debug::SpaceAfterEachValue, false);
        out << "Shader: " << shaderName(_type)
            << " shader was successfully compiled with the following message:\n"
            << message;
    }

    return success;
}
Пример #6
0
bool isSpriteSheet(PG::STREAM::InByteFile& reader){
	const unsigned int startPos = reader.pos();
	spriteSheetHeader header;
	reader.read((char*)&header, sizeof(spriteSheetHeader));

	std::vector<unsigned int> pointers(4);
	reader.read((char*)&pointers[0], 4*sizeof(unsigned int));

	if(pointers[0] == 0 || pointers[1] == 0 || pointers[2] == 0 || pointers[3] == 0) return false;
	if(pointers[3]+startPos >= reader.size()) return false;

	return true;
}
Пример #7
0
void M(void) {
	
	
 
      if (lookahead =='!') {
	    match('!');
		 M();
	    printf("not\n");
		 
	    
	} else if (lookahead == '-') {
	    match('-');
		 M();
		 printf("neg\n");
		 
	    
	} else if (lookahead == '&') {
	    match('&');
		 M();
		 printf("addr\n");
	    
	} else if (lookahead == '*') {
	    match('*');
		 M();
		 printf("dref\n");
	    
	} else if (lookahead == SZOF) {
	    match(SZOF);
		 match('(');
		 typespecifier();
		 pointers();
		 match(')');
		 printf("szof\n");
	  }
	else {
		N();
	} 

	
}
Пример #8
0
    bool controller::export_ptr_list(const arguments &args_, std::string &) const {
        std::ofstream pointers("sqf_pointers_declaration.hpp");
        std::ofstream pointers_def("sqf_pointers_definitions.hpp");

        std::ofstream assignments("sqf_assignments.hpp");
        pointers << "//Exported Pointer Definitions For: " << args_.as_string(0) << "\n\n";
        assignments << "//Exported Pointer Assignments For: " << args_.as_string(0) << "\n\n";

        pointers << "\n// Unary Functions\n";
        pointers_def << "\n// Unary Functions\n";

        assignments << "\n// Unary Functions\n";

        auto unary_list = loader::get().unary();
        std::list<std::string> sorted_unary_list;
        for (auto unary : unary_list) {
            sorted_unary_list.push_back(unary.first);
        }
        sorted_unary_list.sort();

        for (auto unary_entry : sorted_unary_list) {
            std::string op_name = unary_entry;
            std::regex name_test = std::regex("[a-z]+?.*");
            if (std::regex_match(op_name, name_test)) {
                for (auto op : unary_list[unary_entry]) {
                    std::string arg_types = op.op->arg_type.type_str();
                    std::transform(arg_types.begin(), arg_types.end(), arg_types.begin(), ::tolower);
                    std::string return_type = op.op->return_type.type_str();
                    std::transform(return_type.begin(), return_type.end(), return_type.begin(), ::tolower);
                    std::string first_arg_type = *op.op->arg_type.type().begin();
                    std::string pointer_name = "unary__" + op_name + "__" + arg_types + "__ret__" + return_type;
                    pointers_def << "unary_function __sqf::" << pointer_name << ";\n";
                    pointers << "static unary_function " << pointer_name << ";\n";
                    //__sqf::unary_random_scalar_raw = (unary_function)functions.get_unary_function_typed("random", "SCALAR");
                    assignments << "__sqf::" << pointer_name << " = " << "(unary_function)host::functions.get_unary_function_typed(\"" << op_name << "\"_sv, \"" << first_arg_type << "\"_sv);\n";
                }
            }
        }

        pointers << "\n// Binary Functions\n";
        pointers_def << "\n// Binary Functions\n";

        assignments << "\n// Binary Functions\n";

        auto binary_list = loader::get().binary();
        std::list<std::string> sorted_binary_list;
        for (auto binary : binary_list) {
            sorted_binary_list.push_back(binary.first);
        };
        sorted_binary_list.sort();

        for (auto binary_entry : sorted_binary_list) {
            std::string op_name = binary_entry;
            std::regex name_test = std::regex("[a-z]+?.*");
            if (std::regex_match(op_name, name_test)) {
                for (auto op : binary_list[binary_entry]) {
                    std::string arg1_types = op.op->arg1_type.type_str();
                    std::transform(arg1_types.begin(), arg1_types.end(), arg1_types.begin(), ::tolower);
                    std::string arg2_types = op.op->arg2_type.type_str();
                    std::transform(arg2_types.begin(), arg2_types.end(), arg2_types.begin(), ::tolower);

                    std::string return_type = op.op->return_type.type_str();
                    std::transform(return_type.begin(), return_type.end(), return_type.begin(), ::tolower);

                    std::string first_arg1_type = *op.op->arg1_type.type().begin();
                    std::string first_arg2_type = *op.op->arg2_type.type().begin();

                    std::string pointer_name = "binary__" + op_name + "__" + arg1_types + "__" + arg2_types + "__ret__" + return_type;
                    pointers_def << "binary_function __sqf::" << pointer_name << ";\n";
                    pointers << "static binary_function " << pointer_name << ";\n";

                    assignments << "__sqf::" << pointer_name << " = " << "(binary_function)host::functions.get_binary_function_typed(\"" << op_name << 
                        "\"_sv, \"" << first_arg1_type << "\"_sv, \"" << first_arg2_type << "\"_sv);\n";
                }
            }
        }

        pointers << "\n// Nular Functions\n";
        pointers_def << "\n// Nular Functions\n";

        assignments << "\n// Nular Functions\n";

        auto nular_list = loader::get().nular();
        std::list<std::string> sorted_nular_list;
        for (auto nular : nular_list) {
            sorted_nular_list.push_back(nular.first);
        };
        sorted_nular_list.sort();

        for (auto nular_entry : sorted_nular_list) {
            std::string op_name = nular_entry;
            std::regex name_test = std::regex("[a-z]+?.*");
            if (std::regex_match(op_name, name_test)) {
                for (auto op : nular_list[nular_entry]) {
                    std::string return_type = op.op->return_type.type_str();
                    std::transform(return_type.begin(), return_type.end(), return_type.begin(), ::tolower);
                    std::string pointer_name = "nular__" + op_name + "__ret__" + return_type;
                    pointers_def << "nular_function __sqf::" << pointer_name << ";\n";
                    pointers << "static nular_function " << pointer_name << ";\n";

                    //__sqf::unary_random_scalar_raw = (unary_function)functions.get_unary_function_typed("random", "SCALAR");
                    assignments << "__sqf::" << pointer_name << " = " << "(nular_function)host::functions.get_nular_function(\"" << op_name << "\"_sv);\n";
                }
            }
        }

        return true;
    }
 std::vector<Ptr> GetPointers() const {
   std::vector<Ptr> pointers(Size());
   RecurseForPointers(root, &pointers);
   return pointers;
 }
Пример #10
0
int main() {
    pointers(); // else — links();
    return 0;
}