{"id":16153,"date":"2022-07-16T18:58:54","date_gmt":"2022-07-16T18:58:54","guid":{"rendered":"https:\/\/blogs.ugto.mx\/rea\/?p=16153"},"modified":"2022-09-21T21:33:11","modified_gmt":"2022-09-21T21:33:11","slug":"clase-digital-1-introduccion-fundamentos-historia","status":"publish","type":"post","link":"https:\/\/blogs.ugto.mx\/rea\/clase-digital-1-introduccion-fundamentos-historia\/","title":{"rendered":"Clase digital 1. Introducci\u00f3n: Fundamentos, historia"},"content":{"rendered":"\n\n\n<div class=\"wp-block-cover\" style=\"min-height:284px;aspect-ratio:unset;\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-40 has-background-dim\"><\/span><img decoding=\"async\" class=\"wp-block-cover__image-background wp-image-17919\" alt=\"\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" data-src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/904884.jpg\" style=\"object-position:49% 48%\" data-object-fit=\"cover\" data-object-position=\"49% 48%\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1280\" height=\"402\" class=\"wp-block-cover__image-background wp-image-17919\" alt=\"\" src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/904884.jpg\" style=\"object-position:49% 48%\" data-object-fit=\"cover\" data-object-position=\"49% 48%\" srcset=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/904884.jpg 1280w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/904884-300x94.jpg 300w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/904884-1024x322.jpg 1024w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/904884-768x241.jpg 768w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/noscript><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<p class=\"has-text-align-center has-base-3-color has-text-color has-large-font-size wp-block-paragraph\">Introducci\u00f3n: Fundamentos, historia<\/p>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"introduccion\">Introducci\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Hola!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Qu\u00e9 alegr\u00eda saber que vas a comenzar un proceso educativo! Me satisface encontrar a personas dedicadas y motivadas en aprender cosas nuevas, as\u00ed es que no te vas a arrepentir, tus esfuerzos ser\u00e1n recompensados.&nbsp; Con mucho \u00e1nimo te doy la bienvenida a esta Unidad de Aprendizaje preparada para ti, espero sea de tu agrado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este curso se denomina <strong>Compiladores<\/strong> y en \u00e9l aprenderemos conceptos, t\u00e9cnicas, herramientas y m\u00e9todos de dise\u00f1o e implementaci\u00f3n de compiladores.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los lenguajes de programaci\u00f3n permiten a los programadores escribir programas de computadora. La mayor\u00eda de los programas que se ejecutan en las computadoras fueron escritos en alg\u00fan lenguaje de programaci\u00f3n, de hecho, muy pocos programas a\u00fan son escritos en lenguaje ensamblador.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para un ingeniero de sistemas computacionales es importante saber c\u00f3mo desarrollar un compilador para una nueva plataforma en la cual no exista un compilador. Adem\u00e1s, el dise\u00f1o de compiladores utiliza t\u00e9cnicas que tambi\u00e9n son aplicables a otros dominios de ciencias computacionales como: lenguajes de programaci\u00f3n, arquitectura de computadoras, teor\u00eda de los lenguajes, algoritmos, e ingenier\u00eda de software.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para comprender c\u00f3mo funciona un compilador es necesario conocer sus fases. La raz\u00f3n por la cual el procesamiento del c\u00f3digo fuente se divide en an\u00e1lisis l\u00e9xico y sint\u00e1ctico es que de esta manera el procesamiento es m\u00e1s simple. El an\u00e1lisis sint\u00e1ctico directo del c\u00f3digo fuente se volver\u00eda muy complicado debido a las variaciones que puede presentar el mismo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los compiladores para los lenguajes de programaci\u00f3n son aplicaciones muy complejas, que pueden comprender m\u00e1s de un mill\u00f3n de l\u00edneas de c\u00f3digo y su desarrollo puede tomar bastante tiempo. Por lo tanto, el desarrollo de un compilador requiere el uso de herramientas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para comprender c\u00f3mo funciona la herramienta Lex\/flex, es necesario entender lo que son las expresiones regulares. Tambi\u00e9n, es conveniente conocer c\u00f3mo se implementa un analizador l\u00e9xico para casos en los cuales no exista esa herramienta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En esta primera sesi\u00f3n veremos los conceptos b\u00e1sicos de los compiladores, las razones que condujeron a su desarrollo, y su historia. Enseguida, veremos cu\u00e1les son las diferencias, ventajas y desventajas entre compiladores e int\u00e9rpretes. Luego veremos qu\u00e9 otras herramientas est\u00e1n relacionadas con los compiladores.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Empecemos y buena vibra!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"desarrollo-del-tema\">Desarrollo del tema <\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 es un compilador?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Los lenguajes de programaci\u00f3n permiten a los programadores escribir programas de computadora. La mayor\u00eda de los programas que ejecutan las computadoras de hoy fueron escritos en alg\u00fan lenguaje de programaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para poder ejecutar un programa, \u00e9ste debe ser traducido a una forma adecuada para su ejecuci\u00f3n por la computadora (lenguaje de m\u00e1quina), Las aplicaciones llamadas compiladores son capaces de efectuar esa traducci\u00f3n.<\/p>\n\n\n\n<div class=\"wp-block-columns has-base-2-background-color has-background is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" data-src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/3597095-1024x682.jpg\" alt=\"\" class=\"wp-image-17921\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"682\" src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/3597095-1024x682.jpg\" alt=\"\" class=\"wp-image-17921\" srcset=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/3597095-1024x682.jpg 1024w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/3597095-300x200.jpg 300w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/3597095-768x512.jpg 768w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/3597095-272x182.jpg 272w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/3597095.jpg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/noscript><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\">El compilador, junto con el int\u00e9rprete, y el ensamblador forman parte de los procesadores de lenguaje. El compilador es un programa que puede leer un programa escrito en un lenguaje fuente y traducirlo a un programa equivalente en un lenguaje objetivo.<br>El int\u00e9rprete tambi\u00e9n puede traducir un programa escrito en un lenguaje fuente pero en vez de generar un programa objeto, lo ejecuta inmediatamente.<\/p>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPor qu\u00e9 los compiladores? Breve historia.<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Con el desarrollo de la primera computadora de programa almacenado en 1948 surgi\u00f3 la necesidad de escribir secuencias de c\u00f3digos o programas. Esos primeros programas eran escritos en lenguaje de m\u00e1quina: c\u00f3digos num\u00e9ricos representando operaciones de la computadora. La escritura de programas en lenguaje de m\u00e1quina era muy tediosa y se llevaba bastante tiempo. Por esas razones, tiempo despu\u00e9s los programas empezaron a escribirse en lenguaje ensamblador.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un ensamblador es un programa que traduce un c\u00f3digo en lenguaje ensamblador a c\u00f3digo de lenguaje de m\u00e1quina. El lenguaje ensamblador reduce el tiempo para escribir programas, pero aun as\u00ed es dif\u00edcil de escribir y de entender. Por esa raz\u00f3n, el siguiente paso fueron los lenguajes de programaci\u00f3n de alto nivel. El primer lenguaje de programaci\u00f3n de alto nivel, Short code, fue creado por Mauchly en 1949, y su int\u00e9rprete fue creado por Schmitt en 1950.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los programas interpretados eran mucho m\u00e1s lentos que en lenguaje de m\u00e1quina. El primer compilador, A0, fue creado por Hopper en 1952. El primer compilador de uso amplio, Fortran, fue creado por Backus en 1954. Los programas compilados eran m\u00e1s r\u00e1pidos que los interpretados. El sistema operativo UNIX era escrito en ensamblador y era muy pesado reescribirlo para otra computadora. Entonces, el compilador de C fue creado por Ritchie en 1972 para reescribir el UNIX.<\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" data-src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/Grace-Hopper_-b-1024x684.jpg\" alt=\"\" class=\"wp-image-17941\" width=\"768\" height=\"513\" \/><noscript><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/Grace-Hopper_-b-1024x684.jpg\" alt=\"\" class=\"wp-image-17941\" width=\"768\" height=\"513\" srcset=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/Grace-Hopper_-b-1024x684.jpg 1024w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/Grace-Hopper_-b-300x200.jpg 300w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/Grace-Hopper_-b-768x513.jpg 768w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/Grace-Hopper_-b-1536x1026.jpg 1536w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/Grace-Hopper_-b-272x182.jpg 272w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/Grace-Hopper_-b.jpg 1920w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/noscript><figcaption><strong>Imagen 1.<\/strong> Grace Hopper&nbsp;es considerada la madre de la programaci\u00f3n inform\u00e1tica y&nbsp;cre\u00f3&nbsp;el&nbsp;Lenguaje&nbsp;Com\u00fan Orientado a Negocios (COBOL, por sus siglas en ingl\u00e9s): el primer&nbsp;lenguaje&nbsp;complejo de ordenador.<\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">Compilador contra int\u00e9rprete:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Los programas compilados son m\u00e1s r\u00e1pidos que los programas interpretados. Esto es debido a que el programa compilado no se vuelve a traducir mientras que el programa interpretado tiene que volverse a traducir para ejecutar el programa. Los programas interpretados son m\u00e1s f\u00e1ciles de depurar y pueden ser corregidos sobre la marcha. En cambio, los programas compilados primero deben ser escritos para generar el programa como archivo ejecutable y enseguida poder ejecutarlo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fases de la compilaci\u00f3n:<\/h3>\n\n\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-304\" class=\"h5p-iframe\" data-content-id=\"304\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"Fases de la compilaci\u00f3n\"><\/iframe><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Herramientas relacionadas:<\/h3>\n\n\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-305\" class=\"h5p-iframe\" data-content-id=\"305\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"Herramientas relacionadas:\"><\/iframe><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\">Conclusi\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para poder ejecutar un programa de computadora, \u00e9ste debe ser traducido a una forma adecuada para su ejecuci\u00f3n por la computadora (lenguaje de m\u00e1quina), Las aplicaciones llamadas compiladores son capaces de efectuar esa traducci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El compilador es una herramienta indispensable para el desarrollo de software, sin esta herramienta la programaci\u00f3n es muy dif\u00edcil, laboriosa, lenta y propensa a errores (bugs).&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El compilador e int\u00e9rprete son procesadores de lenguaje y por lo tanto comparten muchas de sus operaciones. Las fases de la compilaci\u00f3n son: an\u00e1lisis l\u00e9xico, an\u00e1lisis sint\u00e1ctico, an\u00e1lisis sem\u00e1ntico, generaci\u00f3n de c\u00f3digo intermedio, optimizaci\u00f3n de c\u00f3digo y generaci\u00f3n de c\u00f3digo. Durante el an\u00e1lisis l\u00e9xico, el programa fuente es dividido en una secuencia de unidades llamadas tokens. Durante el an\u00e1lisis sint\u00e1ctico, los tokens son agrupados para formar unidades sint\u00e1cticas. El an\u00e1lisis sem\u00e1ntico verifica que el \u00e1rbol sint\u00e1ctico cumpla con las reglas del lenguaje.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los programas compilados son m\u00e1s r\u00e1pidos que los programas interpretados. Esto es debido a que el programa compilado no se tiene que volver a traducir. En cambio, el programa interpretado tiene que volverse a traducir l\u00ednea por l\u00ednea cada vez que se necesite ejecutar el programa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los programas interpretados son m\u00e1s f\u00e1ciles de depurar y pueden ser corregidos sobre la marcha. En cambio, los programas compilados primero deben ser escritos y luego traducidos para poderse ejecutar y depurar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En una plataforma dada, los compiladores se utilizan junto con otras herramientas como son: editores de c\u00f3digo, preprocesadores, ensambladores, enlazadores y depuradores. Existen entornos de desarrollo de software que incluyen todas esas herramientas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con esto llegamos al final de la sesi\u00f3n, \u00bfQu\u00e9 te pareci\u00f3? Espero que muy bien pues de aqu\u00ed partimos para entender lo siguiente. Para concluir adecuadamente la clase, se debe cumplir con las tareas propuestas para demostrar tu aprendizaje y seguir avanzando en tu&nbsp; curso. Te espero en la segunda sesi\u00f3n, hasta pronto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"fuentes-de-informacion\">Fuentes de informaci\u00f3n<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>The First Programming Languages: Crash Course Computer Science #11 (2:25-10:30):<br>URL: https:\/\/www.youtube.com\/watch?v=RU1u-js7db8\u00a0 <\/li><li>P. A. Villalta (Pavillalta). Compiladores e int\u00e9rpretes (Principal) \u2013 Blog de Tecnolog\u00eda (CC BY-NC-ND 3.0)<br>URL:https:\/\/www.postecnologia.com\/2013\/11\/compiladores-e-interpretes-principal.html\u00a0 <\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n \u00a1Hola! \u00a1Qu\u00e9 alegr\u00eda saber que vas a comenzar un proceso educativo! Me satisface encontrar a personas dedicadas y motivadas en aprender cosas nuevas, as\u00ed es que no te vas a arrepentir, tus esfuerzos ser\u00e1n recompensados.&nbsp; Con mucho \u00e1nimo te doy la bienvenida a esta Unidad de Aprendizaje preparada para ti, espero sea de tu &#8230; <a title=\"Clase digital 1. Introducci\u00f3n: Fundamentos, historia\" class=\"read-more\" href=\"https:\/\/blogs.ugto.mx\/rea\/clase-digital-1-introduccion-fundamentos-historia\/\" aria-label=\"Leer m\u00e1s sobre Clase digital 1. Introducci\u00f3n: Fundamentos, historia\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":142,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_crdt_document":"","episode_type":"","audio_file":"","podmotor_file_id":"","podmotor_episode_id":"","cover_image":"","cover_image_id":"","duration":"","filesize":"","filesize_raw":"","date_recorded":"","explicit":"","block":"","itunes_episode_number":"","itunes_title":"","itunes_season_number":"","itunes_episode_type":"","footnotes":""},"categories":[180,19,471],"tags":[41,472,473],"class_list":["post-16153","post","type-post","status-publish","format-standard","hentry","category-cideap","category-ingenieria-en-sistemas-computacionales","category-uda-compiladores","tag-clase-digital","tag-iili06025","tag-jose-ruiz-pinales"],"acf":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts\/16153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/users\/142"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/comments?post=16153"}],"version-history":[{"count":3,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts\/16153\/revisions"}],"predecessor-version":[{"id":19136,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts\/16153\/revisions\/19136"}],"wp:attachment":[{"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/media?parent=16153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/categories?post=16153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/tags?post=16153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}