ProcedureDefinition *CreateSuifComplexInputPass::build_main( const char *main_file ) {
  DefinitionBlock* file_def_block = create_definition_block( _suif_env );

  SymbolTable *file_symbol_table = create_basic_symbol_table( _suif_env );
  FileSetBlock* fsb = _suif_env -> get_file_set_block();
  //  SymbolTable* ext_table = fsb->get_file_set_symbol_table();

  FileBlock * the_file_block =
    create_file_block( _suif_env, main_file,
		      file_symbol_table,
		      file_def_block);

  fsb->append_file_block(the_file_block);

  ProcedureSymbol *main_symbol =
    create_procedure_symbol( _suif_env,_main_type, "main", true );
  fsb -> get_external_symbol_table() -> add_symbol(main_symbol);

  StatementList *main_body = create_statement_list( _suif_env );
  BasicSymbolTable* main_symbol_table =
    create_basic_symbol_table( _suif_env, file_symbol_table );
  DefinitionBlock* main_def_block = create_definition_block( _suif_env );
  ProcedureDefinition *main_definition =
    create_procedure_definition( _suif_env, main_symbol, main_body,main_symbol_table,main_def_block);

  ParameterSymbol *argc_symbol = create_parameter_symbol( _suif_env, _q_argc_type, "argc", false );


  main_definition->get_symbol_table()->add_symbol(argc_symbol);
  main_definition->append_formal_parameter(argc_symbol);

  ParameterSymbol *argv_symbol = 
    create_parameter_symbol( _suif_env, _q_argv_type, "argv", false );

  main_definition->get_symbol_table()->add_symbol(argv_symbol);
  main_definition->append_formal_parameter(argv_symbol);

  the_file_block->get_definition_block()->
    append_procedure_definition(main_definition);

  return main_definition;
}