Ejemplo n.º 1
0
insula::graphics::shader::variable::variable(
	sge::renderer::glsl::string const &_name,
	variable_type::type const _type,
	value_type const &_initial_value)
:
	name_(
		_name),
	declaration_(
		generate_declaration(
			_name,
			_type,
			_initial_value)),
	type_(
		_type),
	initial_value_(
		_initial_value)
{
}
Ejemplo n.º 2
0
void
generate ( node_t *root )
{
    if ( root == NULL )
        return;
    switch ( root->type )
    {
        case PROGRAM_N:
			//Generate data head
			printf(DATA_HEAD);
			//Generate unique labels for strings
			generate_data_segment(root);
			//Create an entry point
			printf(TEXT_HEAD, root->children[0]->children[0]->entry->label );
		
			for (int i=0; i<root->n_children; i++ )
			{
       			generate(root->children[i]);
			}
			
            break;
        case FUNCTION_LIST_N:
;
			for (int i=0; i<root->n_children; i++ )
			{
       			generate(root->children[i]);
			}
            break;
        case FUNCTION_N:
			generate_function(root);
			generate(root->children[2]);

            break;
        case BLOCK_N:
			for (int i=0; i<root->n_children; i++ )
			{
       			generate(root->children[i]);
			}
            break;
        case DECLARATION_LIST_N:
			for (int i=0; i<root->n_children; i++ )
			{
       			generate(root->children[i]);
			}
            break;
        case DECLARATION_N:
			generate_declaration(root);
            break;
        case STATEMENT_LIST_N:
			for (int i=0; i<root->n_children; i++ )
			{
       			generate(root->children[i]);
			}
            break;
        case ASSIGNMENT_STATEMENT_N:
			assign_bound_name(root);
            break;
        case RETURN_STATEMENT_N:
			//The result is also an expression
			generate_expression(root->children[0]);
			printf("\t pushl %%eax \t /*Push of the final result*/\n");
			printf("\t ret \t /*Return control*/\n");
            break;
        case PRINT_STATEMENT_N:
            break;
        case NULL_STATEMENT_N:
            /* A proper implementation of the CONTINUE statement is more
             * trouble than it is worth at this point; since it is not the
             * most central of features, we skip it.
             * (Of course, if you really want to make one...)
             */
            printf ( "\t/* CONTINUE */\n" );
            break;
        case IF_STATEMENT_N:
            break;
        case WHILE_STATEMENT_N:
            break;
							  
        case EXPRESSION_N:
        case INTEGER_N:
        case VARIABLE_N:
			generate_expression(root);
            break;
							  
        default:
            fprintf ( stderr, "Warning: did not generate assembly for '%s'\n", root->type);
            break;

    }
	
}
Ejemplo n.º 3
0
void code_generator () {
    generate_header ();
    generate_declaration (stream_tab);
    generate_main (stream_tab, run_tab);
}