Prueba de Software https://sg.com.mx/ en Modelos de Calidad para Prueba de Software https://sg.com.mx/revista/23/modelos-de-calidad-para-prueba-de-software <span class="field field--name-title field--type-string field--label-hidden">Modelos de Calidad para Prueba de Software</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/1" lang="" about="/user/1" typeof="schema:Person" property="schema:name" datatype="" class="username">sg</a></span> <span class="field field--name-created field--type-created field--label-hidden">Thu, 01/07/2021 - 14:48</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/23" hreflang="und">SG #23</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/secci%C3%B3n-revista/prueba-software" hreflang="und">Prueba de Software</a></li> </ul> </div> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Autor</h3> <ul class='links field__items'> <li><a href="/buzz/autores/luis-vinicio-leon-carrillo" hreflang="und">Luis Vinicio León Carrillo</a></li> <li><a href="/buzz/autores/sandra-berenice-ruiz-eguino" hreflang="und">Sandra Berenice Ruiz Eguino</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><h3>Constituyentes Fundamentales de los Modelos de Calidad Especializados en Prueba de Software</h3> <p>En la edición agosto-octubre 2008 mencionamos que los modelos de calidad (MC) deben proporcionar un marco de referencia tanto para diagnosticar las capacidades de una organización, como para diseñar y ejecutar planes de mejora. Dijimos que los MC deben ser completos, consistentes y objetivos, y que deben proporcionar una manera rápida de obtener una evaluación inicial de capacidades.<br /> <br /> También comentamos que los MC, incluidos los especializados en prueba de software, suelen tener una estructura matricial como la figura 1, e hicimos un muy breve análisis de varios de ellos. Ahora profundizaremos en la estructura de los modelos especializados en prueba de software (MCEP).<!--break--></p> <h3>Elementos fundamentales de un MCEP</h3> <p>Haciendo un análisis de nuestra experiencia en consultoría, diagnosticando y ayudando a mejorar organizaciones de prueba, y de lo publicado en la literatura especializada, vemos que las áreas listadas abajo son de las más relevantes y comunes a una proporción significativa de (MCEP):</p> <ol> <li>Proceso de prueba</li> <li>Estrategia de pruebas</li> <li>Punto de arranque de las pruebas</li> <li>Métricas</li> <li>Personal del área de pruebas</li> <li>Posición en el organigrama del área de prueba</li> <li>Comunicación y reportes</li> <li>Administración de defectos</li> <li>Administración del testware</li> <li>Infraestructura tecnológica para probar</li> </ol> <p class="text-align-center"><br /> CMMI y MoProSoft no incluyen este núcleo, razón por la cual no nos fue útil en nuestros esfuerzos por mejorar las capacidades de prueba de software, como comentamos en el número antepasado.</p> <p>Es también común que los MCEP midan los avances en cuatro ó cinco niveles. Varios de ellos utilizan subniveles, lo que en la práctica resulta de mucha utilidad, porque los pasos de mejora pueden ser más pequeños y detallados.</p> <p>Los MCEP deben tomar en cuenta, tanto el caso de que la organización de prueba se encuentre dentro de una empresa de desarrollo de software, como el de que forme parte de una empresa especializada en prueba o calidad. Igualmente deben mostrar diferencias entre los casos en que se prueba software convencional, de aquéllos en que lo que se evalúa, si es software crítico (aquél en el que si falla, alguien se muere).</p> <p class="text-align-center"><br /> <br /> <img alt="" height="386" src="http://www.sg.com.mx/images/stories/sg23/tabla_psw_.jpg" width="644" /><br /> <br /> <em>Figura 1. Estructura matricial.</em></p> <h3>Aplicación de esos elementos</h3> <p>En nuestra experiencia en los diagnósticos y ayuda a mejorar organizaciones de pueba hemos encontrado útil comenzar a abordar las áreas del MCEP antes mencionadas, en el orden que muestra la siguiente figura, prestando atención primero a áreas de capas interiores para luego, sin dejar de trabajar en esas, comenzar a abordar las de la siguiente capa exterior.</p> <p class="text-align-center"><br /> <img alt="" height="350" src="http://www.sg.com.mx/images/stories/sg23/figura_psw.jpg" width="500" /><br /> <em>Figura 2. Áreas en capas.</em></p> <p>Lo vemos así, porque es muy común encontrar organizaciones de prueba con fuertes carencias en la definición de su proceso, en el diseño de una estrategia que combine adecuadamente técnicas de prueba, y en la administración de los defectos que se detectan, lo que dificulta mucho avanzar con paso firme. Podemos considerar estas primeras áreas como asépticas.</p> <p>Una vez cubiertos los fundamentos anteriores podemos ocuparnos también de que el equipo de pruebas tenga una posición adecuada en el organigrama (en particular, buscando que no dependa de un directivo responsable de entregar en tiempo y forma, desarrollos de software, para evitar la situación de ser “juez y parte”); de que cuente con el personal suficiente en cantidad (aproximadamente 25% del total de los recursos asignados al desarrollo de software) y en calidad (selección y entrenamiento apropiados); de que se administre adecuadamente los insumos y productos de las pruebas (y evitar estar probando una versión no actual del software); y de que se cuente con un laboratorio de pruebas adecuado.</p> <p>En una tercera fase podemos trabajar también en recabar y explotar sistemáticamente métricas; en que las pruebas comiencen más temprano en el ciclo de desarrollo; y en que las labores y los resultados de las pruebas resulten de utilidad a un grupo mayor de roles en la organización.</p> <p>Un aspecto muy importante a considerar al diseñar el plan de mejora es la recuperación de la inversión, lo que induce la pregunta: ¿cuál es la secuencia de pasos que más conviene para la organización en sus circunstancias particulares?</p> <p>Continuaremos con estos temas en el próximo número.</p> <h3>Invitación</h3> <p>En marzo tendremos como invitado en e-Quallity a un experto internacional, con quien ofreceremos pláticas sobre temas relacionados con los MCEP en el D.F., Monterrey y Guadalajara. Si tienes interés en asistir, escribe a contact@e-quallity.net con el encabezado “Plática con Expertos”.<br /> <br /> &nbsp;</p> </div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>Luis Vinicio León Carrillo es actualmente Director General de e-Quallity, empresa especializada en prueba de software, de la que es co-fundador. Fue profesor-investigador en el ITESO durante varios lustros, que incluyeron una estancia de posgrado en prueba de software en Alemania, en la que abordó aspectos formales de esa disciplina. Es autor de varias publicaciones nacionales e internacionales, e invitado frecuente en eventos relacionados con la prueba de software<br /> <br /> Berenice Ruíz Eguino es consultora de e-Quallity en proyectos de mejora de organizaciones de prueba. A lo largo de su trayectoria profesional ha actuado también como tester senior, administradora de proyectos de prueba nacionales e internacionales, y directora de operaciones. Ha sido profesora de la Universidad Autónoma de Guadalajara, institución en la que realizó sus estudios de Maestría en Ciencias Computacionales.</p> </div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Thu, 07 Jan 2021 20:48:52 +0000 sg 9951 at https://sg.com.mx https://sg.com.mx/revista/23/modelos-de-calidad-para-prueba-de-software#comments Formal Testing: Un enfoque de pruebas de largo alcance https://sg.com.mx/articulos/formal-testing-un-enfoque-de-pruebas-de-largo-alcance <span class="field field--name-title field--type-string field--label-hidden">Formal Testing: Un enfoque de pruebas de largo alcance</span> <div class="images-container clearfix"> <div class="image-preview clearfix"> <div class="image-wrapper clearfix"> <div class="field field--name-field-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/2020-12/testing-diagram.png" width="1305" height="982" alt="" typeof="foaf:Image" /> </div> </div> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/1" lang="" about="/user/1" typeof="schema:Person" property="schema:name" datatype="" class="username">sg</a></span> <span class="field field--name-created field--type-created field--label-hidden">Sun, 12/27/2020 - 10:23</span> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/secci%C3%B3n-revista/prueba-software" hreflang="und">Prueba de Software</a></li> </ul> </div> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Autor</h3> <ul class='links field__items'> <li><a href="/buzz/autores/luis-vinicio-leon-carrillo" hreflang="und">Luis Vinicio León Carrillo</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Me da mucho gusto volver a escribir para ustedes por este medio, estimados lectores, luego de un receso de aproximadamente dos años.</p> <p>Les escribo esta vez porque considero importante platicarles de algo que ahora veo con bastante claridad que puede ser muy relevante en la industria mundial de la prueba de software durante los siguientes años.</p> <p>Como quizás recuerden, comencé a escribir en Software Gurú en 2006 a través de la columna “La Prueba de Software”. Para ese año ya tenía ciertos conocimientos y experiencia en esa disciplina: había hecho un posgrado en Alemania, realizado investigación aplicada en el ITESO, asistido a varios congresos en Europa y EEUU, y co-fundado e-Quallity. Durante 5 años estuve escribiendo sobre la prueba de software como se hacía en el mundo, que era, en esencia, como se llevaba a cabo desde hacía varios lustros.</p> <p>Después de un receso de 4 años, de 2015 a 2018 estuve escribiendo la columna “La prueba de software y los special purpose lenguajes” con el objetivo de mostrar cómo estos lenguajes pueden incrementar la productividad en la industria del software en general y en la de la prueba en particular, porque veía que sobre esta idea estaban gestándose planteamientos que podrían sentar las bases para nuevos enfoques en la Prueba de Software. </p> <p>Desafortunadamente surgió la discontinuidad en la revista lo cual, aunado a otras cosas, me complicó continuar escribiendo. Con este artículo pretendo reducir esa brecha.</p> <p>Así como lo escribimos en <a href="https://sg.com.mx/revista/4/fundamentos-prueba-software-conceptos-justificacion-y-alcance">SG #4</a>, hoy seguimos viendo que la Prueba de Software involucra…</p> <p><em>un <strong>proceso</strong> en el que se revisa el sistema a probar (el <strong>SUT</strong>, System Under Testing) bajo condiciones definidas explícitamente, aplicándole (eventualmente con apoyo de software especializado) un conjunto de estímulos (<strong>casos de prueba</strong>) obtenidos de manera sistemática utilizando técnicas apropiadas, con el objetivo de detectar niveles inadecuados de <strong>calidad</strong>. </em></p> <p><em>Este proceso debe llevarse a cabo disciplinadamente, y respaldarse en métricas bien definidas. Todas estas actividades y sus resultados deben ser documentados sistemáticamente, en especial las <strong>fallas</strong> detectadas.</em></p> <p>Ahora bien: los SUT que probamos son objetos formales, en el sentido de que fueron desarrollados utilizando algún lenguaje de programación (un tipo especial de Lenguaje Formal) y son por tanto sujetos a compilación; pero hoy en día ese proceso de compilación que se realiza sobre código escrito en un Lenguaje de Programación se extiende a otros Lenguajes de Computadora como los de Especificación, de Arquitectura y de Documentación, posibilitando una automatización y un reuso mayores, más inteligentes y de mayor alcance.</p> <p>En <a href="https://sg.com.mx/revista/30/estado-arte-prueba-software">SG #30</a> hablamos de los Métodos Formales. Vimos que en ellos se utilizan varios Computer Languages para “desarrollar software libre de defectos por construcción” y enfatizamos su relevancia para el futuro de mediano y largo plazo debido a su gran impacto potencial. Es una disciplina en la que se ha trabajado desde hace más de 60 años y ha generado conceptos, técnicas y procesos que han sido de mucha utilidad en distintas áreas de la industria del software.</p> <p>Pues bien, hoy el futuro nos está alcanzando y tenemos “Formal Testing”, un enfoque integrador que describiremos a continuación, de muy largo alcance, que incorpora elementos provenientes de la disciplina de los Métodos Formales.</p> <h3>Marco conceptual del Formal Testing</h3> <p>El Formal Testing (Pruebas Formales) es un enfoque en el cual, para la realización de actividades de pruebas, se usan de manera extensiva, intensiva e integrada <a href="https://sg.com.mx/revista/55/prueba-software-lenguajes-computaci-n">Computer Languages</a>, una clase especial de <a href="https://sg.com.mx/revista/49/special-purpose-languages-parte-2">Lenguajes Formales</a> que tienen la particularidad de poder ser procesados por <a href="https://sg.com.mx/revista/52/special-purpose-languages-parte-4">Intérpretes o Compiladores</a> de manera eficiente.</p> <p>Vamos a describir este enfoque yendo del centro hacia afuera en la figura que se muestra a continuación, en la cual…</p> <ul> <li>el círculo y los dos hexágonos centrales concéntricos contienen las disciplinas fundamentales del Formal Testing;</li> <li>los hexágonos inferiores alrededor de los hexágonos centrales contienen prácticas que se aplican comúnmente en Formal Testing;</li> <li>los triángulos que parten de los hexágonos inferiores contienen productos obtenidos de aplicar las prácticas;</li> <li>los hexágonos y los triángulos superiores contienen elementos que se describirán más adelante;</li> <li>“Ls” significa “languages”.</li> </ul> <p> <br />  <img alt="testing diagram" data-entity-type="file" data-entity-uuid="081fc54b-d6a7-49e9-9c0d-2b46349abcbc" src="/sites/default/files/inline-images/testing-diagram.png" style="width:100%; height: auto;" /></p> <h3 style="margin-bottom: 10px;">Descripción de Formal Testing</h3> <p style="margin-bottom:4px; text-align:justify">Como se muestra en la figura, en Formal Testing se parte de la base de los Computer Languages, y sobre ella se erigen tres grandes prácticas genéricas relacionadas con actividades fundamentales de pruebas, a partir de las cuales se genera testware. Estas prácticas genéricas son:</p> <ol> <li>La definición de Procesos utilizando <a href="https://sg.com.mx/revista/31/tmmi-un-modelo-especializado-pruebas">Lenguajes de Definición de Procesos</a>, <a href="https://sg.com.mx/revista/54/la-prueba-software-y-los-special-purpose-languages-0">Lenguajes Naturales Restringidos</a>, y <a href="https://sg.com.mx/revista/55/prueba-software-lenguajes-computaci-n">Lenguajes de Documentación</a>. Esto posibilita, entre otras cosas: <ol style="list-style-type:lower-alpha"> <li>La adecuación automática de sistemas como los de Work-Flow, que implementen el proceso especificado en el PDL para que los testers lo apliquen utilizando componentes parametrizados de esos sistemas.</li> <li>La generación automática de documentación sobre el proceso (v.gr. representaciones gráficas parciales) o de perfiles de testers involucrados en ese proceso (v.gr. en lenguaje natural restringido).</li> <li>La optimización de recursos (tiempo, en particular) en proyectos que se ejecutan siguiendo el proceso, utilizando métricas de productividad y restricciones de cada proyecto (como tiempo y dinero).</li> </ol> </li> <li>El desarrollo de muchos de los casos de prueba de Caja Negra utilizando Lenguajes de Especificación (ver SG#55), con los cuales se desarrollan modelos del producto a probar para que a partir de ellos se generen casos de prueba (sub-enfoque conocido como Formal Model Based Testing). Esto abre la posibilidad de automatizar, entre otras cosas: <ol style="list-style-type:lower-alpha"> <li>La generación de casos de prueba, en particular de Perfomance, de Unidad, de Integración y de Sistema, tanto manuales (en algún lenguaje natural restringido) como automatizadas (en algún Scripting Language).</li> <li>La minimización del conjunto de casos de prueba generados, la secuenciación de los mismos, y su eventual concretización (si se generaron casos de prueba abstractos, i.e. en el Lenguaje de Especificación).</li> <li>La estimación del esfuerzo de pruebas requerido para un proyecto en cuestión, considerando métricas de los perfiles de los testers involucrados y los casos de prueba generados.</li> </ol> </li> <li>La realización de muchas de las pruebas de Caja Blanca utilizando componentes de Compiladores (como analizadores léxicos, sintácticos y semánticos) para hacer Análisis del Código del programa (escrito en algún Lenguaje de Programación), de la arquitectura (escrita en algún Lenguaje de Arquitectura), o de la especificación del producto a probar (escrita en algún Lenguaje de Especificación). Esto hace posible: <ol style="list-style-type:lower-alpha"> <li>Encontrar inconsistencias, errores u omisiones en el código (algo que se va dificultando a los humanos a medida que el código se vuelve más extenso y complejo).</li> <li>Generar métricas para guiar actividades de pruebas (como las de complejidad; ver SG-2008Nov), que permitan por ejemplo probar proporcionalmente más aquellos componentes que son más complejos.</li> <li>Detectar y mostrar las posibilidades de propagación de problemas entre distintos niveles de abstracción (algo aún más difícil para los humanos que lo mencionado en el inciso a).</li> </ol> </li> </ol> <p>Adicionalmente a estas prácticas genéricas, cada organización puede desarrollar y aplicar prácticas específicas para cubrir sus necesidades con Computer Languages particulares (eventualmente propietarios). Precisamente para estas prácticas específicas dejamos en la figura los hexágonos superiores punteados y sus correspondientes triángulos.</p> <h3>Impacto del Formal Testing</h3> <p>En alguna columna mencionamos que con un Computer Language podemos encapsular conocimiento de una disciplina. Con Formal Testing los testers tienen a su alcance de manera integrada conocimiento de varias actividades centrales de prueba de software, encapsulado en forma de varios Computer Languages.  </p> <p>Esto habilita por un lado una automatización de orden superior, pues se cuenta con información altamente estructurada (cadenas que son elementos de <a href="https://sg.com.mx/revista/51/special-purpose-languages-parte-3">Lenguajes Libres de Contexto</a>), y por otro una mayor automatización de más actividades en áreas de proceso de <a href="https://sg.com.mx/revista/23/modelos-de-calidad-para-prueba-de-software">Modelos de Calidad Especializados en Pruebas</a>. Todo ello facilita un incremento significativo de la productividad, pues  –entre otras cosas–  muchos casos de prueba de caja negra se pueden desarrollar más rápidamente, de manera más ordenada, y con mayor visibilidad y flexibilidad sobre ellos (v.gr. es posible seleccionar solo un subconjunto de ellos), y muchas pruebas de caja blanca se pueden llevar a cabo automáticamente, con resultados que pueden utilizarse para distribuir eficientemente el esfuerzo de pruebas.</p> <p>Los beneficios de las prácticas del Formal Testing son acumulativos y pueden agregar valor a lo largo de todo el proceso de pruebas.</p> <p style="margin-bottom:10px"><span style="font-size:12pt"><span style="background:white"><span style="font-family:&quot;Times New Roman&quot;,serif"><b><span lang="ES-MX" style="font-family:&quot;Calibri&quot;,sans-serif" xml:lang="ES-MX"><span style="color:black">Bibliografía</span></span></b></span></span></span></p> <p style="text-align:justify"><span style="font-size:12pt"><span style="background:white"><span style="font-family:&quot;Times New Roman&quot;,serif"><span lang="ES-MX" style="font-size:10.0pt" xml:lang="ES-MX"><span style="font-family:&quot;Calibri&quot;,sans-serif"><span style="color:black">Para profundizar en los temas centrales aquí mencionados pueden consultar las columnas referidas en el texto. Si desean profundizar más, he aquí una lista adicional de referencias:</span></span></span></span></span></span></p> <ol> <li style="margin-bottom:8px; text-align:justify"><span style="font-size:12pt"><span style="background:white"><span style="font-family:&quot;Times New Roman&quot;,serif"><span style="font-size:10.0pt"><span style="font-family:&quot;Calibri&quot;,sans-serif"><span style="color:black">Wing, J.: <i>A Specifier’s Introduction to Formal Methods</i>. </span></span></span><i><span lang="ES-MX" style="font-size:10.0pt" xml:lang="ES-MX"><span style="font-family:&quot;Calibri&quot;,sans-serif"><span style="color:black">IEEE Computer</span></span></span></i><span lang="ES-MX" style="font-size:10.0pt" xml:lang="ES-MX"><span style="font-family:&quot;Calibri&quot;,sans-serif"><span style="color:black">, páginas 8-24; Septiembre de 1990</span></span></span></span></span></span></li> <li style="margin-bottom:8px; text-align:justify"><span style="font-size:12pt"><span style="background:white"><span style="font-family:&quot;Times New Roman&quot;,serif"><span style="font-size:10.0pt"><span style="font-family:&quot;Calibri&quot;,sans-serif"><span style="color:black">Hopcroft, J., Motwani, R., Ullman, J.: <i>Introduction to Automata Theory, Languages and Computation</i>. </span></span></span><span lang="ES-MX" style="font-size:10.0pt" xml:lang="ES-MX"><span style="font-family:&quot;Calibri&quot;,sans-serif"><span style="color:black">Pearson Education Limited; 2014.  </span></span></span></span></span></span></li> <li style="margin-bottom:8px; text-align:justify"><span style="font-size:12pt"><span style="background:white"><span style="font-family:&quot;Times New Roman&quot;,serif"><span style="font-size:10.0pt"><span style="font-family:&quot;Calibri&quot;,sans-serif"><span style="color:black">Aho, A., Lam, M., Sethi, R., Ullman, J.: <i>Compilers: Principles, Techniques and Tools</i> (<i>Second Edition</i>). </span></span></span><span lang="ES-MX" style="font-size:10.0pt" xml:lang="ES-MX"><span style="font-family:&quot;Calibri&quot;,sans-serif"><span style="color:black">Pearson Education Limited; 2014. </span></span></span></span></span></span></li> <li style="margin-bottom:8px; text-align:justify"><span style="font-size:12pt"><span style="background:white"><span style="font-family:&quot;Times New Roman&quot;,serif"><span style="font-size:10.0pt"><span style="font-family:&quot;Calibri&quot;,sans-serif"><span style="color:black">Piccineli, G.: <i>A Process decomposition technique for distributed WorkFlow Management</i>. </span></span></span><span lang="ES-MX" style="font-size:10.0pt" xml:lang="ES-MX"><span style="font-family:&quot;Calibri&quot;,sans-serif"><span style="color:black">Springer Science + Media; 1999.</span></span></span></span></span></span></li> <li style="margin-bottom:8px; text-align:justify"><span style="font-size:12pt"><span style="background:white"><span style="font-family:&quot;Times New Roman&quot;,serif"><span style="font-size:10.0pt"><span style="font-family:&quot;Calibri&quot;,sans-serif"><span style="color:black">Utting, M, Pretschner, A., Legeard, B.: <i>A taxonomy of model-based testing approaches</i>. </span></span></span><span lang="ES-MX" style="font-size:10.0pt" xml:lang="ES-MX"><span style="font-family:&quot;Calibri&quot;,sans-serif"><span style="color:black">John Wiley &amp; Sons, Ltd; 2011. DOI: 10.1002/stvr.</span></span></span></span></span></span></li> <li style="margin-bottom:8px; text-align:justify"><span style="font-size:12pt"><span style="background:white"><span style="font-family:&quot;Times New Roman&quot;,serif"><span style="font-size:10.0pt"><span style="font-family:&quot;Calibri&quot;,sans-serif"><span style="color:black">Kuhn, T.: <i>A Survey and Classification of Controlled Natural Languages</i>. </span></span></span><span lang="ES-MX" style="font-size:10.0pt" xml:lang="ES-MX"><span style="font-family:&quot;Calibri&quot;,sans-serif"><span style="color:black">Association for Computational Linguistics, Volumen 40, Número 1, 2014</span></span></span></span></span></span></li> </ol> </div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>Luis Vinicio León Carrillo es Director General y co-fundador de e-Quallity. Antes de fundar e-Quallity fue profesor-investigador en la universidad jesuita ITESO durante varios lustros, que incluyeron una estancia de posgrado en Alemania, durante la cual abordó aspectos relacionados con el Testing y los formal methods and languages.</p> </div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Sun, 27 Dec 2020 16:23:37 +0000 sg 9946 at https://sg.com.mx El impacto de los lenguajes propietarios de propósito particular: Una visión panorámica https://sg.com.mx/revista/58/el-impacto-de-los-lenguajes-propietarios-de-proposito-particular-una-vision-panoramica <span class="field field--name-title field--type-string field--label-hidden">El impacto de los lenguajes propietarios de propósito particular: Una visión panorámica </span> <div class="images-container clearfix"> <div class="image-preview clearfix"> <div class="image-wrapper clearfix"> <div class="field field--name-field-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/2019-01/sg58-prueba13.png" width="452" height="131" alt="" typeof="foaf:Image" /> </div> </div> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/1" lang="" about="/user/1" typeof="schema:Person" property="schema:name" datatype="" class="username">sg</a></span> <span class="field field--name-created field--type-created field--label-hidden">Tue, 01/15/2019 - 14:51</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/58" hreflang="zxx">SG #58</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/secci%C3%B3n-revista/prueba-software" hreflang="und">Prueba de Software</a></li> </ul> </div> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Autor</h3> <ul class='links field__items'> <li><a href="/buzz/autores/luis-vinicio-leon-carrillo" hreflang="und">Luis Vinicio León Carrillo</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Suele ser difícil percibir el impacto que tienen los lenguajes en nuestra civilización, pues es algo que vivimos cotidianamente. En el ámbito de los lenguajes naturales, Koen DePryck (en su libro sobre “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The Ontology of Language</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">”) nos dice:</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-right: 30.9pt;text-indent: -21.3pt;text-align: justify;padding:0pt 0pt 0pt 21.3pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">“Our language has its historical roots in the world, so that the history of the world is the history of our language, and so that </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">the world is language</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">.”</span></b><br /> &nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-right: 2.55pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Ya en nuestro campo, el reconocido </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">computer scientist</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> C.A.R. Hoare comentó en algún momento, refiriéndose a su método de ordenamiento </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Quick-Sort</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> y después de tomar un curso de Algol-60 (primer lenguaje en ofrecer la posibilidad de escribir subrutinas recursivas):</span></b><br /> &nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-right: 30.9pt;text-indent: -21.3pt;text-align: justify;padding:0pt 0pt 0pt 21.3pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">“It was there that I first learned about recursive procedures and saw how to program the sorting method which I had earlier found such </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">difficulty in explaining</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">.”</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-right: 2.55pt;text-align: justify;">&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-right: 2.55pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Los lenguajes nos proveen de muchas estructuras que facilitan que hagamos eficientemente muchas cosas, pero que al mismo tiempo pueden dificultar ver otras que pudieran ser igualmente importantes. Las estructuras que tenemos a nuestra disposición en un lenguaje (sea artificial o natural) pueden imponer límites a lo que podemos expresar (sea programar o pensar). </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-right: 2.55pt;text-align: justify;"><br /> <b style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">En los últimos números de esta columna hemos abordado los lenguajes formales desde distintos puntos de vista, buscando generar el contexto para mostrar la utilidad y el impacto de contar con lenguajes propietarios en nuestras organizaciones para documentar, especificar, programar, o probar productos de software. En el caso de la programación, el contar con un lenguaje propietario de más alto nivel que el que usa actualmente una organización permitiría destinar más tiempo al diseño del producto que a la escritura del programa, lo que facilitaría el incremento de la calidad; al no ser necesario atender tantos detalles, habría menos probabilidad de introducir errores, lo cual también facilitaría el incremento de la calidad; y al ser estos lenguajes más expresivos, se podría entregar el producto más rápidamente, facilitando el incremento de la productividad. </span></b></p> <p><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">En este número abordaremos un ejemplo con el que buscaremos evidenciar los beneficios anteriores. Para ofrecer aquí la idea adecuadamente, permítannos primero retomar los puntos más relevantes que expusimos en otros números y que contextualizan la presentación del ejemplo.</span></b></p> <h3 dir="ltr">1. Lenguajes - Patrones</h3> <p dir="ltr"><em>Comenzamos abordando el concepto “lenguaje” como algo muy general, en términos de “patrones” en SG#48 (“el número 48 de la revista”):</em></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">En la figura de abajo, consideren que la sustitución de lo que está a la izquierda del símbolo “</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">⇒</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” por lo que está a su derecha ocurre siempre “en paralelo”; es decir: que </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">todas</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> las apariciones de lo que está a la izquierda de “</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">⇒</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” deben sustituirse por lo que está a la derecha </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">simultáneamente</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">. </span></b></p> <div dir="ltr" style="margin-left:29.65pt;"> <table style="border:none;border-collapse:collapse"> <colgroup> <col width="319" /> <col width="85" /> </colgroup> <tbody> <tr style="height:0pt"> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp;</td> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp;</td> </tr> <tr style="height:0pt"> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-indent: -177pt;text-align: right;padding:0pt 0pt 0pt 177pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="33" src="https://lh5.googleusercontent.com/Yf2WNDvSQo8o2sc4hkDJJikfsUDXeyy8-3TZDdaZbI56-XfeQVAlNs24_L4ra-z6QX-6dNKIysOCveH4y3eKjSoSYVVOEVgkmqaZ0OZC4jvp-jxs3oDL3viGr1nStx8OvUAuR4dmMXP6TjmJxw" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="68" /></span></b></p> </td> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp;</td> </tr> <tr style="height:0pt"> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp;</td> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp;</td> </tr> </tbody> </table> </div> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Si aplicamos 3 veces esa regla/patrón (en paralelo) tenemos:</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-indent: -106.2pt;padding:0pt 0pt 0pt 106.2pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="81" src="https://lh5.googleusercontent.com/myKfXmqepwkopn3UFdGmkL4M91Ke9ZQgdTLxHIjRrVkHwcLo5gSE-rqiuTnXSgKlwR6W_20TfIShcS9a2Za6UUy4_oDL5XVoE4Wrm3_FhGNzpPt23MbXXIfAiN-eyrXEgX-Cde4Fsgsi_6G2iQ" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="203" /></span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Como pueden observar, este pequeño patrón, descrito con esa sencilla y única regla, parece describir el crecimiento de una planta (solo en 2 dimensiones). Lenguajes en los que las reglas se aplican en paralelo, se han utilizado para describir fenómenos de este tipo, y han dado lugar a toda una jerarquía de lenguajes conocida como </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Sistemas Lindenmayer</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">L-Systems</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">), los cuales a su vez tienen relación con los fractales (“el todo contenido en cada parte”).</span></b><br /> &nbsp;</p> <h3 dir="ltr">2. Lenguajes formales</h3> <p dir="ltr"><em>Luego, en SG#50, abordamos “lenguaje” desde una perspectiva más bien matemática (algebraica):</em></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Partimos de la definición del concepto de </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">alfabeto</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> como un conjunto finito de caracteres </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">= { b</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">1 </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, b</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">2 &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, …, b</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">m </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">}</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> , y dijimos que &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;tiene una </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">cardinalidad</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (cantidad de elementos) igual a </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">m </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, lo cual escribimos como </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">|</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B|</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> = m</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> .</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;">&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Definimos la operación de </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">concatenación</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> “ </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">⋅</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” &nbsp;sobre caracteres (lo que nos permite construir </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">b</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">5 </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">⋅ b</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">4 </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">⋅ b</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">8 </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">⋅ b</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">8 </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) y sobre conjuntos de caracteres (lo que nos permite construir </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B ⋅ A</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">⋅ D </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">).</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;">&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Luego definimos la </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">exponenciación </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">de la concatenación </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">x</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;"> &nbsp;&nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">sobre un alfabeto </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> como la aplicación de la concatenación </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">x-1</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> veces sobre el alfabeto ( </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B ⋅ B⋅ … ⋅ B</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> , donde</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> B </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;aparece </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">x </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">≥ 0</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;veces).</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;">&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Después definimos la </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">cerradura de Kleene</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">*</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;como la unión de todas las exponenciaciones sobre el alfabeto </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;(</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">*</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;"> &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">= &nbsp;</span><span style="font-size:12pt;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">U</span><span style="font-size:7.199999999999998pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">∞</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">i=0</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;B</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">i</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> ).</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Finalmente definimos que un </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">lenguaje formal</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> sobre un alfabeto </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> &nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">es cualquier </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">subconjunto de </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">*</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">. &nbsp;&nbsp;Definimos la </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">cerradura positiva</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">+</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;como </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">+</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;"> &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">= B</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">⋅ </span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">&nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">*</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;&nbsp;&nbsp;(</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">+</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> contiene cadenas con al menos un caracter).</span></b><br /> &nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-right: 2.55pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Explicitamos que, dado un código ASCII extendido que aquí llamaremos AE, que extienda el usado hoy en día con </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">cualquier</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> cantidad (finita) de caracteres, podemos ver al lenguaje Java como el subconjunto de cadenas de cualquier longitud escritas utilizando ese AE que son aceptadas como “correctas” por el compilador de Java. Lo mismo es cierto si sustituimos “Java” por el nombre de cualquier lenguaje de computación. </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-right: 2.55pt;text-align: justify;">&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-right: 2.55pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">En AE</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">*</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> están incluidos no solo </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">todos</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> los lenguajes de programación existentes y por existir, sino también todos los compiladores (escritos y por escribirse) de todos esos lenguajes. De hecho, en AE</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">*</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> se encuentran </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">todas</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> las cadenas de caracteres que podamos escribir en esa extensión del ASCII, incluyendo los programas “incorrectos” en todos los lenguajes.</span></b><br /> &nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-right: 2.55pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Dijimos que dado un conjunto </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> que tiene </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">i </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">elementos, la </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">cantidad de subconjuntos</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> que pueden formarse sobre </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> es igual a </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">2</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">i </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">. Dijimos también que </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">* </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, la </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Cerradura de Kleene</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> sobre el alfabeto</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> B</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, es un conjunto infinito pero </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">contable</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, porque tiene la misma cardinalidad que el conjunto de los números naturales </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">N</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">. &nbsp;Esto &nbsp;implica en particular que, así como ocurre en el conjunto de los números naturales </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">N</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, dada una de las cadenas de </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">*</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> , siempre podemos definir cuál es la que le sigue y listar sus elementos en orden sin saltarnos alguno (en </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">N </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, dado un número natural </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">y</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, sabemos que el que le sigue es </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">y+1</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">). &nbsp;</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-right: 2.55pt;text-align: justify;">&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-right: 2.55pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">De lo anterior se sigue que la cantidad de lenguajes sobre </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">cualquier</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> alfabeto </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> es igual a </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">2</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">N </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">… El asunto es que </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">2</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">N</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> es una cardinalidad estrictamente mayor que la de </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">N</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (siguiendo el Teorema de Cantor), lo que lo vuelve un conjunto </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">no-contable</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (aquellos conjuntos en los que, dado un elemento </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">x</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, no es posible decir cuál elemento es el que sigue, como en el caso de los números reales </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">R</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">: si tenemos el número 0.0004 no podemos decir que el que le sigue es 0.0005; tampoco que es 0.00041; en realidad, entre </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">cualesquiera</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> 2 números reales hay una cantidad infinita de números reales).</span></b><br /> &nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-right: 2.55pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Una consecuencia importantísima de lo anterior es que la cantidad de lenguajes (=</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">2</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">N</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) que pueden definirse sobre un alfabeto es estrictamente mayor que la cantidad de cadenas (=</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">N</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) que pueden construirse sobre ese alfabeto, así es que: </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">independientemente del tamaño del alfabeto, siempre tendremos lenguajes sobre ese alfabeto para los que no podemos definir un compilador, esto es, siempre habrá lenguajes que no podremos procesar</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">.</span></b></p> <p>&nbsp;</p> <h3>3. Gramáticas</h3> <p dir="ltr"><em>En SG#51, revisamos “lenguaje” desde un punto de vista un poco más “computacional”, pero aún “declarativo”, utilizando reglas (que pueden verse como una abstracción del concepto de patrón):</em></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;">&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Dijimos que podemos definir lenguajes utilizando </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">gramáticas</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, las cuales son cuátruplas de la forma:</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">〈 </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">T, N, S</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">0 </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, R</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> 〉</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;&nbsp;&nbsp;donde </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-left: 14.150000000000006pt;margin-right: 16.75pt;text-indent: -42.55pt;text-align: justify;padding:0pt 0pt 0pt 42.55pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">T</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">es el conjunto de los símbolos terminales del lenguaje (en adelante “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Terminales</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">”); son finalmente los elementos constituyentes de las secuencias de símbolos de una cadena del lenguaje;</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-left: 14.150000000000006pt;margin-right: 16.75pt;text-indent: -42.55pt;text-align: justify;padding:0pt 0pt 0pt 42.55pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">λ</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">es con lo que designamos la “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">cadena nula</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” (aquella que no contiene símbolos); </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-left: 14.150000000000006pt;margin-right: 16.75pt;text-indent: -42.55pt;text-align: justify;padding:0pt 0pt 0pt 42.55pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">N</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">es el conjunto de los símbolos no-terminales del lenguaje (en adelante “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">no-Terminales</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">”); no constituyen necesariamente cadenas finales, pues son definidos en términos de una combinación de Terminales y no-Terminales. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-left: 56.7pt;margin-right: 16.75pt;text-indent: -42.55pt;text-align: justify;padding:0pt 0pt 0pt 42.55pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Nota:</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> En estas definiciones, debe cumplirse que </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">T ∩ N = {} </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">;</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-left: 14.150000000000006pt;margin-right: 16.75pt;text-indent: -42.55pt;text-align: justify;padding:0pt 0pt 0pt 42.55pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">R</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">es el subconjunto del producto cartesiano &nbsp;(</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">T ∪ N</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">)</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">*</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">×</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;(</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">T ∪ N</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">)</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">*</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;que define la relación matemática que denota las reglas de reescritura del lenguaje (en adelante “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Reglas</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">”);</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-left: 14.150000000000006pt;margin-right: 16.75pt;text-indent: -42.55pt;text-align: justify;padding:0pt 0pt 0pt 42.55pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">S</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">0</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">es el elemento distintivo de los no-Terminales llamado “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Símbolo-inicial</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">”, que es con el que inicia el “procesamiento” de </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">R </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">.</span></b></p> <p>&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Escribimos las Reglas utilizando el “meta-lenguaje” (llamado así porque es un lenguaje con el cual definimos lenguajes) llamado BNF (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">ackus-</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">N</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">aur </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">F</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">orm). En él, para cada regla se coloca el primer elemento del producto cartesiano, seguido del símbolo “</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">→</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” seguido del segundo elemento del producto cartesiano.</span></b></p> <p dir="ltr" style="line-height:1.295;margin-top:0pt;margin-bottom:8pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span></b></p> <h3 dir="ltr">4. Jerarquías de Lenguajes</h3> <p dir="ltr"><em>Con la definición anterior, en SG#51 y SG#52 revisamos una Jerarquía de Lenguajes Formales (que dijimos, incluye la Jerarquía de Chomsky):</em></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">La siguiente categorización de lenguajes se hace considerando la complejidad de la estructura de las reglas en la </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">R</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> particular que los define (por cuestiones de espacio, obviaremos algunos detalles):</span></b></p> <ol dir="ltr"> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Llamamos </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">gramáticas regulares</span><span style="font-size:10pt;font-family:Calibri;color:#ff0000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a aquellas cuyas reglas en &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">R</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;sean de la forma &nbsp;&nbsp;&nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A→ B d </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;| </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">d </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;&nbsp;&nbsp;(o menos compleja); y llamamos </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">lenguajes regulares</span><span style="font-size:10pt;font-family:Calibri;color:#ff0000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">(o de </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Tipo 3</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, o </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lgs</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">3</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> de manera corta) a aquellos que puedan definirse utilizando gramáticas regulares. </span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Llamamos </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">gramáticas libres de contexto</span><span style="font-size:10pt;font-family:Calibri;color:#ff0000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a aquellas cuyas reglas en &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">R</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;sean de la forma &nbsp;&nbsp;&nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A→ </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">α</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;(o menos compleja), y </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">lenguajes libres de contexto </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">(o de </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Tipo 2</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, o </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lgs</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">2</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">)</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> a aquellos que puedan definirse utilizando gramáticas libres de contexto.</span></b> <b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Dentro de estos lenguajes existen varias divisiones. Una de las más relevantes es la que diferencia entre los </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">lenguajes determinísticos</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> y los </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">lenguajes no-determinísticos</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (un ejemplo de estos últimos es &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">n</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> b</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">n </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">∪ </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">n</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> b</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">2n &nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, que como podrán intuir, para procesarlo es necesario que el compilador asociado realice </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">backtracking</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">).</span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Llamamos </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">gramáticas sensibles al contexto</span><span style="font-size:10pt;font-family:Calibri;color:#ff0000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a aquellas cuyas reglas en &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">R</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;sean de la forma &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">β</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">1</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">β</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">2</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">→ </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">β</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">1</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">α</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">β</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">2</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">(o menos compleja), donde </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">α</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">≠</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">λ</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> ; y </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">lenguajes sensibles al contexto </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">(o de </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Tipo 1</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, o </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lgs</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">1</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">)</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> a aquellos que puedan definirse utilizando gramáticas sensibles al contexto. Decimos que </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">β</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">1</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> y &nbsp;</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">β</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">2</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> representan el contexto en el que </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;se puede transformar en &nbsp;</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">α</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> .</span></b> <b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Ahora bien, como </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">α</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">≠</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">λ</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> , entonces la suma de la cantidad de Terminales y de no-Terminales en </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">α</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> es mayor o igual a uno; a esta cantidad la llamaremos la </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">longitud</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> de </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">α</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> y la denotamos con|</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">α</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">|. Ahora podemos generar una definición equivalente pero menos restrictiva (aunque no hace evidente el atributo “sensible al contexto”): &nbsp;</span></b><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Llamamos también </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">gramáticas sensibles al contexto</span><span style="font-size:10pt;font-family:Calibri;color:#ff0000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a aquellas cuyas reglas en &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">R</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;sean de la forma &nbsp;&nbsp;&nbsp;</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">θ</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">→ </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">α</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">(o menos compleja), donde </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">θ</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">∈</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">T ∪ N</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">)</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">*</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> , &nbsp;</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">θ</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">≠</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">λ</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;y |</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">θ</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">| </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">≤</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> |</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">α</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">| ; y llamamos </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">lenguajes sensibles al contexto </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a aquellos que puedan definirse utilizando este tipo de gramáticas.</span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Llamamos </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">gramáticas estructuradas por frases </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a aquellas cuyas reglas en &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">R</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;sean de la forma &nbsp;</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">θ</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">→ </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">α</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">(o menos compleja), donde </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">θ</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">∈</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">T ∪ N</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">)</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">*</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;y </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">θ</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">≠</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">λ</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> ; y llamamos </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">lenguajes estructurados por frases </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">(o </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Tipo 0</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, o </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lgs</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">0</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">)</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> a aquellos que puedan definirse utilizando gramáticas estructuradas por frases.</span></b> <b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Dentro de estos lenguajes se encuentra la importantísima clase los </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lenguajes Decidibles</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (o </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Recursivos</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">,</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">o </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lgs</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">dec</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">), que son</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;aquellos para los que es posible construir programas (por ejemplo compiladores) que siempre terminan y anuncian si la cadena es elemento del lenguaje o si no lo es (aunque para ello requieran enormes cantidades de tiempo y/o memoria). Las reglas con las que se definen tienen la misma forma que los </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lgs</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">0</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">. &nbsp;&nbsp;Podemos ver a los </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lgs</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">0</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> como </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">lenguajes semi-decidibles</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">: los programas que los procesan (por ejemplo compiladores) pueden determinar cuando las cadenas sí son elementos del lenguaje, pero cuando no es así continúan su procesamiento indefinidamente (“se ciclan”).</span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Llamamos </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lenguajes Generales</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (o </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lgs</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">gral</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">)</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> a aquellos que incluyen a todos los anteriores y a los que no son susceptibles de ser definidos mediante reglas.</span></b></li> </ol> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><br /> <b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">La Jerarquía muestra un crecimiento significativo en la complejidad de la estructura de las reglas (o dicho de otra manera, una disminución significativa en las restricciones sobre esa estructura). En ella ocurre (obviando algunas precisiones) que &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lgs</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">3</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">⊂≠ </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lgs</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">2</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">⊂≠ </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lgs</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">1</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">⊂≠ </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lgs</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">dec</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">⊂≠ </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lgs</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">0 </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">⊂≠ </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lgs</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">grals</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">.</span></b></p> <p dir="ltr"><em>También revisamos los siguientes lenguajes “prototípicos” expresados en forma algebraica: </em></p> <ul dir="ltr"> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -18pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">L</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">1</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> : &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> m</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> b</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> n</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> c</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> k</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">d</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> i</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, &nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">para </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">m, n, i, k </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">≥</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;0 e independientes entre sí:</span></b></li> </ul> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-indent: -17.4pt;text-align: justify;padding:0pt 0pt 0pt 17.4pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Se trata de una Gramática Regular. Este tipo de gramáticas tienen el mismo poder expresivo para definir lenguajes que las conocidas </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">expresiones regulares</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, y son suficientes para especificar los “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">scanners</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” de los compiladores, los cuales se encargan del análisis lexicográfico.</span></b></p> <ul dir="ltr"> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -18pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">L</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">2</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> : &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> m</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> b</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> i</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> c</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> i</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> d</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> m</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, &nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">para </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">m, i </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">≥</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">0 &nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">que aparecen por pares y están “anidadas”:</span></b></li> </ul> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-indent: -17.4pt;text-align: justify;padding:0pt 0pt 0pt 17.4pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Este es un ejemplo “clásico” de una Gramática Libre de Contexto.</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-indent: -17.4pt;text-align: justify;padding:0pt 0pt 0pt 17.4pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Este tipo de gramáticas tienen el mismo poder expresivo para definir lenguajes que los conocidos </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">grafos de sintaxis</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, y son suficientes para especificar los “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">parsers</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” de los compiladores, los cuales se encargan del análisis sintáctico.</span></b></p> <ul dir="ltr"> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -18pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">L</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">3</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> : &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> m</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> b</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> i</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> c</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> m</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> d</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> i</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, &nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">para </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">m, i </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">≥</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">0</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> , que aparecen por pares pero no están “anidadas”:</span></b></li> </ul> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-indent: -17.4pt;text-align: justify;padding:0pt 0pt 0pt 17.4pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Con este tipo de lenguajes se podrían especificar (al menos buena parte de) los Sistemas de Tipos de los lenguajes de programación, los cuales definen sus aspectos semánticos (de significado, como los del paso de parámetros que mencionamos, o la equivalencia de tipos). Sin embargo, dado que el procesamiento de estos lenguajes es más complejo y costoso en tiempo que el de las Libres de Contexto, y que la mayoría de los constructos de los lenguajes de computación son de este último tipo, los aspectos semánticos se suelen abordar apoyándose en gramáticas Libres de Contexto y en una </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Tabla de Identificadores </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">en la cual suele almacenarse, entre otras cosas, el nombre, la clase (si es variable, procedimiento, función, etc.), el tipo (v.gr. integer, string, </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">〈</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">char, real</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">〉</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">→</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> boolean), y la dirección de cada identificador. </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-indent: -17.4pt;text-align: justify;padding:0pt 0pt 0pt 17.4pt;">&nbsp;</p> <p dir="ltr"><em>Después, en SG#53 mencionamos que existen también otras jerarquías de lenguajes, y revisamos la de las Left-Assotiative-Grammars:</em></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">En nuestra primera columna sobre el tema del desarrollo de lenguajes propietarios mencionamos un enfoque sobre lenguajes formales llamado Sistemas Lindenmayer (proveniente de la Biología), dado nuestro interés en encontrar mecanismos para eficientar el desarrollo de software, en números posteriores estudiamos los lenguajes formales utilizando principalmente los trabajos sobre gramáticas del lingüista Noam Chomsky, las cuales se conocen como Gramáticas Estructuradas por Frase, y en un número reciente presentamos una jerarquía de las mismas. Se presume que, en esa jerarquía, los lenguajes naturales se encuentran en la clase de los Lenguajes Sensibles al Contexto.</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">En realidad, las Gramáticas Estructuradas por Frase son un tipo particular de las llamadas </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Gramáticas Generativas</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, que son sistemas (“recursivos”) de reglas provenientes de trabajos en Lógica Matemática.</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Algunos de los enfoques más relevantes que han sido utilizados para abordar las Gramáticas Generativas son:</span></b></p> <ol style="margin-top:0pt;margin-bottom:0pt;"> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Gramáticas Categóricas</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (“</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C-Grammars</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">”): desarrolladas inicialmente en 1929 por el polaco Lesniesvsky, y aplicadas al los natural lenguajes por primera vez por Bar-Hillel en 1953. </span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Gramáticas Estructuradas por Frase</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">PS-Grammars</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">): basadas en los “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Rewrite Systems</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” de Emil Post desarrollados en 1936, aplicadas a los lenguajes naturales por primera vez por Chomsky en 1957.</span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Gramáticas Asociativas por la Izquierda</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Left-Assotiative-Grammars</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">): desarrolladas en 1985 por Roland Hausser para procesar lenguajes naturales.</span></b></li> </ol> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><br /> <b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Los dos primeros enfoques presentan el problema de que los recursos requeridos (tiempo y/o memoria) para hacer el procesamiento de lenguajes naturales son demasiado grandes como para llevarlos a la práctica. El tercero muestra algunas bondades al respecto.</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Formalmente, una </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Gramática-LA</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (del Inglés </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">L</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">eft-</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">ssociative </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">G</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">rammar</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">LAG</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) es una séptupla de la forma:</span></b><br /> &nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">〈 </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">W, C, LX, CO, RP, S</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">I </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, S</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">F</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> 〉</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;&nbsp;&nbsp;donde </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span></b><br /> &nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-left: 14.150000000000006pt;margin-right: 16.75pt;text-indent: -42.55pt;text-align: justify;padding:0pt 0pt 0pt 42.55pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">W</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">es un conjunto finito de las llamadas </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Word surfaces</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> ;</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-left: 14.150000000000006pt;margin-right: 16.75pt;text-indent: -42.55pt;text-align: justify;padding:0pt 0pt 0pt 42.55pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">es un conjunto finito de </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Category segments</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> ;</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-left: 14.150000000000006pt;margin-right: 16.75pt;text-indent: -42.55pt;text-align: justify;padding:0pt 0pt 0pt 42.55pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">L</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">⊃</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;( </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">W</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">×</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">+ </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) es un conjunto finito conteniendo el </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Léxico</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> ;</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-left: 14.150000000000006pt;margin-right: 16.75pt;text-indent: -42.55pt;text-align: justify;padding:0pt 0pt 0pt 42.55pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">CO</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">= ( </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">co</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">1</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">, …, </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">co</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">n-1 </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) es una secuencia finita de funciones recursivas totales (entiéndase “programas”) de (</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">* </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">×</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">+</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) a (</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">* </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">∪</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">{</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">⊥</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">}</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) &nbsp;llamadas </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Categorial Operations</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> ;</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-left: 14.150000000000006pt;margin-right: 16.75pt;text-indent: -42.55pt;text-align: justify;padding:0pt 0pt 0pt 42.55pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">RP</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">= ( </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">rp</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">1</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">, …, </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">rp</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">n-1 </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) es una secuencia finita ( igualmente larga que </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">CO</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> ) de subconjuntos de </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">n</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">( </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">donde </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">n</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> = </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">{</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> i | 0 </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">≤ </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">i </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&lt; </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">n</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">} ) </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;llamada </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Rule Packages</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> ;</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-left: 14.150000000000006pt;margin-right: 16.75pt;text-indent: -42.55pt;text-align: justify;padding:0pt 0pt 0pt 42.55pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">S</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">I</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">= { (</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> c</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">s1</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;&nbsp;rp</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">s1 </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) … ( </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">c</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">sk </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;&nbsp;rp</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">sk </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) } es un conjunto finito de </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">eStados Iniciales</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, donde cada </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">c</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">∈</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">+</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> y cada </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">rp</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> es un subconjunto de </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">n</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> llamado </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">paquete de reglas de inicio</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">;</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-left: 14.150000000000006pt;margin-right: 16.75pt;text-indent: -42.55pt;text-align: justify;padding:0pt 0pt 0pt 42.55pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">S</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">F</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">= { (</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> c</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">f1</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;&nbsp;rp</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">f1 </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) … ( </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">c</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">fk </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;&nbsp;rp</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">fk </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) } es un conjunto finito de </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">eStados Finales</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> , donde cada </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">c</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">∈</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">*</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> y cada </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">rp </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">∈</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">RP</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> .</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><br /> <b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Así como con las Gramáticas Estructuradas por Frase de Chomsky que estudiamos, &nbsp;en el conjunto de lenguajes generados por </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Gramáticas-LA</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> también tenemos subclases:</span></b></p> <ul style="margin-top:0pt;margin-bottom:0pt;"> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Las</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> Gramáticas-LA</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">generales </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">(</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">llgemeine (general en alemán)</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">), o </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A-LAGs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, corresponden a la definición de arriba.</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Las</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> Gramáticas-LA</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">limitadas</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">ounded</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">linealmente</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, o </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B-LAGs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, son la subclase de las A-LAGs en las cuales la longitud de las categorías está limitada linealmente con respecto a la longitud de la cadena de entrada.</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Las</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> Gramáticas-LA limitadas por una constante</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">onstant</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">), o </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C-LAGs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, son la subclase de las B-LAGs en las cuales la cantidad de cálculos requerida por operaciones categóricas individuales está limitada por una constante.</span></b></li> </ul> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-indent: -36pt;text-align: justify;padding:0pt 0pt 0pt 36pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Dentro de estas C-LAGs tenemos las subclases de </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C3-LAGs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> , </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C2-LAGs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> , y</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> C1-LAGs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> .</span></b><br /> &nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">La siguiente es la relación de las LAGs con la Jerarquía de Chomsky (incluimos algunos aspectos de rendimiento, que eventualmente abordaremos en números posteriores).</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El conjunto de </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Gramáticas-LA</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">… </span></b></p> <ul style="margin-top:0pt;margin-bottom:0pt;"> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -18pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">generales</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> o </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A-LAGs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, aceptan y generan todos los Lenguajes Recursivos (o “Decidibles”), algo relevante, pues como vimos en un número anterior, en la Jerarquía de Chomsky no había un tipo de gramática específica que definiera exactamente este tipo de lenguajes.</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -18pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">bounded</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> o </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">B-LAGs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, aceptan y generan todos los Lenguajes Sensibles al Contexto (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">LSC</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">).</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -18pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">constant</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> o </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C-LAGs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, constan de 3 subclases: </span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C3-LAGs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> contiene los Lenguajes Libres de Contexto (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">LLC</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) más complejos y algunos LSC que son “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">NP-Complete</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” (la clase de problemas para los cuales no se han descubierto algoritmos eficientes que los resuelvan, y se piensan que no existen). Para procesar estos lenguajes se requiere tanto tiempo que hacerlo se vuelve prohibitivo en la práctica (técnicamente: requieren “tiempo exponencial”, lo que significa que pueden procesarse en un tiempo expresado como una base elevada a un exponente el cual está en función de la cantidad de datos de entrada).</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C2-LAGs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> contiene varios LLC “no-deterministas” (su procesamiento implica </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">backtracking</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) y varios LSC simples. Para procesarlos se requiere tiempo polinomial. </span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C1-LAGs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> contiene todos los LLC “deterministas” (no requieren </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">backtracking</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> para procesarlos) y varios LSC simples. Su procesamiento solo requiere tiempo lineal, lo que los vuelve muy útiles en la práctica. </span></b></li> </ul> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><br /> <b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Dijimos que se piensa que en esta jerarquía, los lenguajes naturales están dentro de la clase C1-LAG, lo cual significaría que su procesamiento sí puede realizarse en la práctica, aún con altos volúmenes de datos de entrada.</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;">&nbsp;</p> <h3>5. Semántica formal</h3> <p dir="ltr"><em>Todo el análisis anterior estuvo más bien orientado a la Sintaxis de lenguajes formales, pero en SG#56 también abordamos el tema de la Semántica de los lenguajes formales:</em></p> <p dir="ltr"><b style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">La sintaxis de un lenguaje –que se refiere a su </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">estructura</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">– es un aspecto muy importante del mismo y se utiliza ampliamente en el desarrollo de compiladores. </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:4pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">La “Semántica Formal” –que se refiere al </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">significado</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> de un lenguaje (aunque hay quien dice que “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Semantics is what we have in our minds; when one writes it down, it is not semantics any more.</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">”)– es muy importante también porque agrega precisión a la definición del lenguaje, pero actualmente no es tan común que se utilice en la construcción de compiladores (lo cual puede conducir a que v.gr. un programa dado a 2 compiladores diferentes para el mismo lenguaje tenga comportamientos distintos). </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:4pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">La </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Semántica</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> define el significado de un lenguaje a partir de los constructos del mismo, y con ello también el de los programas escritos en él. Existen varios enfoques para hacerlo; entre los más importantes se encuentran:</span></b></p> <ul dir="ltr"> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 4pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Operacional</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">: se especifica la semántica proporcionando (el código fuente de) un intérprete que define el comportamiento de los programas de ese lenguaje. Este enfoque, al ser tan operativo, no permite razonar sobre el lenguaje (mediante mecanismos lógico-matemáticos).</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Axiomático</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">: la semántica se especifica definiendo una “teoría matemática” para el lenguaje con la cual se puedan probar propiedades de programas escritos en ese lenguaje. Más que en lo que </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">significa</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> el lenguaje, el énfasis está en lo que puede probarse acerca de él. </span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Denotacional</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">: se especifica la semántica asociando a cada constructo del lenguaje un conjunto de funciones matemáticas que definen los significados denotando conjuntos. La semántica está dada en términos de conjuntos, funciones, relaciones, tuplas, predicados, y operaciones sobre estos elementos. Este enfoque tiene un nivel de abstracción aún mayor al del enfoque Axiomático.</span></b></li> </ul> <h3 dir="ltr">6. Máquinas Abstractas y Lenguajes</h3> <p dir="ltr"><em>En SG#54, tomamos un punto de vista muy procedural y revisamos el concepto “lenguaje” a la luz de las llamadas Máquinas con (conjuntos de) Estados Finitos (o Finite States Machines), MEFs, que pueden procesarlos: </em></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Las MEFs que presentamos tienen en común que: </span></b></p> <ul dir="ltr"> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">están constituidas por un conjunto finito de estados (</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">S</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) en los que la MEF puede encontrarse cuando procesa la cadena de entrada; hay un estado inicial (</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">ι</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) en que la MEF comienza su procesamiento y un estado (</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">h</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) (o más (</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">F</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">), dependiendo del tipo de MEF) en el (los) que puede terminarlo;</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">los símbolos que conforman la cadena de entrada son elementos de un conjunto finito (el “Alfabeto” </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">); </span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">las operaciones de la MEF se definen mediante una relación (en el sentido matemático) de transición </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">ρ</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;, que toma el estado en el que se encuentra la MEF en ese momento y el símbolo actual de la cadena de entrada (y, como veremos, eventualmente otras cosas, dependiendo del tipo de MEF), y regresa el estado al que la MEF debe moverse (y eventualmente otras cosas, como veremos); si la relación de transición </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">ρ </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;es una función (en el sentido matemático), entonces se le denota con </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">δ</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;y se dice que la </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">MEF </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">es</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> determinística</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, en caso contrario se que la </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">MEF </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">es</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> no-determinística</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">.</span></b></li> </ul> <p>&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Vimos MEFs particulares:</span></b><br /> &nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Los </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Autómatas Finitos (AFs)</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (ó </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Finite Automata</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) se definen como quíntuples de la forma &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size:11pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">AF </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">= </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">〈</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">S,ι, F, A, ρ </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">〉</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">&nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">. Pueden procesar los Lenguajes Regulares (como &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">m</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> b</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">n</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> e</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">k</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">d</span><span style="font-size:1.3499999999999999pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">&nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, &nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">para </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">m, n, k, i </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;</span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">≥</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">1</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> e independientes entre sí). </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><br /> <b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Los </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Autómatas de Pila (APs)</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (ó </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Push Down Automata</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) se definen como séxtuples de la forma &nbsp;&nbsp;&nbsp;</span><span style="font-size:11pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">AP </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">= </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">〈</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">S,ι, F, A, Σ, ρ </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">〉</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, &nbsp;&nbsp;&nbsp;</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">en los cuales &nbsp;&nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Σ &nbsp;&nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">es el alfabeto de la pila. &nbsp;Pueden procesar los Lenguajes Libres de Contexto (como &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">i</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> b</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">n</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> e</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">n</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">d</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> i</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, &nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">para </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">n, i</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">≥</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">1</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> ).</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><br /> <b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Las </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Máquinas de Turing</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">MTs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) (ó </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Turing Machines</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) se definen como séxtuples de la forma &nbsp;&nbsp;&nbsp;</span><span style="font-size:11pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">MT </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">= </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">〈</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">S,ι, h, A, Π, ρ </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">〉</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, &nbsp;&nbsp;&nbsp;</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">en los cuales &nbsp;&nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Π &nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">es el alfabeto de la cinta de Procesamiento. Pueden procesar los Lenguajes Estructurados por Frases.</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><br /> <b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Los </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Autómatas Delimitados Linealmente (ADLs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) (ó </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Linear Bounded Automata</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) son MTs que para procesar una cadena solo requieren una cantidad de celdas en la cinta de procesamiento prácticamente igual a la de la cadena de entrada. Pueden procesar los Lenguajes Sensibles al Contexto (como </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">i</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> b</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">n</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> e</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">i</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">d</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;"> n</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, &nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">para </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">n, i</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">≥</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">1</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> ).</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><br /> <b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Las </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Máquinas de Turing que terminan</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">MTts</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">term</span><span style="font-size:11pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">son MTs que siempre culminan el procesamiento de cualquier cadena &nbsp;–aunque eventualmente después de </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">mucho</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> tiempo. &nbsp;Las MTs</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">term</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> pueden procesar los Lenguajes Decidibles.</span></b><br /> &nbsp;</p> <h3 dir="ltr"> 7. Lenguajes y Compiladores</h3> <p dir="ltr"><em>En SG#52, asumimos una actitud más “práctica” &nbsp;y abordamos el concepto “lenguaje” desde la construcción de programas que los procesan y hablamos sobre la estructura y funcionamiento de los compiladores:</em></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Obviando algunas precisiones, un compilador suele tener una estructura general como la siguiente:</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="231" src="https://lh6.googleusercontent.com/OzRdLy0JIrzpiNuxKcxal7jIIn-UGP-NS0O2lFDUlfa3BUQYfEjGVztdtL0jIEmVtuucLhJsate9UqwTCUJ6MlATbTl6gRswHvF-PtJZABIdoIb-G5Vm3adYOlgXLmtLBOhriNnAs0iOrBeR7A" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="505" /></span></b></p> <p>&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Grosso modo</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, su funcionamiento es como sigue:</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><span style="white-space:pre;"> </span></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;">&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Cada vez que el </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">scanner</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Analizador Léxico</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) es llamado, reanuda su lectura de caracteres del </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Código Fuente</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> escrito en el Lenguaje</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">1</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">; se salta caracteres irrelevantes (como una secuencia de comentarios, blancos, y/o saltos de línea) y luego concatena los que sí son relevantes hasta completar una cadena que tenga significado por sí misma (por ejemplo “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">{</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">“, “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">main</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” y “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">contador</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” en el lenguaje C); en seguida detecta si la cadena es una palabra reservada (como “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">main</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">”), un símbolo (como “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">{</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">“), un identificador (como “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">contador</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">”) –en cuyo caso &nbsp;lo busca en la </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Tabla de Identificadores</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> y si no lo encuentra lo da de alta–, o un error léxico (en cuyo caso también emite el mensaje correspondiente); finalmente, regresa esta información a la subrutina que lo llamó,–usualmente el </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">parser</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">– conteniendo al menos 2 elementos: la cadena en sí misma (el “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">lexema</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">”), y un código (el “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">token</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">”) que representa el tipo genérico de la cadena (como “Identificador”, “número” o “paréntesis de cierre”).</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;">&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">parser</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Analizador Sintáctico</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) suele ser el componente central del procesamiento de un compilador. Manda llamar al </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">scanner</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, el cual como dijimos regresa la cadena que acaba de completar y la información mencionada. Con esos datos, el </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">parser</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> busca seguir alguna de las reglas gramaticales del lenguaje; en caso de no encontrar alguna emite un mensaje de error sintáctico. En su procesamiento va utilizando y actualizando la Tabla de Identificadores (por ejemplo, escribiendo si el Identificador es el nombre de una subrutina o de una variable, así como su tipo), va construyendo el </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Árbol Sintáctico</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> del programa en cuestión (ver figura abajo), y va ejecutando instrucciones que tiene “embebidas”… A) del </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Analizador Semántico</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, que entre otras cosas revisa cuestiones relacionadas con tipos de datos y paso de parámetros (para lo cual se apoya en la Tabla de Identificadores); B) del </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Mecanismo de Recuperación de Errores</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, &nbsp;que al detectar un error emite el mensaje correspondiente y hace lo necesario para permitir que se pueda continuar con el análisis (como saltar secciones de código “problemáticas”); &nbsp;y C) del </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Generador de Código</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (el cual también se apoya en esa Tabla) para construir el </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Código Objeto</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> con instrucciones en el Lenguaje</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">2</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (aunque es usual generar primero código en un lenguaje intermedio, realizar un proceso de Optimización y luego generar el Código Objeto).</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;">&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El árbol sintáctico para la cadena </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">2</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> b</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">3</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> c</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">3</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> d</span><span style="font-size:6.999999999999999pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:super;white-space:pre;white-space:pre-wrap;">2</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;del lenguaje </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">L</span><span style="font-size:6pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">2</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, se muestra en la siguiente figura; en ella se se parte de S</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">0</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> y se van generando ramificaciones sustituyendo no-Terminales mediante la aplicación de alguna regla de la gramática; las hojas del árbol acaban siendo Terminales o </span><span style="font-size:10pt;font-family:Symbol;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">λ</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">.</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:'Times New Roman';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="201" src="https://lh5.googleusercontent.com/DKuwrh1mWKooxzas9T6fOQjMqjyOkXJS9twARfJbZpU-UtDkXNpVl6RlZrllQmL2LnI7Wev1U5-HIq-1zg6fIx9_mEQeQnsYdY0KGSqsbkBjDiz9VcQYVw2o_QKZWf-NSQ0fgiAxQr3uEaYMFg" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="62" /></span></b></p> <p>&nbsp;</p> <h3 dir="ltr"> Lenguajes de Computación (LCs) y Lenguajes de Programación (LPs)</h3> <p dir="ltr"><em>En SG#55, revisamos el concepto de “Computer Languages” como una generalización de los “Programming Languages”:</em></p> <p dir="ltr" style="line-height:1.2;margin-top:4pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Todos estamos familiarizados con el concepto de Lenguajes de Programación (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">LPs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) y existe bastante literatura sobre el tema. Sin embargo, si buscamos incrementar nuestra productividad deberíamos abrir nuestra panorámica y considerar no solo los LPs, sino lo que llamaremos aquí “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Computer Languages</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” o “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lenguajes de Computación</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">LCs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">), concepto que incluye los LPs, pero también los </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lenguajes de Documentación</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (como LaTeX y HTML), </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lenguajes de Arquitectura</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (como ABACUS y CBabel), &nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lenguajes de Especificación</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (v.gr. de </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">sanners/parsers</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> como lex/YACC), </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lenguajes de Documentación de Procesos</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (como XPDL y JPDL), y </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lenguajes para la Prueba</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (como LoadRunner y Selenium), entre otros. Desarrollar lenguajes propietarios de propósito particular para estas áreas también puede incrementar significativamente nuestra productividad. </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:4pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Los LCs (y los LPs en particular) se desarrollan a lo largo de un proceso de sistematización–formalización–automatización durante el cual se va conociendo mejor el área para la cual se diseña el lenguaje (el “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Application Domain</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” o “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Dominio de Aplicación</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">”), detectando patrones útiles y repetidos en la construcción de programas.</span></b></p> <p dir="ltr"><em>Profundizamos en los Lenguajes de Programación (LPs):</em></p> <p dir="ltr" style="line-height:1.2;margin-top:4pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Cuando los LPs son de propósito general (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">general purpose languages</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) tienen constructos que son comunes a muchos otros LPs, tales como mecanismos de secuenciación, alternación y repetición de instrucciones, definidos en el marco de lo que llamamos un </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Sistema de Control </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">(Control System)</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">; </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;y mecanismos para construir, combinar, comparar, y descomponer tipos, definidos en el marco de un </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Sistema de Tipos </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">(Type System)</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">. Cuando los LPs son de propósito particular (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">special purpose languages</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) tienen además una parte diseñada especialmente para abordar más efectivamente problemas del Dominio de Aplicación, como tipos de datos y estructuras de control </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">ad hoc</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (v.gr. si el dominio fuera la Matemática, el LP podría tener construcciones y operaciones nativas sobre matrices, entre otras cosas).</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:4pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El Sistema de Control </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">La estructura del Sistema de Control está fuertemente influenciada por el paradigma del LP (ver más adelante), pero podemos hablar en general de constructos (o “abstracciones”) como los descritos en la siguiente tabla.</span></b></p> <p>&nbsp;</p> <div dir="ltr" style="margin-left:6.75pt;"> <table style="border:none;border-collapse:collapse"> <colgroup> <col width="159" /> <col width="297" /> <col width="191" /> </colgroup> <tbody> <tr style="height:0pt"> <td colspan="3" style="border-left:solid #000000 0.5pt;border-right:solid #000000 0.5pt;border-bottom:solid #000000 0.5pt;border-top:solid #000000 0.5pt;vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:4pt;margin-bottom:0pt;margin-left: -14.7pt;text-indent: -36pt;padding:0pt 0pt 0pt 36pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Abstracciones de Control</span></b></p> </td> </tr> <tr style="height:0pt"> <td style="border-left:solid #000000 0.5pt;border-right:solid #000000 0.5pt;border-bottom:solid #000000 0.5pt;border-top:solid #000000 0.5pt;vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:4pt;margin-bottom:0pt;margin-left: -14.7pt;text-indent: -36pt;text-align: center;padding:0pt 0pt 0pt 36pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Primitivas</span></b></p> </td> <td style="border-left:solid #000000 0.5pt;border-right:solid #000000 0.5pt;border-bottom:solid #000000 0.5pt;border-top:solid #000000 0.5pt;vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:4pt;margin-bottom:0pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Compuestas</span></b></p> </td> <td style="border-left:solid #000000 0.5pt;border-right:solid #000000 0.5pt;border-bottom:solid #000000 0.5pt;border-top:solid #000000 0.5pt;vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:4pt;margin-bottom:0pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">De Unidad</span></b></p> </td> </tr> <tr style="height:0pt"> <td style="border-left:solid #000000 0.5pt;border-right:solid #000000 0.5pt;border-bottom:solid #000000 0.5pt;border-top:solid #000000 0.5pt;vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:4pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Instrucciones simples como:</span></b></p> <ul dir="ltr"> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 4pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">goto</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">’s</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">,</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">return</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">’s</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">,</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Asignaciones</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Llamadas a</span></b> <b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">subrutinas o macros</span></b></li> </ul> </td> <td style="border-left:solid #000000 0.5pt;border-right:solid #000000 0.5pt;border-bottom:solid #000000 0.5pt;border-top:solid #000000 0.5pt;vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:4pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Instrucciones definidas en términos de otras &nbsp;instrucciones, en particular para construir…</span></b></p> <ul style="margin-top:0pt;margin-bottom:0pt;"> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 4pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Altenaciones</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">: &nbsp;</span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">if</span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">’</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">s</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">switch</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">’s</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Repeticiones</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">: </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">while</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">’s</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">for</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">’s</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Secuenciaciones:</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> listas de instrucciones eventualmente enmarcadas con </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">begin</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> – </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">end</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Bloques</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> de &nbsp;instrucciones abstraídos en forma de &nbsp;subrutinas (procedimientos, funciones, módulos, etc.) o clases</span></b></li> </ul> </td> <td style="border-left:solid #000000 0.5pt;border-right:solid #000000 0.5pt;border-bottom:solid #000000 0.5pt;border-top:solid #000000 0.5pt;vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:4pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Mecanismos para almacenar, en archivos distintos y utilizando mecanismos como </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">include</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">’s</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">uses</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">’</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, y </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">sees</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">’</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, segmentos de código &nbsp;con instrucciones relacionadas entre sí (“librerías”, clases o </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">bstract </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">D</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">ata </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">T</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">ypes </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">)</span></b></p> </td> </tr> </tbody> </table> </div> <p>&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:3pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El Sistema de Tipos </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">La estructura del Sistema de Tipos también está influenciada por el paradigma del LP, pero podemos igualmente hablar en general de constructos como los descritos en la siguiente tabla.</span></b></p> <p>&nbsp;</p> <div dir="ltr" style="margin-left:-5.75pt;"> <table style="border:none;border-collapse:collapse"> <colgroup> <col width="213" /> <col width="260" /> <col width="192" /> </colgroup> <tbody> <tr style="height:13pt"> <td colspan="3" style="border-left:solid #000000 0.5pt;border-right:solid #000000 0.5pt;border-bottom:solid #000000 0.5pt;border-top:solid #000000 0.5pt;vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp; <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Abstracciones de Datos</span></b></p> </td> </tr> <tr style="height:13pt"> <td style="border-left:solid #000000 0.5pt;border-right:solid #000000 0.5pt;border-bottom:solid #000000 0.5pt;border-top:solid #000000 0.5pt;vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp; <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Primitivas</span></b></p> </td> <td style="border-left:solid #000000 0.5pt;border-right:solid #000000 0.5pt;border-bottom:solid #000000 0.5pt;border-top:solid #000000 0.5pt;vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp; <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Compuestas</span></b></p> </td> <td style="border-left:solid #000000 0.5pt;border-right:solid #000000 0.5pt;border-bottom:solid #000000 0.5pt;border-top:solid #000000 0.5pt;vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp; <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">De Unidad</span></b></p> </td> </tr> <tr style="height:0pt"> <td style="border-left:solid #000000 0.5pt;border-right:solid #000000 0.5pt;border-bottom:solid #000000 0.5pt;border-top:solid #000000 0.5pt;vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Tipos de datos básicos (y predefinidos) como:</span></b></p> <ul style="margin-top:0pt;margin-bottom:0pt;"> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Ordinales: </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">char, int, boolean, enumerated</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Continuos: </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">real</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (con distintas precisiones)</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Apuntadores </span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">“Tipo nulo” o “comodín” (como el </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">void</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> de C)</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Rangos </span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Archivos</span></b></li> </ul> </td> <td style="border-left:solid #000000 0.5pt;border-right:solid #000000 0.5pt;border-bottom:solid #000000 0.5pt;border-top:solid #000000 0.5pt;vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Tipos de datos definidos en términos de otros tipos utilizando </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Constructores de Tipos</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> como:</span></b></p> <ul dir="ltr"> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Registros (“clásicos” o variables)</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Conjuntos </span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Secuencias (v.gr. arreglos y </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">strings</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">)</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Tipos no lineales (v.gr. listas, árboles &nbsp;y grafos)</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -14.7pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Clases </span></b></li> </ul> </td> <td style="border-left:solid #000000 0.5pt;border-right:solid #000000 0.5pt;border-bottom:solid #000000 0.5pt;border-top:solid #000000 0.5pt;vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Mecanismos para almacenar, en archivos distintos, segmentos de código &nbsp;con declaraciones/ definiciones de datos y de tipos de datos relacionados entre sí (incluyendo librerías, clases y </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Abstract Data Types</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) utilizando mecanismos como </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">include</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">’s</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">uses</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">’</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, y </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">sees</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">’</span></b></p> </td> </tr> </tbody> </table> </div> <p>&nbsp;</p> <p dir="ltr">El diseño del Sistema de Tipos es una actividad en sí misma por su complejidad y relevancia (define elementos vitales de la semántica del lenguaje). Su definición incluye cuestiones muy importantes como las siguientes:</p> <ol> <li>Chequeo de tipos: Distinguimos entre strongly-typed y weakly-typed languages, dependiendo respectivamente de la menor o mayor tolerancia a que a las variables de un programa no se les haya asociado explícitamente un tipo de dato. Si el chequeo de esta asociación se realiza en tiempo de compilación hablamos de statically-checked languages; si ocurre en tiempo de ejecución hablamos de dynamically-checked languages.</li> <li>Equivalencia de tipos: Se definen criterios para determinar cuándo se considera que dos variables tienen el mismo tipo, aunque eventualmente hayan sido declaradas de manera distinta. Algunas alternativas son:</li> </ol> <ul> <li dir="ltr"> <p dir="ltr">Declaration Equivalence: Dos variables tienen tipos equivalentes cuando remiten a la misma declaración de tipo.</p> </li> <li dir="ltr"> <p dir="ltr">Name Equivalence: Dos variables tienen tipos equivalentes si fueron declaradas usando el mismo nombre de tipo en el mismo ámbito (scope).</p> </li> <li dir="ltr"> <p dir="ltr">Structural Equivalence: Dos variables tienen tipos equivalentes si fueron definidas partiendo de los mismos tipos básicos y utilizando los mismos constructores de tipos.</p> </li> </ul> <ol start="3"> <li dir="ltr"> <p dir="ltr">Conversión de tipos: Para combinar variables de varios tipos se aplican mecanismos como los siguientes:</p> </li> </ol> <ul> <li dir="ltr"> <p dir="ltr">Conversión implícita (promotion), como cuando una variable entera es convertida automáticamente a real por aparecer en una expresión real.</p> </li> <li dir="ltr"> <p dir="ltr">Conversión explícita (casting): la que realiza el programador ya sea mediante la utilización de funciones predefinidas, o utilizando facilidades del lenguaje para “asignar tipos”, como el conocido casting.</p> </li> <li dir="ltr"> <p dir="ltr">Generalización del tipo de una variable a un tipo genérico, como el void del lenguaje C.</p> </li> </ul> <ol start="4"> <li dir="ltr"> <p dir="ltr">Inferencia de Tipos: Permite deducir el tipo adecuado de v.gr. una subexpresión dentro de una expresión; es particularmente importante en los weakly-typed languages. El conocido mecanismo de Unificación presente en ProLog es un interesante ejemplo de inferencia de tipos.</p> </li> </ol> <p dir="ltr"><em>Enunciamos los siguientes Criterios de Clasificación de LPs y abundamos en los 2 últimos, mostrados en la figura de abajo. </em></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Una manera de ganar perspectiva es mediante una clasificación, pero una taxonomía presupone criterios bajo los cuales clasificar. Para los LP podríamos tomar alguno(s) de los siguientes:</span></b></p> <ol dir="ltr"> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -7.65pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Su aspecto ante el programador, lo que permite v.gr. distinguir entre lenguajes </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">visuales y textuales</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">.</span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -7.65pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Su “composición estructural” (y la complejidad de procesar cada lenguaje), lo cual es el origen de jerarquías como la </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Jerarquía de Lenguajes de Chomsky</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">.</span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -7.65pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El “marco conceptual” detrás de los programas que se escriben en un lenguaje particular, lo que facilita la clasificación en </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Paradigmas de LPs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">.</span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -7.65pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El “origen cronológico” en el que fueron creados, lo que da pie al concepto de </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Generaciones de LPs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">. </span></b></li> </ol> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt;margin-left: -0.05pt;text-indent: -0.05pt;text-align: center;padding:0pt 0pt 0pt 0.05pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="398" src="https://lh6.googleusercontent.com/T9boJ5S4x41hqLJPfcGLzJK3-ANHVT143J7aUI_ygmqoZ7Mn2xaWJ59cD1DsmIlkxWlCP8QXj507jEXA_H96rSdAyCqEp0hVTUIq7OHve2Y-JHBpr970baYyTBWJIsoDrFGvOgbFTU_vLEPjVA" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="551" /></span></b></p> <p dir="ltr" style="line-height:1.3800000000000001;margin-top:0pt;margin-bottom:10pt;margin-left: -35.45pt;margin-right: -25.9pt;text-indent: 35.45pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:4pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;</span></b></p> <p>&nbsp;</p> <p dir="ltr" style="line-height:1.295;margin-top:0pt;margin-bottom:8pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:#c0c0c0;font-weight:400;font-style:italic;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span></b></p> <p dir="ltr"><em>También hablamos de Criterios de Diseño para desarrollar LPs que pueden aplicarse también a LCs:</em></p> <ol dir="ltr"> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 700; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -18pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Simplicidad</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, que</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">facilita su aprendizaje y uso.</span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 700; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -18pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Legibilidad</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, que permite a un novato entender programas rápidamente.</span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 700; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -18pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Expresividad</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, que</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">permite expresar procesos y estructuras complejos con poco código.</span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 700; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -18pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Uniformidad</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, que brinda consistencia en apariencia y comportamiento de constructos.</span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 700; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -18pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Generalidad</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, que</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">permite combinar constructos estrechamente relacionados en uno más general.</span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 700; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -18pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Ortogonalidad</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, que</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">permite combinar constructos cuando haga sentido, pero lo impide cuando causarían comportamientos inadecuados.</span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 700; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -18pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Extensibilidad</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, que permite añadir nuevos constructos.</span></b></li> </ol> <hr /> <p>&nbsp;</p> <h2 dir="ltr">Ejemplo Integrador</h2> <p dir="ltr"><em>Ahora abordaremos nuestro ejemplo, en el que incorporaremos mucho de lo que hemos visto hasta ahora en nuestra columna. El ejemplo tiene que ver con Métodos Formales, Lenguajes y Compiladores. &nbsp;</em></p> <p dir="ltr"><b style="font-weight:normal;"><span style="font-size:12pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Métodos Formales </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">En términos generales, los </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Métodos Formales</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">MF</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) son una tecnología mediante la cual podemos:</span></b></p> <ol dir="ltr"> <li style="list-style-type: decimal; font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -7.65pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 6pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Escribir una </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">especificación</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> del sistema a desarrollar utilizando un lenguaje formal L</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">1</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (usualmente un lenguaje de especificación altamente expresivo), que luego es </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">verificada</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> con intervención humana y procesada mediante un compilador C</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">1</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> para así generar el código en otro lenguaje formal L</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">2</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> que representa un </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">diseño</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> de alto nivel.</span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -7.65pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 6pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Tomar este </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">diseño</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (quizás escrito en un Lenguaje de Arquitectura), verificarlo con intervención humana y procesarlo mediante un compilador C</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">2</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> que genera el código en otro lenguaje formal L</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">3</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> que representa un programa susceptible de ser optimizado.</span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -7.65pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 6pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Este programa (escrito quizás en un lenguaje de programación procedural de alto nivel) se procesa mediante un compilador C</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">3 </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">(que eventualmente optimiza el programa) para obtener finalmente el código objeto (quizás en lenguaje máquina). </span></b></li> </ol> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;margin-left: 10.35pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Las verificaciones mencionadas suelen ser demostraciones matemáticas de que el código correspondiente muestra ciertas propiedades.</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">En realidad, podríamos pensar que en el desarrollo de software siempre utilizamos algún tipo de MF, pues finalmente se escribe el sistema en algún lenguaje L</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">x</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> que es procesado por un compilador C</span><span style="font-size:6pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:sub;white-space:pre;white-space:pre-wrap;">x</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, el cual usualmente genera código ejecutable. Sin embargo, esta transformación suele realizarse solamente para el tercer numeral de los arriba descritos (la generación del sistema ejecutable a partir del programa escrito en un lenguaje de programación), no para todo el ciclo de desarrollo Requerimientos-Diseño-Programación, como buscan hacerlo los MFs.</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Por otro lado, y como ya hemos comentado, los analizadores sintácticos (o “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">parsers</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">”) suelen definirse mediante una gramática. Para ello se utiliza alguna nomenclatura especializada como BNF o Grafos de Sintaxis; aquí utilizaremos esta última como lenguaje de diseño de lenguajes.</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:4pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Grafos de Sintaxis </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Los </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Grafos de Sintaxis</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">GSs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) tienen una definición formal inductiva que suele resultar muy intuitiva:</span></b></p> <p style="list-style-type: upper-roman; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 6pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Los siguientes son GSs básicos:</span></b></p> <ol style="margin-top:0pt;margin-bottom:0pt;"> <li style="list-style-type: lower-alpha; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: 17.4pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 6pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="35" src="https://lh3.googleusercontent.com/DW7r-tXHv-vos_6b1dkLKToJpXx81OBwj60coKp8ctcG3vachieFwOA5o5Ny4lv6LlziDJM22hbNy0sOllwe9ymWoi4u38R1IPCNatIWekySsKSdBzsybDJ7ooTvNYVzPs5e1Fk_PAkeqg2L5A" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="71" /></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (el grafo nulo) </span></b></li> <li style="list-style-type: lower-alpha; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: 17.4pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 6pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="36" src="https://lh4.googleusercontent.com/6nwqmQxtC4oZUOQhBdx7b-mVkbJVy-o7XfI7Vt0DH9PskFFZUY0Jc3-mxa0CLKiFKyNbg6Fm6EKplpHJ3Z8id0nRN2sqB0YGB4m6IpBaf6CJLwfFL1Lt-0r-mdw5SthblcpccOFJCJwPQtSBmw" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="88" /></span><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">donde </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">t</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">es un Símbolo Terminal</span></b></li> <li style="list-style-type: lower-alpha; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: 17.4pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 6pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="41" src="https://lh3.googleusercontent.com/taftLwE1xL1o0QBG-HSLzazdvNOQt_ib1P7acFyPZphQvMWbS6E_xD6bxLXEYDBB1LgnlSN022eH4yLWh6cq-TjVsRR0x7I7rGu5Y5eL69TxvwDotG8Qx7VtlXwZ9Iy92JigXYC8Gt1VTwqn6A" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="89" /></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;&nbsp;donde </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">N</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">es un Símbolo no-Terminal</span></b></li> </ol> <p>&nbsp;</p> <p dir="ltr" style="list-style-type:upper-roman;font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> Si &nbsp;&nbsp;&nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="48" src="https://lh3.googleusercontent.com/VD_-Rd2EwPAQM5_hjlasROmlg998271QmUyEFuQCCrZGZNLDgWNffEmUGk7gMYrmb4rz2Spv7R6Pr25Jsw4r0HhKuvNktk8wZ6YH5SIJNNA9BSJnqm1HEa_JCeP0xmSWbh_JhWcUf5qwHCfayQ" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="186" /></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;son GSs, entonces también lo son los siguientes:</span></b></p> <p>&nbsp;</p> <p style="list-style-type: lower-alpha; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: 17.45pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">la secuenciación de GSs </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;margin-left: 151.05pt;text-indent: 25.94999999999999pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;&nbsp;&nbsp;</span><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="52" src="https://lh3.googleusercontent.com/fRxghzgKV_OkJ0uxeaIrnxKAHtQuDBcUrAyaW_VrxPQPXNI6-Qy0sxpQ48FoOvn4yftRjZSoI8qzawBVxyC_cKO8cehczI1vt9DnyPdKTbK_Aa-JxCqJvYqXbjuzZgV1FrhI5AXs31_cFpf5BQ" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="180" /></span></b></p> <p>&nbsp;</p> <p style="list-style-type: lower-alpha; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: 17.45pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">la alternación de GSs</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;margin-left: 141.6pt;text-indent: 35.400000000000006pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;&nbsp;&nbsp;</span><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="112" src="https://lh5.googleusercontent.com/n9jUDQAyPeUd3a0oGqbFh4rgZRQWbcM5VPCOrM9I7_zgWoCCl-OJR4Lmc9No7fg5pNFkyLm16Ul_0I2rdl3_tJhu9sH34bh4WOqHKNg9mjjEFR6DxBL-eX1OfYzJbtrBCFgUO3ztYCm1W2nPhw" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="176" /></span></b></p> <p style="list-style-type: lower-alpha; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: 17.45pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">la repetición de GSs</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;margin-left: 141.6pt;text-indent: 35.400000000000006pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;&nbsp;&nbsp;</span><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="114" src="https://lh4.googleusercontent.com/W1ks6Oo4-nTHYm9flLfzDffbjFtLWxmdJj3OZYCWoZ48rJICuR7sG7mwHYD20U8fEr-CxCx4mwpqhJEk0Y5r-qeovzdBcx9xM6__S0RvJwQTJFZTOrYLqxmo2GTshHBzKzKdQiVVHXxFoPWIrw" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="174" /></span></b></p> <p><br /> &nbsp;</p> <p style="list-style-type: upper-roman; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 6pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Además, consideraremos que a un GS &nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="56" src="https://lh4.googleusercontent.com/3XggUhVc85U2JvPA3ALtN9dsoEcHLQ8GJljYc1HCV7RM4P6S3ST-lUseKvcWUcltty4QiB0qFdMv_EOqUUWFpw2cLn-Bgs940HgyCLhJK32C72m8HXutV082pl7Bm6F5LwlECuFL96NNVrM1Bw" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="88" /></span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> se le puede asignar un nombre con el &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que luego puede ser referenciado: </span><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="54" src="https://lh4.googleusercontent.com/8bHNdYLgbBjYtSFs0SbYinaBXHqy9GFy6HHYD1OrDuSC7BIiNQlrbz3G72v9KgsziIr7yL4xXK8t8vb8HMg-OXEAeRonEaEkXuaDzJp_By_OGfE2zAiMxVRi9QcOdulJPiNLLmqfn-zLTm_u6g" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="116" /></span><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> &nbsp;&nbsp;&nbsp;.</span></b></p> <p>&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Como ya hemos dicho, con los GSs pueden especificarse los Lenguajes Libres de Contexto. Ahora bien, dentro de esa clase hay un tipo de lenguajes (los </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">descendentes predictivos</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">) para los cuales es relativamente fácil escribir </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">parsers</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> que los procesen, pero las gramáticas que los definen deben presentar ciertas características, en particular las siguientes (que por razones de espacio, no describiremos aquí de manera formal):</span></b></p> <ol dir="ltr"> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: 3.3pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">La definición de la gramática no puede tener recursión izquierda (el procesamiento se ciclaría indefinidamente), sea directa o indirecta;</span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Calibri; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: 3.25pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">En una alternación de grafos, no puede ocurrir que un par de ellos comience con la misma cadena (se requeriría </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">backtracking</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">).</span></b></li> </ol> <p dir="ltr" style="line-height:1.2;margin-top:4pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Un pequeño Método Formal </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Las reglas para construir un </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">parser</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> descendente predictivo son relativamente sencillas y pueden ser automatizadas como bosquejamos a continuación, utilizando la rutina recursiva </span><span style="font-size:12pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C()</span><span style="font-size:12pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">que recibe como parámetro un GS y genera su código asociado (aquí en Pseudocódigo).</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">En el código de estas reglas, </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">err_msg()</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> es una rutina que solo imprime </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">un</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> mensaje de error (sintáctico) y eventualmente hace abortar el proceso de análisis sintáctico (pero es posible sofisticarla sistemáticamente para que sea el elemento central de un mecanismo de Recuperación de Errores, de manera que detecte y anuncie errores sin interrumpir ese análisis).</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Por otro lado, </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">start()</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> es una rutina recursiva que, dado un GS, regresa el conjunto de símbolos terminales con los que puede iniciar ese GS. Defiendo esa rutina de manera semi-formal (por cuestiones de espacio), y obviando algunas precisiones (como si un GS es nulo), tenemos que: </span></b></p> <ul dir="ltr"> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 6pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">start</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> de un GS que es un </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">símbolo terminal</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> es el conjunto con ese no-terminal como único elemento.</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 6pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">start</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> de un GS que es un </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">símbolo no-terminal</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> es el </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">start</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> del GS que lo define.</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 6pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">start</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> de un GS que es una </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">secuenciación de GSs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> es el </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">start</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> del primero de esos GSs.</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 6pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">start</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> de un GS que es una </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">alternación de GSs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> es la unión de los </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">start</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> de cada uno de esos GSs.</span></b></li> <li style="list-style-type: disc; font-size: 10pt; font-family: &quot;Noto Sans Symbols&quot;; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; line-height: 1.2; margin-top: 0pt; margin-bottom: 6pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">start</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> de un GS que es una </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">repetición de GSs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> es el </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">start</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> del primero de esos GSs.</span></b></li> </ul> <p>&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Las reglas para la generación de </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">parsers</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> a partir de GSs son las siguientes:</span></b></p> <div dir="ltr" style="margin-left:-5.75pt;"> <table style="border:none;border-collapse:collapse"> <colgroup> <col width="306" /> <col width="107" /> <col width="251" /> </colgroup> <tbody> <tr style="height:0pt"> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="69" src="https://lh4.googleusercontent.com/Ait0MgmELN88L9xQCvcmthhAOTbcc3m-vY1Zj0fiG8GPy2IoeKUewTnv69hRX4KuN21bVUTzoBVKPkar0DqeJ3uLep75sAfR72T8Ypux2OIPK9SvICBnHtVC5Z8ZVOmYcKgSfRq76gplsIuLuw" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="212" /></span></b></p> </td> <td colspan="2" style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp; <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El código asociado a un </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">GS con nombre</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> es una rutina con ese nombre, que incluye el código del GS.</span></b></p> </td> </tr> <tr style="height:0pt"> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="22" src="https://lh5.googleusercontent.com/tBuokX3RH-6hfa_Idm7URQXK3Yw_iNDLk-laYYQurnHgX6KBFhFSDxAL1L7KqbBSk77BG0ZEe3-iue2hyHoKJHCM1G4Brp1DmtH7Nid_ktDB6FxhO6Dl4UycAdLj1Vc5I4eB6I9FeHF8tDfO1Q" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="119" /></span></b></p> </td> <td colspan="2" style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El código asociado a un </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">GS nulo</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> es la instrucción nula.</span></b></p> </td> </tr> <tr style="height:0pt"> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="28" src="https://lh4.googleusercontent.com/DuHCM4jKibnqHD2bu9pGn3Wtfetp1dFFd3R_HwBsB0OQNaTL2XjnfvNPC3EqVL72r-a8okz6cMhwhDUuzQHe3TZUC1V4RspLIepc1c9txMg8c2jWZar1407kPR1zfhE3wjE56rCP0iF5KD_M8Q" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="149" /></span></b></p> </td> <td colspan="2" style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El código asociado a un </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">GS que es un no-terminal</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> es una llamada a la rutina asociada a ese no-terminal.</span></b></p> </td> </tr> <tr style="height:0pt"> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp; <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="94" src="https://lh4.googleusercontent.com/uCZtcdPM3auEw6Qf6pCr09lbmXvIyEg_YQKHaJ98w-m5rp170iQWkvhBBfP4a48gvynwZEz8JNhnBPmXoktWPx2mnttEk5iaAJx6Mfci28ZFcs2_J3fic6ufa-1rRzwHjukfOFb2sqSRliU-TQ" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="291" /></span></b></p> </td> <td colspan="2" style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp; <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El código asociado a un </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">GS que es un terminal</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> es: si el token actual es el que se espera, se invoca al analizador léxico (scanner) para obtener el siguiente token; en caso contrario, se emite un mensaje de error .</span></b></p> </td> </tr> <tr style="height:0pt"> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="81" src="https://lh6.googleusercontent.com/YZLex0VHTk8SdQpj3wmNIi5HcnO8dJzNg_qvYniDF17hpiluptMzWVBoWzVAr6zGH4_jvGnvn2iriuYFNVcfzRHju5jRLc0L5CREs13_el3suze7-_aTsLoVwBthUIu8LzTD9TGqRjj9x3iBjg" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="265" /></span></b></p> </td> <td colspan="2" style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp; <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El código asociado a un </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">GS que es una secuenciación</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> de GSs es la secuenciación del código generado para cada uno de los GSs.</span></b></p> </td> </tr> <tr style="height:0pt"> <td colspan="2" style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="113" src="https://lh3.googleusercontent.com/j2PxapLWjC0BIFDTsQrNMtR_K0old4pIvRfVOe-KX7EOsqzegKIAM2HyUNIOCKqK9MLFOjTIw8fq20DxVwXL4mdcLDyn0Qn6zdBGQAFZ-IN18bhtHnprM6s3OkLh154aDf0HZaYvi08L8cuPZA" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="379" /></span></b></p> </td> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp; <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El código asociado a un </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">GS que es una alternación</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> de GSs es la alternación del código de cada GS expresada en términos del token actual y de aquello con lo que puede iniciar cada uno de los GSs respectivos.</span></b></p> </td> </tr> <tr style="height:0pt"> <td colspan="2" style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="97" src="https://lh3.googleusercontent.com/8urQ_G3xQKXripJg5hReSF9rPc7YhnVoF-k1_phA1Ksv_siZSisgkBQ7Z9WCUudyMaiXLPKaVHY7qzIxPwfvkC3yrd1vbt7EDTnabOs_bYInJCBnH2umsOKqzWs0riQRg1vSjuBA9u0IsmIYjg" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="394" /></span></b></p> </td> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp; <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El código asociado a un </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">GS que es una repetición de GSs</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> es el código del primer GS, seguido de la repetición del segundo y del primero hasta que el token no sea algo con lo que puede iniciar el segundo. </span></b></p> </td> </tr> </tbody> </table> </div> <p>&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Con los elementos anteriores podríamos tener un pequeño MF para los últimos 2 numerales listados en la definición de MF:</span></b></p> <ol dir="ltr"> <li style="list-style-type: decimal; font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -7.65pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 6pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Escribiríamos el </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;-webkit-text-decoration-skip:none;text-decoration-skip-ink:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">diseño</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> del lenguaje utilizando el &nbsp;lenguaje formal de los GS, el cual sería verificado por un compilador de GS para detectar recursión izquierda y/o alternaciones de GS no permitidas (además de otras cosas como no-Terminales indefinidos o caracteres inválidos); en caso de haberlas, el diseño sería corregido con intervención humana. Una vez corregido y verificado nuevamente, el compilador de GS podría generar el </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">parser</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> en pseudocódigo como lenguaje intermedio. </span></b></li> <li style="list-style-type: decimal; font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre; margin-left: -7.65pt; line-height: 1.2; margin-top: 0pt; margin-bottom: 6pt; text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Este </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">parser</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> “correcto” &nbsp;a su vez sería procesado (y optimizado, fase que no abordaremos aquí) mediante un compilador de pseudocódigo que generaría el programa en algún lenguaje de alto nivel, a elección del usuario (v.gr. Java, ADA o LISP), para luego ser procesado por el compilador correspondiente que generaría el código ejecutable.</span></b></li> </ol> <p dir="ltr" style="line-height:1.295;margin-top:0pt;margin-bottom:8pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:5pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:4pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Ejemplo </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Las expresiones en los lenguajes de computación son muy importantes. En lenguajes de programación de alto nivel procedurales aparecen en asignaciones, en condiciones de instrucciones como </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">if</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> y </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">while</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, y en el paso de parámetros; en LISP –el lenguaje funcional por antonomasia– tanto datos como programas son un tipo especial expresiones.</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Apliquemos nuestro MF para desarrollar un </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">parser</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> que procese expresiones algebraicas simples como &nbsp;&nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a+3*2, &nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">(</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a+b</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">)</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">*2 &nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">ó </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">((</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">a+b</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">)</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> /3*</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">(</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">b-c</span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">)) &nbsp;</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, en las que la precedencia de los operadores es la usual: </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">+ </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">y </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">- </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">tienen igual precedencia, la cual es inferior a la de </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">*</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> y </span><span style="font-size:10pt;font-family:'Times New Roman';color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">/</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> , que también tienen la misma precedencia.</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Uno podría iniciar definiendo la siguiente gramática:</span></b></p> <div dir="ltr" style="margin-left:0pt;"> <table style="border:none;border-collapse:collapse"> <colgroup> <col width="335" /> <col width="330" /> </colgroup> <tbody> <tr style="height:0pt"> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp; <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="185" src="https://lh4.googleusercontent.com/by92OcksC8MZV-xrMD01KM-mrStdW8-0-_Z0KSnToHIbMzUU99m17FLJK6cDDHfzdEFiJKAilCw8sXAPu7XkPkZkd-Qx-p5L9ezo176D39_AaGOplb-5tF-JbnNCaWNtlTMBmgrxGiSTLuYz3w" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="274" /></span></b></p> </td> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="217" src="https://lh4.googleusercontent.com/b5Om3re-WPbqmVe2sKyFpyBrIXthWlRthpkyzzAuyflpiR-EOmBqLKu7vEDZ9gF3gS3uM4fHmaqDySabMaMvDnovgnY-NUgGG_F5Dkeg2dAQStK-PQCJVc-OPEce9UorDcOHfkhQ9-7xwE3PhQ" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="133" /></span></b></p> </td> </tr> </tbody> </table> </div> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Sin embargo, esa gramática presenta inconvenientes importantes: no garantiza que para cada “(“ haya un “)”, y todos los operadores tienen la misma precedencia. Desgraciadamente, nuestro pequeño MF no podría ayudarnos con estos problemas.</span></b></p> <p>&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Buscando resolver los problemas anteriores, y generalizando para que en lugar del “Elm" de la gramática anterior, tengamos Identificadores y Números podríamos proponer esta otra gramática:</span></b></p> <div dir="ltr" style="margin-left:0pt;"> <table style="border:none;border-collapse:collapse"> <colgroup> <col width="334" /> <col width="331" /> </colgroup> <tbody> <tr style="height:0pt"> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="195" src="https://lh3.googleusercontent.com/4wYfP7T-RSA7ZW9p3_3Lv7T2_JBUEgfG8qAk05U5yb4jHl8sD6n_46YzpDVZaGjxWGklRwJKnJ90lwfxqb8qm8HxTPRGQgmLG_pYHMT8xYjOuD_c7gnpHiHoFpXhuM-jEti6fCTlnCaZl98TFg" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="248" /></span></b></p> </td> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp; <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="138" src="https://lh5.googleusercontent.com/9FuotRhbZVCvCqEd4NKPgd8CUBovai-tzbIbM4bDnbbN9z2gNyAYkYEiYoPwcLcv6npCMLVoyQVO76s2Qy7CXbCC3s478wZ0cU2ToVknZQk3GFX5xD6LHq7LqQUxsGgwfaq08KiR23L40sL6pw" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="157" /></span></b></p> </td> </tr> </tbody> </table> </div> <p>&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Esta gramática también presenta inconvenientes, pero esta vez nuestro MF sí puede ayudarnos: nos diría que el no-terminal “Opr" no está definido (el grafo que le correspondía está tiene el nombre “Oprr”), y –más grave aún para efectos del funcionamiento del </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">parser</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">– que existe recursión izquierda (“Xpn").</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Podríamos entonces proponer la siguiente gramática:</span></b></p> <div dir="ltr" style="margin-left:0pt;"> <table style="border:none;border-collapse:collapse"> <colgroup> <col width="351" /> <col width="314" /> </colgroup> <tbody> <tr style="height:0pt"> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="81" src="https://lh6.googleusercontent.com/OQF0jyJMxssSOF5gVij7T7fLTVRv1mlJ95RzMd8BVgqFDnYP22Hox2Bs--kUKreYdwqZv8F8dh2djSkw-tCLoCpcqrsoIHplw3i0HrA4m6jWtBxbS8JetdGRxUL-QVxPlxM9IoS5nNbmACTkCA" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="317" /></span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="112" src="https://lh4.googleusercontent.com/od7iLTUwcDmWxbIOJfDRGHlkRXg0c3HoemyR-ZmLISwohVk2jhAXDlLfyCNaYE2c1QYFrMIa_XfNNsRAupzvgGwHqoUD7xmYGshKT13vvgn1R-kCWFKUpTE5CJLUu-vcq-JftKjHiWhpGYgcFQ" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="235" /></span></b></p> </td> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp; <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="134" src="https://lh4.googleusercontent.com/H-9R_HLJoSlBo9X5p1LYdglawbptYjsf660S4_jHwMfG9yTbVTgAfeT9of9e0b_YygyJ8ISkxzKWHJmeXpSOgT3veWceoAy5rB1EW_5Czq7J2l2KZzIkrBxEVhsQd2YNBL4ucf42H5iTBcH7bQ" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="144" /></span></b></p> </td> </tr> </tbody> </table> </div> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Pero el MF nos diría que dos de las alternativas en el GS “Xpn” comienzan con la misma cadena (“Opnd”).</span></b></p> <p>&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Por ello podríamos proponer la siguiente gramática, que es una buena alternativa:</span></b></p> <div dir="ltr" style="margin-left:0pt;"> <table style="border:none;border-collapse:collapse"> <colgroup> <col width="331" /> <col width="333" /> </colgroup> <tbody> <tr style="height:0pt"> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;"> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="111" src="https://lh6.googleusercontent.com/-DZrHG0kQx4ftWPUaWFoVEoaAJmcr_hHnPfQVqT1gZdFQuT_3xapV9F8q0Fd0KmoOES02W_Q3c-Wcypp2Pin-7Np1tzZiYfC8Zu1F_JYgJnBbrZPBTtAXSViUZWJIcaFgkPZ4jRvvAx00TMtPg" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="197" /></span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="107" src="https://lh6.googleusercontent.com/Zc49T2nnB3-H4G8ZSZyHMdDkG3yRC71egIkQknbG_wCDAwt_Fgrjkvm-FF1Yuo2uMsVAvEDNLaTRyfocsIJNRr9ZAyrNX4k_lukCUO9O82n8QHddSs7WnwZDiUkgfL0yS_d4mp4SHvkbmDAA1w" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="208" /></span></b></p> </td> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp; <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="122" src="https://lh5.googleusercontent.com/qIyrTMsSIghl2poqkOrYcYPE5FA1NSEniDf3Uz6AOnv2BCni8h34caXZeZqjxiesasV_dDzYK0YhDHFD8WdU0ttJ3WokulqLUpdMDqMoCJ9SzDh6b3OxCahGN9L0EeH5LZFN5Am14GajvpfL9w" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="249" /></span></b></p> </td> </tr> </tbody> </table> </div> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">El MF no se quejaría, pues en particular no hay recursión izquierda, no existen dos subgrafos que comiencen con la misma cadena, y no hay no-terminales indefinidos. Y, dado que los operadores aparecen en una jerarquía de grafos, se tienen las precedencias deseadas. Además, los operadores presentan la precedencia deseada.</span></b></p> <p>&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Con esta gramática que tiene las características que requiere el MF, éste podría proceder a generar el pseudocódigo del </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">parser</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> aplicando la rutina &nbsp;</span><span style="font-size:12pt;font-family:'Courier New';color:#009900;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C()</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">:</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Para “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Xpn</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” el código se iría generando sistemáticamente como se muestra a continuación (el resultado de los </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">start</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> se muestran explícitamente):</span></b></p> <p>&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="116" src="https://lh5.googleusercontent.com/ZZdvolU-1UwHjmug_aj3HUga8Y96Jo5EW1eIJgOPr4D2vzT9XRAnpqJDWesyDCTOKv5BWEvxtPuFLCJ3gsMZ8h0sYd5L5KVzxOWzj0FjwfbbmTa9qgFMsUWpLcG7oY9X5USKWF5CKCbUqrh3Ug" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="431" /></span></b></p> <div dir="ltr" style="margin-left:0pt;"> <table style="border:none;border-collapse:collapse"> <colgroup> <col width="395" /> <col width="309" /> </colgroup> <tbody> <tr style="height:0pt"> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp; <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="165" src="https://lh6.googleusercontent.com/2WwBNKcCCrcpMVhkr2D-VLDdpOuMHT3DzTt3Lf_KIz0QHANoHzg_LGNJW8EGzgbfx1VTXrjXFpZ11-zURMCzKl0AXwnEfMyeQwjWMGGfyXEsTIPc3GAzPBui4HvfSCNuf0IP7bldyAzKsh0IoQ" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="289" /></span></b></p> </td> <td style="vertical-align:top;padding:0pt 5.75pt 0pt 5.75pt;">&nbsp; <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: center;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="235" src="https://lh6.googleusercontent.com/pqE-IkngVHge74we0EpuaKA8Go_ZtOOAgbDM_XZa7qC2V8D5j9ynGGHiUkLzoxxDe0T7aBqS69a8XsW_k61FQvXV1jZoBYaa4ZR5srtYczSwo8z109NMFm-_X7xbFFh3pVPTjdLJ5boizWoXTw" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="294" /></span></b></p> </td> </tr> </tbody> </table> </div> <p>&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="328" src="https://lh6.googleusercontent.com/-A0dmhyTIP3wP0X3RhkKIioa6K7oMOdILU_MqLrlegZzi2u21owO9LbLc9zbpFPpyM9ZHYZ7IQK5SAE9745tGsDZVbFiFOsQejR3WpGeQaWVChfGQjkxgSTTCi26bNqiI3zLYoIuy_36DXZZug" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="381" /></span></b></p> <p>&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Para “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Sum</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” el código que finalmente se generaría sería el siguiente (podrán apreciar varias oportunidades de optimización):</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Verdana;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="286" src="https://lh6.googleusercontent.com/lwvGMLUa7xg1i-78S01aR2gMMOL_hTFn04UarLhYauz5T-JCpo9kLnhZ37la_am3U_u9wr6mdATiz9Q5OYGKdML4KAJvdmStmlDgjbPHsB9PcRtxyMwqQmKfojiPQQGfsPzUzWqDRwNpY-6rUg" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="326" /></span></b></p> <p>&nbsp;</p> <p dir="ltr" style="line-height:1.295;margin-top:0pt;margin-bottom:8pt;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Para “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Fact</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” el código que finalmente se generaría sería el siguiente (también con varias oportunidades de optimización):</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><img height="311" src="https://lh3.googleusercontent.com/_uHkw5Ki_tNbQkCvjEJSDrtraqYibbLE65C-DFMZzkGu2DwzlMtPyutHczEa88jxGrI1rYxMZht4aAThRaQ4PUNrr-_9XBcGJaK7e2n4jRcbGi6w5f2X6nPlZI88MFDvXCY-mX4l-u4Gwlerew" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" width="403" /></span></b></p> <p>&nbsp;</p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Por definición, el programa principal del </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">parser</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> llamaría a la rutina </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Xpn()</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (dado que es el símbolo no-terminal que actúa como símbolo inicial de la gramática), la cual llamaría a </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Sum()</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> cuando fuera necesario y ésta de igual manera a </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Fact()</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">. Ustedes podrán constatar que ese programa procesa el tipo de expresiones que definimos.</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:4pt;margin-bottom:0pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:12pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Conclusiones </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Utilizando este MF para desarrollar </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">parsers</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> podemos destinar más tiempo al diseño de una gramática que procese el lenguaje que nos interesa, que a la escritura de un programa que lo haga con lo cual podemos desarrollar un lenguaje de mejor calidad; y al no ser necesario atender tantos detalles, habría menos probabilidad de cometer errores (el </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">parser</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> también podría tener mejor calidad), y terminaríamos más rápidamente (la productividad se incrementaría). Además, los GSs son más expresivos, simples y legibles que el pseudocódigo, con lo cual ganaríamos una mejor “mantenibilidad”. </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lo anterior es posible porque se introduce un lenguaje formal de mayor nivel de abstracción (GS), que nos permite no tener que atender detalles poco importantes (como instrucciones en y con </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">if</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">’s, </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">while</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">’s, </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">switch</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">’s, conjuntos, recursiones, etc.) para desarrollar software de una manera más abstracta y sistemática.</span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Si medimos el “tamaño” de del </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">input</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (cantidad de GSs) y del </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">output</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (cantidad de líneas de pseudocódigo) de la subrutina &nbsp;</span><span style="font-size:12pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">C()</span><span style="font-size:12pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;podríamos ver que en general, cuando crece la complejidad del </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">input</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, la complejidad del </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">output</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> puede crecer en un orden de magnitud (10x). Esto es: cuando usamos el MF para desarrollar el </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">parser</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> asociado a una gramática definida con GSs que contienen muchas alternaciones y repeticiones de GSs, la proporción entre el </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">input</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (GSs) y el </span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">output</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> (líneas de pseudocódigo) puede exceder las 10 veces (1,000%). </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Y esa es precisamente la idea detrás del desarrollo de lenguajes propietarios: introducir un lenguaje formal que nos permita subir el nivel de abstracción de lo que hacemos para centrarnos más en actividades como el diseño, y dejar que el compilador del lenguaje propietario genere los detalles (como ocurrió con los lenguajes de alto nivel, que generaban el código en lenguaje máquina asociado a constructos como </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">if</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">’s, </span><span style="font-size:10pt;font-family:'Courier New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">while</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">’s). </span></b></p> <p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:6pt;text-align: justify;"><b id="docs-internal-guid-f1ca9769-7fff-fa54-67c9-23da9dc6568f" style="font-weight:normal;"><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Hacer esto es particularmente relevante en un mundo en el que actualmente en muchas grandes transnacionales tecnológicas, “</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Robots</span><span style="font-size:10pt;font-family:Calibri;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">” &nbsp;realizan funciones como las anteriores y generan la misma cantidad de código (en lenguajes de alto nivel) que el que generan sus ingenieros.</span></b></p> <p><br /> <br /> &nbsp;</p> </div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>Luis Vinicio León Carrillo es Director General y co-fundador de e-Quallity. Antes de fundar e-Quallity fue profesor-investigador en la universidad jesuita ITESO durante varios lustros, que incluyeron una estancia de posgrado en Alemania, durante la cual abordó aspectos relacionados con el Testing y los formal methods and languages.</p> </div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Tue, 15 Jan 2019 20:51:47 +0000 sg 8528 at https://sg.com.mx https://sg.com.mx/revista/58/el-impacto-de-los-lenguajes-propietarios-de-proposito-particular-una-vision-panoramica#comments Semántica Formal https://sg.com.mx/revista/56/semantica-formal <span class="field field--name-title field--type-string field--label-hidden">Semántica Formal</span> <div class="images-container clearfix"> <div class="image-preview clearfix"> <div class="image-wrapper clearfix"> <div class="field field--name-field-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/images/prueba-fig1_0.jpg" width="935" height="593" alt="" typeof="foaf:Image" /> </div> </div> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/1" lang="" about="/user/1" typeof="schema:Person" property="schema:name" datatype="" class="username">sg</a></span> <span class="field field--name-created field--type-created field--label-hidden">Thu, 03/15/2018 - 23:38</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/56" hreflang="und">SG #56</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/secci%C3%B3n-revista/prueba-software" hreflang="und">Prueba de Software</a></li> </ul> </div> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Autor</h3> <ul class='links field__items'> <li><a href="/buzz/autores/luis-vinicio-leon-carrillo" hreflang="und">Luis Vinicio León Carrillo</a></li> <li><a href="/buzz/autores/aaron-moreno-monroy" hreflang="und">Aaron Moreno Monroy</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p><meta charset="utf-8"></p> <p>A lo largo de las entregas anteriores de esta columna, hemos estado revisando varias cosas alrededor de lenguajes: lenguajes naturales (lingüística computacional), lenguajes formales, computer languages (de especificación, de documentación, etcétera), paradigmas y generaciones de lenguajes de programación, y componentes de un compilador.</p> <p dir="ltr">Revisamos la Jerarquía de Chomsky, que se enfoca en la estructura de los lenguajes, razón por la cual se usa para definir la sintaxis de lenguajes formales.</p> <p dir="ltr">Vamos a hacer una breve digresión en este número para platicarles con un poco más de profundidad sobre el tema que mencionamos en nuestra reseña de actividad durante la reunión interina del ISO/IEC JTC1/SC7.</p> <p dir="ltr">La sintaxis de un lenguaje —que como dijimos se refiere a su estructura— es un aspecto muy importante del mismo, y se utiliza ampliamente en el desarrollo de compiladores.</p> <p dir="ltr">La “semántica formal” —que se refiere al significado de un lenguaje—, es muy importante también porque agrega precisión a la definición del lenguaje, pero actualmente no es tan común que se utilice en la construcción de compiladores, lo cual puede conducir a que por ejemplo un programa dado a 2 compiladores diferentes para el mismo lenguaje tenga comportamientos distintos.</p> <p dir="ltr">La semántica define el significado de un lenguaje a partir de los constructos del lenguaje, y con ello también el de los programas escritos en él. Existen varios enfoques para hacerlo; entre los más importantes se encuentran:</p> <ul> <li dir="ltr"> <p dir="ltr">Operacional: se especifica la semántica proporcionando el código fuente de un intérprete que define el comportamiento de los programas de ese lenguaje. Este enfoque, al ser tan operativo, no permite razonar sobre el lenguaje (mediante mecanismos lógico-matemáticos).</p> </li> <li dir="ltr"> <p dir="ltr">Axiomático: la semántica se especifica definiendo una “teoría matemática” para el lenguaje con la cual se puedan probar propiedades de programas escritos en ese lenguaje. El énfasis no está en lo que significa el lenguaje, sino en lo que puede probarse acerca de él.</p> </li> <li dir="ltr"> <p dir="ltr">Denotacional: se especifica la semántica asociando a cada constructo del lenguaje un conjunto de funciones matemáticas que definen los significados denotando conjuntos. La semántica está dada en términos de conjuntos, funciones, relaciones, tuplas, y predicados, así como operaciones sobre ell@s. Este enfoque tiene un nivel de abstracción aún mayor al del enfoque Axiomático.</p> </li> </ul> <p dir="ltr">Las “teorías matemáticas” mencionadas arriba se refieren a sistemas lógicos que constan de:</p> <ol> <li dir="ltr"> <p dir="ltr">Reglas sintácticas para construir fórmulas bien formadas;</p> </li> <li dir="ltr"> <p dir="ltr">Axiomas, que son fórmulas que se consideran “verdaderas”; y</p> </li> <li dir="ltr"> <p dir="ltr">Reglas de inferencia, que permiten partir de los axiomas y generar nuevas fórmulas “verdaderas”, que suelen ser llamadas teoremas.</p> </li> </ol> <p dir="ltr">Algunos de los sistemas lógicos más conocidos y utilizados en las ciencias de la computación son el cálculo proposicional, y el cálculo de predicados de primer orden.</p> <p dir="ltr">Estos sistemas lógicos son algo realmente extraordinario (y muchos de ellos fueron desarrollados en los años 30 del siglo pasado, antes de la Jerarquía de Chomsky), que facilitan el razonamiento semi-automático y el descubrimiento de “verdades lógicas” acerca de programas, por ejemplo.</p> <p dir="ltr">Pero la semántica formal no solo se ha utilizado para especificar el significado de lenguajes, sino también de productos de software, entre otras cosas.</p> <p dir="ltr">Como se mencionó en la reseña de la Reunión de la ISO, uno de los temas que se abordó en el Working Group fue el Model Based Testing. En la siguiente sección vamos a vincular ese tema con lo visto aquí sobre semántica formal.</p> <h3 dir="ltr">Model Based Testing (MBT)</h3> <p dir="ltr">El ser humano ha creado modelos desde hace muchísimo tiempo. Algunos de ellos han resultado ser erróneos (como el de la teoría geocéntrica), otros “simplistas” (como el de la teoría heliocéntrica con círculos representando las órbitas de los planetas), y otros tan cercanos a la realidad que permiten predecir acontecimientos y situaciones con mucha exactitud (como el de la teoría heliocéntrica con elipses describiendo las órbitas de los planetas y apoyado en el formalismo del cálculo infinitesimal).</p> <p dir="ltr">Dependiendo del grado de formalidad y del nivel de abstracción de los modelos, de ellos se puede generar, entre otras cosas: el software mismo, su documentación, o conjuntos de casos de prueba.</p> <p dir="ltr">En general, la complejidad de los mecanismos de refinamiento y el nivel de detalle que se requieren para hacer documentación basada en modelos o testing basado en modelos suelen ser menores que el requerido para hacer desarrollo dirigido por modelos, porque de manera general se requiere menos para definir qué debe hacer un producto de software que para definir cómo debe hacerlo.</p> <p dir="ltr">Por otro lado, el nivel de formalización del modelo determina lo que se puede hacer de manera automática, y la formalización la hacemos precisamente con lenguajes formales —en nuestros ejemplos, el formalismo del cálculo infinitesimal es el que permite realizar cálculos complejos con precisión.</p> <p dir="ltr">Hay una buena cantidad de lenguajes para definir modelos. Podemos clasificarlos considerando qué tan formal es su definición: algunos de ellos son informales (como los lenguajes naturales), otros son semi-formales (como los diagramas de UML), y otros formales (como las máquinas de estados finitos, Larch, Clear, Z y B AMN).</p> <p dir="ltr">Los lenguajes de modelado formales, que son los que más nos interesan, podríamos a la vez clasificarlos de acuerdo a su enfoque teórico en dos grandes categorías:</p> <p dir="ltr">Orientados a Modelos como Z, en el cual se especifica el producto en términos de conjuntos, funciones, relaciones, tuplas, predicados, etcétera, y se hace razonamiento sobre modelos utilizando el cálculo de predicados de primer orden —notarán semejanzas con la semántica denotacional descrita arriba.</p> <p dir="ltr">Orientados a Propiedades, los cuales suelen dividirse en dos categorías:</p> <ul> <li dir="ltr"> <p dir="ltr">Axiomáticos como Larch, en el cual se especifican precondiciones y poscondiciones que describen el comportamiento de cada operación del producto utilizando cálculo predicados de primer orden —notarán semejanzas con la Semántica Axiomática descrita arriba.</p> </li> <li dir="ltr"> <p dir="ltr">Algebraicos como Clear, en el que los axiomas sólo pueden tener la forma de ecuaciones.</p> </li> </ul> <p dir="ltr">Obviando los procesos de soporte, y en el marco del proceso de prueba de software organizacional, si partimos de un modelo especificado en un lenguaje de modelado formal como los que acabamos de describir brevemente, se podría aplicar MBT como se muestra en la figura 1.</p> <p data-entity-type="" data-entity-uuid="" style="text-align: center;"><span><img alt="" data-entity-type="" data-entity-uuid="" height="396" src="https://lh6.googleusercontent.com/U09LldG4hypQPKIEUAYTzm-yGFXWfNWoII8QUPnYiAYu6AcCDIwWhmnktFrmbUUQrz-bKwAiPp0RscIRjWLvG059bRBYVnJE6PiQeS384H43Op9cnzvowSqn0WkUFLob0_MmurHp" style="border: medium none; transform: rotate(0rad);" width="624" /><span title="Click and drag to resize">​</span></span></p> <p class="text-align-center" dir="ltr"><em>Figura 1. Model Based Testing</em></p> <p dir="ltr">La siguiente llave explica el flujo:</p> <p dir="ltr">0. Ideation: ideas acerca de lo que debe hacer el producto de software.</p> <p dir="ltr">1. Sistematización de la información anterior, con lo cual se genera el documento de requerimientos.</p> <p dir="ltr">2. Formalización de los Requerimientos utilizando el lenguaje de modelado.</p> <p dir="ltr">3. Diseño de la Estrategia para MBT considerando contexto, alcance, objetivos y riesgos asociados al producto, así como criterios de terminación para las pruebas.</p> <p dir="ltr">4a. Generación de casos de prueba abstractos (es decir, descritos en el lenguaje de modelado). Eventualmente se realiza en este paso también una minimización y secuenciación de los casos de prueba.</p> <p dir="ltr">5a. Refinamiento de los casos de prueba abstractos para obtener casos de prueba concretos, los cuales podrán estar descritos en un lenguaje natural o en un scripting lenguaje para automatizar las pruebas.</p> <p dir="ltr">6. Ejecución del producto de software a probar, aplicándole los casos de prueba concretos obtenidos.</p> <p dir="ltr">7a. Abstracción de las salidas concretas generadas durante la ejecución, transformándolas en salidas abstractas (es decir, descritos en el lenguaje de modelado).</p> <p dir="ltr">8a. Verificación: usando el modelo como Oráculo, reemplazar cada caso de prueba abstracto y su correspondiente salida abstracta en el modelo; si se reduce a Verdadero, significa que no se detectaron errores; si se reduce a Falso, entonces sí se detectaron. Generar reportes conteniendo esa información y las mediciones que se hayan definido en el Diseño de la Estrategia para MBT.</p> <p dir="ltr">Y si el modelo se analiza durante la Generación de casos de prueba abstractos, se abre también la posibilidad de ejecutar las siguientes actividades:</p> <p dir="ltr">4b. Generación de resultados esperados abstractos (descritos en el lenguaje de modelado).</p> <p dir="ltr">5b. Refinamiento de los casos de prueba abstractos para obtener resultados esperados concretos.</p> <p dir="ltr">6. Ejecución del producto de software a probar.</p> <p dir="ltr">7b. Comparación del resultado esperado concreto con la respectiva salida concreta: si no son iguales, significa que sí se detectaron errores; si son iguales, entonces NO fueron detectados. Generar reportes conteniendo esa información y las mediciones que se hayan definido en el diseño de la estrategia para MBT. Utilizar la información generada como retroalimentación para eventualmente mejorar o corregir el modelo y/o los requerimientos.</p> <p dir="ltr">Utilizar modelos escritos en un lenguaje formal de modelado puede tener un gran alcance. Si se cuenta con mecanismos para refinar el modelo y con suficiente información sobre cómo el producto debe hacer las cosas (y no sólo qué cosas debe hacer), entonces podríamos estar hablando de un Método Formal, con el cual podríamos refinar un modelo para obtener un diseño de alto nivel, luego refinar ese diseño y dejar que el método genere el código asociado.</p> </div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p dir="ltr">Luis Vinicio León Carrillo es Director General de e-Quallity. Realizó estudios de posgrado en Alemania, durante los cuales abordó temas relacionados con la Prueba de software y los Métodos y Lenguajes Formales. Fue profesor-investigador en la universidad ITESO y cofundador del Capítulo Occidente de la AMCIS. Es miembro de la Delegación Mexicana ante la ISO.</p> <p dir="ltr">Aarón Moreno Monroy es Director de Tecnología de e-Quallity. Fue profesor de asignatura den la Universidad ITESO. Estudió la Maestría en Ciencias en el CINVESTAV; su trabajo de tesis tuvo que ver con verificación formal, que aborda la prueba de software utilizando modelos matemáticos. Es miembro de la Delegación Mexicana ante la ISO.</p> </div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Fri, 16 Mar 2018 05:38:30 +0000 sg 8028 at https://sg.com.mx https://sg.com.mx/revista/56/semantica-formal#comments Prueba de Software: Lenguajes de Computación https://sg.com.mx/revista/55/prueba-software-lenguajes-computaci-n <span class="field field--name-title field--type-string field--label-hidden">Prueba de Software: Lenguajes de Computación</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/1" lang="" about="/user/1" typeof="schema:Person" property="schema:name" datatype="" class="username">sg</a></span> <span class="field field--name-created field--type-created field--label-hidden">Mon, 08/21/2017 - 16:12</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/55" hreflang="und">SG #55</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/secci%C3%B3n-revista/prueba-software" hreflang="und">Prueba de Software</a></li> </ul> </div> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Autor</h3> <ul class='links field__items'> <li><a href="/buzz/autores/aaron-moreno-monroy" hreflang="und">Aaron Moreno Monroy</a></li> <li><a href="/buzz/autores/luis-vinicio-leon-carrillo" hreflang="und">Luis Vinicio León Carrillo</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p dir="ltr">Ahora que ya cubrimos algunos fundamentos teóricos, podemos abordar aspectos más prácticos que nos ayuden en nuestro objetivo original de obtener elementos para desarrollar lenguajes propietarios de propósito particular que nos ayuden a incrementar nuestra productividad en el desarrollo de software. Doy la bienvenida a Aarón Moreno, con quien estaré escribiendo en los siguientes números.</p><p dir="ltr">Todos estamos familiarizados con el concepto de Lenguajes de Programación (LPs) y existe bastate literatura sobre el tema (pueden profundizar en mucho de lo que veremos aquí en cualquier libro sobre “Lenguajes de Programación”). Sin embargo, si buscamos incrementar nuestra productividad deberíamos abrir nuestra panorámica y considerar no solo los LPs, sino lo que llamaremos aquí “Lenguajes de Computación” (LCs), concepto que incluye los LPs, pero también los Lenguajes de Documentación (como LaTeX y HTML), de Arquitectura (como ABACUS y CBabel), &nbsp;de Especificación (v.gr. de sanners/parsers como lex/YACC), de Documentación de Procesos (como XPDL y JPDL), y para la Prueba (como LoadRunner y Selenium), entre otros; desarrollar lenguajes propietarios para estas áreas también puede incrementar nuestra productividad. (El tema de este número es “El auto como plataforma de software”; el pasado marzo estuvimos en el CeBIT –exposición tecnológica en Alemania, tal vez la más grande del mundo–, y en ella se mostraron avances en el sector automotriz que por supuesto implican LCs de propósito particular para ese sector.)</p><p dir="ltr">Los LCs (y los LPs en particular) se desarrollan a lo largo de un proceso de sistematización–formalización–automatización durante el cual se va conociendo mejor el área para la cual se diseña el lenguaje (el “Application Domain”).</p><p dir="ltr">Procedamos a abordar nuestro tema apoyándonos en el desarrollo histórico de los LPs, lenguajes por antonomasia entre los LCs.</p><h3 dir="ltr">Lenguajes de Programación (LPs)&nbsp;</h3><p dir="ltr">Cuando los LPs son de propósito general (general purpose languages) tienen constructos que son comunes a muchos otros LPs, tales como mecanismos de secuenciación, alternación y repetición de instrucciones, definidos en el marco de lo que llamamos un Sistema de Control (Control System); &nbsp;y mecanismos de composición de tipos, definidos en el marco de un Sistema de Tipos (Type System). Cuando los LPs son de propósito particular (special purpose languages) tienen además una parte diseñada especialmente para abordar más efectivamente problemas del Dominio de Aplicación, como tipos de datos y estructuras de control ad hoc (v.gr. si el dominio fuera la Matemática, el LP podría tener construcciones y operaciones sobre matrices, entre otras cosas).</p><p dir="ltr">Hoy tenemos LPs incluso para programar videojuegos. Sin embargo, la inquietud que nos llevó a tener LPs no era generar una industria de entretenimiento, ni siquiera una industria de software. Los trabajos sobre los que finalmente se basa esta tecnología fueron principalmente de lógicos-matemáticos-filósofos que querían construir máquinas que pensaran… o “calcularan” (en el sentido lógico-matemático) como decía Leibniz (que por cierto, es lo que aún se busca, varios siglos después).</p><h3 dir="ltr">El Sistema de Control</h3><p dir="ltr">La estructura del Sistema de Control está fuertemente influenciada por el paradigma con el que fue desarrollado el LP (ver sección “Paradigmas” más adelante), pero podemos hablar en general de constructos (o “abstracciones”) como los descritos en la siguiente tabla.</p><p>&nbsp;</p><div dir="ltr"><table><colgroup><col width="161" /><col width="283" /><col width="213" /></colgroup><tbody><tr><td colspan="3"><p dir="ltr">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Abstracciones de Control</p></td></tr><tr><td><p dir="ltr">Primitivas</p></td><td><p dir="ltr">Compuestas</p></td><td><p dir="ltr">De Unidad</p></td></tr><tr><td><p dir="ltr">Instrucciones simples como:</p><ul><li dir="ltr"><p dir="ltr">goto’s,</p></li><li dir="ltr"><p dir="ltr">return’s,</p></li><li dir="ltr"><p dir="ltr">Asignaciones</p></li><li dir="ltr"><p dir="ltr">Llamadas a</p></li></ul><p dir="ltr">subrutinas o macros</p></td><td><p dir="ltr">Instrucciones definidas en términos de otras &nbsp;instrucciones, en particular para construir…</p><ul><li dir="ltr"><p dir="ltr">Altenación: &nbsp;if’s, switch’s</p></li><li dir="ltr"><p dir="ltr">Repetición: while’s, for’s</p></li><li dir="ltr"><p dir="ltr">Secuenciación: bloques begin – end</p></li><li dir="ltr"><p dir="ltr">Bloques de &nbsp;instrucciones en forma de &nbsp;subrutinas (procedimientos, funciones, módulos, etc.) o clases</p></li></ul></td><td><p dir="ltr">Mecanismos para almacenar, en archivos distintos y utilizando mecanismos como include’s, uses’, y sees’, segmentos de código &nbsp;con operaciones relacionadas entre sí bajo algún criterio (“librerías”, clases o Abstract Data Types )</p></td></tr></tbody></table></div><p>&nbsp;</p><h3 dir="ltr">El Sistema de Tipos</h3><p>La estructura del Sistema de Tipos también está influenciada por el paradigma del LP, pero podemos igualmente hablar en general de construcciones (o “abstracciones”) como las descritas en la siguiente tabla.<br /><br /></p><div dir="ltr"><table><colgroup><col width="215" /><col width="265" /><col width="194" /></colgroup><tbody><tr><td colspan="3"><br /><p dir="ltr">Abstracciones de Datos</p></td></tr><tr><td><br /><p dir="ltr">Primitivas</p></td><td><br /><p dir="ltr">Compuestas</p></td><td><br /><p dir="ltr">De Unidad</p></td></tr><tr><td><p dir="ltr">Tipos de datos básicos (y predefinidos) como:</p><ul><li dir="ltr"><p dir="ltr">Ordinales: char, int, boolean, enumerated</p></li><li dir="ltr"><p dir="ltr">Continuos: real (con distintas precisiones)</p></li><li dir="ltr"><p dir="ltr">Apuntadores</p></li><li dir="ltr"><p dir="ltr">“Tipo nulo” o “comodín” (como el void de C)</p></li><li dir="ltr"><p dir="ltr">Rangos</p></li><li dir="ltr"><p dir="ltr">Archivos</p></li></ul></td><td><p dir="ltr">Tipos de datos definidos en términos de otros tipos utilizando Constructores de Tipos como los siguientes:</p><ul><li dir="ltr"><p dir="ltr">Registros (“clásicos” o variables)</p></li><li dir="ltr"><p dir="ltr">Conjuntos</p></li><li dir="ltr"><p dir="ltr">Secuencias (v.gr. arreglos y strings)</p></li><li dir="ltr"><p dir="ltr">Tipos no lineales (v.gr. listas, árboles &nbsp;y grafos)</p></li><li dir="ltr"><p dir="ltr">Clases</p></li></ul></td><td><p dir="ltr">Mecanismos para almacenar, en archivos distintos, segmentos de código &nbsp;con declaraciones/ definiciones de datos y de tipos de dato relacionados entre sí bajo algún criterio (incluyendo clases y Abstract Data Types) utilizando mecanismos como include’s, uses’, y sees’</p></td></tr></tbody></table></div><p>&nbsp;</p><p dir="ltr">El diseño del Sistema de Tipos es una actividad en sí misma por su complejidad y relevancia (define elementos vitales de la semántica del lenguaje).</p><p dir="ltr">La definición del Sistema de Tipos incluye cuestiones muy importantes como las siguientes:</p><ol><li dir="ltr"><p dir="ltr">Chequeo de tipos: Distinguimos entre strongly-typedy weakly-typed languages, dependiendo de la menor o mayor tolerancia a que a las variables de un programa no se les haya asociado explícitamente un tipo de dato. Si el chequeo de esta asociación se realiza en tiempo de compilación hablamos de statically-checked languages; si ocurre en tiempo de ejecución hablamos de dynamically-checked languages.</p></li><li dir="ltr"><p dir="ltr">Equivalencia de tipos: Se definen criterios para determinar cuándo se considera que dos variables tienen el mismo tipo, aunque eventualmente hayan sido declaradas de manera distinta. Algunas alternativas son:</p></li></ol><ul><li dir="ltr"><p dir="ltr">Declaration Equivalence: dos variables tienen tipos equivalentes cuando remiten a la misma declaración de tipo.</p></li><li dir="ltr"><p dir="ltr">Name Equivalence: dos variables tienen tipos equivalentes si fueron declaradas usando el mismo nombre de tipo en el mismo ámbito (scope).</p></li><li dir="ltr"><p dir="ltr">Structural Equivalence: dos variables tienen tipos equivalentes si fueron definidas partiendo de los mismos tipos básicos y utilizando los mismos constructores de tipos.</p></li></ul><ol start="3"><li dir="ltr"><p dir="ltr">Conversión de tipos: Para combinar variables de varios tipos se aplican mecanismos como los siguientes:</p></li></ol><ul><li dir="ltr"><p dir="ltr">Conversión implícita (promotion): como cuando una variable entera es convertida automáticamente a real por aparecer en una expresión real.</p></li><li dir="ltr"><p dir="ltr">Conversión explícita (casting): la que realiza el programador ya sea mediante la utilización de funciones predefinidas, o utilizando facilidades del lenguaje para “asignar tipos”, como el conocido casting.</p></li><li dir="ltr"><p dir="ltr">Generalización de un tipo de una variable a un tipo genérico, como el void del lenguaje C.</p></li></ul><ol start="4"><li dir="ltr"><p dir="ltr">Inferencia de Tipos: Permite deducir el tipo adecuado de v.gr. una subexpresión dentro de una expresión. Es particularmente importante en los weakly-typed languages; el conocido mecanismo de Unificación juega aquí un papel importante.</p></li></ol><h3 dir="ltr">Clasificaciones de Lenguajes de Programación</h3><p>Una manera de ganar perspectiva es mediante una clasificación, pero una taxonomía presupone criterios bajo los cuales clasificar. Para los LP podríamos tomar alguno(s) de los siguientes:</p><ol><li dir="ltr"><p dir="ltr">Su aspecto ante el programador, lo que permite v.gr. distinguir entre lenguajes visuales y textuales.</p></li><li dir="ltr"><p dir="ltr">Su “composición estructural” (y la complejidad de procesar cada lenguaje), lo cual es el origen de jerarquías como la Jerarquía de Lenguajes de Chomsky.</p></li><li dir="ltr"><p dir="ltr">El “marco conceptual” detrás de los programas que se escriben en un lenguaje particular, lo que facilita la clasificación en Paradigmas de LPs.</p></li><li dir="ltr"><p dir="ltr">El “origen cronológico” en el que fueron creados, lo que da pie al concepto de Generaciones de LPs.</p></li></ol><p dir="ltr">Vamos a poner en perspectiva algunos LPs relevantes considerando los 2 últimos criterios (ver figura más adelante).</p><h3 dir="ltr">Paradigmas</h3><p dir="ltr">La primera división usual en términos de paradigmas es la distinción entre lenguajes procedurales y no-procedurales. En los primeros, el programador debe especificar con precisión cómo debe ejecutarse la solución; en los segundos se busca que más bien se especifique qué es lo que debe solucionarse.</p><p dir="ltr">Dentro de los Lenguajes Procedurales tenemos los lenguajes no-estructurados, los estructurados, y losorientados a objetos, que fueron desarrollándose más o menos en ese orden. Podemos observar un incremento en la estructura que se le fue imponiendo al programador para accesar los datos y para escribir (bloques de) instrucciones:</p><ul><li dir="ltr"><p dir="ltr">En los Lenguajes no-Estructurados el programador tenía amplia libertad –aunque no muchas facilidades– para definir datos y manipularlos como y donde le pareciera mejor; tenía también mucha libertad para escribir instrucciones de salto (los famosos goto’s o sus equivalentes), incluso del interior de un bloque de instrucciones al interior de otro.</p></li></ul><p dir="ltr">Esta libertad, o mejor dicho, esta falta de estructura al escribir instrucciones y definiciones de datos (que generaba lo que suele llamarse “código spaghetti”) comenzó a causar grandes problemas en el desarrollo de software. &nbsp;(Ya en 1968, en la First Software Engineering Conference de la OTAN, personalidades de los medios académico e industrial dejaron ver que una “Crisis del Software” era patente. En esa misma reunión se acuñó el término “Software Engineering”.)</p><ul><li dir="ltr"><p dir="ltr">Los Lenguajes Estructurados ofrecen un Sistema de Tipos con tipos básicos y constructores para especificar de manera sistemática tipos compuestos a partir de los básicos. Ofrecen también un conjunto de instrucciones básicas y mecanismos para agruparlas y formar instrucciones (o bloques de instrucciones) compuestas que pueden ejecutarse solo de una manera: comenzando en su único punto de inicio y terminando en su único punto de cierre (Single-Entry, Single-Exit), sin permitir que a través de instrucciones goto (o sus equivalentes) la ejecución del programa salte del interior de una instrucción al interior de otra.</p></li><li dir="ltr"><p dir="ltr">En los Lenguajes Orientados a Objetos ya no se especifica solamente la definición de datos estructurados, sino que se vinculan esos datos con las operaciones (secuencias de instrucciones) válidas aplicables a los mismos. Ya no se puede entonces aplicar una operación cualquiera sobre los datos, sino que debe ser una de las explícitamente vinculadas a éstos.</p></li></ul><p dir="ltr">Los Lenguajes no-Procedurales, por su parte, suelen clasificarse en lenguajes declarativos y lenguajes aplicativos. Suelen ser altamente expresivos (ver sección “Criterios de Diseño” más adelante), weakly-typed y dynamically-checked, y en ellos tanto los datos como los programas suelen tener una representación uniforme común, todo lo cual los hace aptos para el desarrollo de prototipos:</p><ul><li dir="ltr"><p dir="ltr">En los Lenguajes Declarativos (llamados también Lenguajes Lógicos), el qué debe hacer la computadora se suele especificar en términos de conjunciones, disyunciones, negaciones, e implicaciones lógicas. La repetición del equivalente a las “instrucciones” suele realizarse mediante de recursión.</p></li><li dir="ltr"><p dir="ltr">En los Lenguajes Aplicativos (llamados también Lenguajes Funcionales), la especificación de la solución se hace en términos de procesos llamados funciones (asemejando las utilizadas en las matemáticas). Una representación común para datos y programas son las listas (como en LISP, lenguaje prototipotípico de este paradigma), y usualmente tienen la recursión como un mecanismo de repetición.</p></li></ul><h3>Generaciones</h3><p dir="ltr">Utilizando esta clasificación, los LPs se suelen agrupar como sigue:</p><p dir="ltr">La 1ª Generación de LPs la componen los primeros lenguajes de bajo nivel (low-level Languages) como los lenguajes ensambladores y los “lenguajes máquina”.</p><p dir="ltr">Los primeros programas de software fueron escritos en lenguaje máquina. La inserción de una nueva instrucción podía requerir tener que revisar manualmente el programa completo, lo cual motivó el desarrollo de Ensambladores Simbólicos, que hacían actualización automática de referencias y permitían utilizar nemónicos en lugar de códigos de operación de instrucciones. Los posteriores Procesadores de Macros fueron más allá y permitieron que un solo símbolo fuera sustituido por una secuencia de instrucciones.</p><p dir="ltr">La 2ª Generación la conforman los primeros lenguajes de alto nivel (high-level Languages) de propósito general (general purpose Languages) (aunque prácticamente solo se usaban en la ciencia). Para desarrollarlos se habían detectado patrones de construcciones comunes, como la evaluación de expresiones aritmético-algebraicas, el llamado a subrutinas, y las instrucciones de alternación (como el “if”) y de repetición (como el “while”).</p><p dir="ltr">La 3ª Generación incluye lenguajes de propósito general de alto nivel estructurados, en los que solo se permiten instrucciones estructuradas (Single-Entry, Single-Exit) y no instrucciones goto.&nbsp; Para desarrollarlos se habían detectado también patrones en el uso de datos, que condujeron al desarrollo de Sistema de Tipos que incluían tipos básicos y constructores de tipos. Vino la introducción de módulos, que permitió “aislar” subrutinas y tipos de datos para impedir su modificación, y proveer solamente interfaces para el uso de los mismos a (el resto de) los programadores.</p><p dir="ltr">Con la 4ª &nbsp;Generación se asocian lenguajes de propósito particular(special purpose Languages), diseñados para realizar con facilidad tareas en un área de aplicación específica (como lenguajes para Manejadores de Bases de Datos (SQL) y para desarrollar Compiladores (lex/YACC)). Suelen tener constructos no-procedurales.</p><p dir="ltr">Con la 5ª Generación se asocian lenguajes de muy alto nivel (very high-level Languages), que fueron utilizados principalmente en la Inteligencia Artificial “clásica” (no en la “nouvelle AI” actual) para hacer por ejemplo Procesamiento de Lenguaje Natural o Razonamiento Automático, y para desarrollar Sistemas Expertos. Se trata de LPs escencialmente no-procedurales. En esta generación renació un interés por continuar los trabajos procedentes del Paradigma Funcional.</p><p>&nbsp;</p><p dir="ltr"><img src="https://lh3.googleusercontent.com/evUmhz2bR18RMtjcGY8s2eCSzoNJJTdthJE4m7CNL362ZOSoAz2YtM627v6Rm6LcFLfpqHvh841OAXqDdXW_C1IL5xn8FrGUIrX7xsJwPgUt2z5BuM1kxtFE0l-Q493g1yHvr1y4ThvKk1bnNw" width="673" height="485" /></p><p dir="ltr">&nbsp;</p><h3 dir="ltr">Desarrollo histórico</h3><p dir="ltr">Muy probablemente habrán visto en una de las columnas de Hanna Oktaba la ilustración de lo que el autor podría llamar “La Torre de Babel de los LPs”. Y es que a lo largo del tiempo se han desarrollado muchos LPs.</p><p>Aquí listamos descripciones breves sólo de aquellos LPs que han tenido gran relevancia en el desarrollo de la informática (ver figura de arriba), y &nbsp;que sentaron las bases para LPs posteriores hasta llegar a los utilizados en la actualidad (Java, .net, PHP, HTML, Delphi, C y C++, así como scripting languages).<br /><br /></p><ol><li dir="ltr"><p dir="ltr">FORTRAN (FORmula TRANslation) fue desarrollado en la IBM (1957) por un grupo encabezado por John Backus. Uno de los criterios más importantes para su implantación fue la eficiencia del código generado por el compilador. FORTRAN “introdujo”, entre otras cosas, los arreglos, la instrucción de alternación “if”, y los ciclos controlados por una variable indexada. Los programas debían escribirse con un formato léxico fijo (fixed-format), en el cual v.gr. ciertas cosas tenían que escribirse en columnas preestablecidas.</p></li><li dir="ltr"><p dir="ltr">Plankalkül&nbsp;(“Cálculo de Planes”) fue en los hechos el primer LP de alto nivel. Fue desarrollado (1944) por el alemán Konrad Zuse para la Z3, primera computadora programable moderna, desarrollada también por él (1941). Plankalkül incluía, entre otros constructos: instrucciones de asignación, condicionales e iterativas; subrutinas; aritmética de punto flotante; manejo de excepciones; arreglos, registros y grafos. El diseño de Plankalkül estuvo influenciado por los trabajos en lógica matemática de Gottlob Frege (de finales del siglo XIX), y los de éste por los de Leibniz (de finales del siglo XVII).</p></li></ol><ol start="2"><li dir="ltr"><p dir="ltr">LISP (LISt Processor) fue diseñado en el Massachussets Institute of Technology (MIT) por John McCarthy (1958). A LISP se le considera el LP funcional por excelencia. Su diseño se basó en la idea de la aplicación de funciones como noción fundamental de cómputo, y estuvo influenciado por los trabajos en el Cálculo Lambda de Alonzo Church. Introdujo conceptos como árboles (las estructuras de datos), dynamic Typing, Funciones de Orden Superior, Recursión, linked lists, el método “Garbage Collection” para recuperar de manera automática la memoria que los programas ya no utilizaban, así como las S-Expressions (Symbolic-Expressions), que son constructos con los cuales se expresan tanto los datos como los programas, lo cual permite a los programadores agregar nuevos elementos sintácticos al lenguaje y crear ligeras variantes del mismo.</p></li></ol><ol start="3"><li dir="ltr"><p dir="ltr">COBOL (COmmon Business Oriented Language) fue desarrollado en el Department of Defense de los EEUU (1960). Es quizás aún el lenguaje de programación más utilizado. Introdujo la estructura registro, la idea de separar los datos del programa colocándolos en secciones diferentes, y el formateo de la impresión en pantalla usando pictures. Los programas podían escribirse sin un fixed-format. Un criterio para su diseño fue que su sintaxis fuera English-like, lo que lo hace, en no pocos casos, caer en descripciones con exceso de palabras.</p></li></ol><ol start="4"><li dir="ltr"><p dir="ltr">ALGOL-60 (ALGOrithmic Language) fue desarrollado por un comité (1960). Tuvo una enorme influencia en el desarrollo posterior de los lenguajes de programación. Introdujo instrucciones estructuradas(“single-entry, &nbsp;single-exit”), declaraciones de tipos, paso de parámetros por valor, y fue el primer lenguaje en el que se utilizó BNF (Backus-Naur Form) para definir la sintaxis.</p></li><li dir="ltr"><p dir="ltr">BASIC (Beginners All-purpose Symbolic Instruction Code) fue desarrollado por &nbsp;<a href="https://en.wikipedia.org/wiki/John_G._Kemeny">John G. Kemeny</a>&nbsp;and&nbsp;<a href="https://en.wikipedia.org/wiki/Thomas_E._Kurtz">Thomas E. Kurtz</a> en el Dartmouth College, EEUU (1964), para hacer accesible la programación a estudiantes (no solo &nbsp;a científicos). Ha sido el primer lenguaje de muchos programadores.</p></li><li dir="ltr"><p dir="ltr">Simula-I (principios de los 60’s). Introdujo el concepto de clase y se le considera el primer lenguaje de programación orientado a objetos. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p></li></ol><ol start="7"><li dir="ltr"><p dir="ltr">Pascal fue diseñado por el suizo Niklaus Wirth (1969), destilando ideas de ALGOL-60 en un lenguaje pequeño, simple y estructurado. Fue muy utilizado.</p></li></ol><ol start="8"><li dir="ltr"><p dir="ltr">C fue desarrollado por Dennis Ritchie en los Bell Labs (1972), con el objetivo de crear un lenguaje sencillo, reduciendo la complejidad del Sistema de Tipos y el ambiente de tiempo de ejecución (run-time environment). Es muy portable y ofrece grandes facilidades para accesar directamente los dispositivos de la computadora, lo que lo hace apto para el desarrollo de sistemas (que incluyen hardware).</p></li></ol><ol start="9"><li dir="ltr"><p dir="ltr">PROLOG (PROgramming in LOGic) fue desarrollado por un grupo en Marsella dirigido por A. Colmerauer (comenzando en 1972). Se trata fundamentalmente de un demostrador de teoremas. Se ha utilizado para hacer procesamiento de lenguaje natural y razonamiento automático, y fue escogido por los japoneses para su Proyecto de 5ª Generación de Computadoras.</p></li></ol><ol start="10"><li dir="ltr"><p dir="ltr">Scheme es un dialecto de LISP desarrollado en el MIT (1978).</p></li></ol><ol start="11"><li dir="ltr"><p dir="ltr">Smalltalk fue desarrollado en Xerox Corporation’s Palo Alto Research Center (1972-1980) para aplicar el enfoque orientado a objetos en una forma completamente consistente. Se le considera el ejemplo más puro de un lenguaje orientado a objetos.</p></li></ol><h3>Criterios de Diseño</h3><p dir="ltr">Ahora bien, cuando diseñamos un LC, debemos considerar los objetivos que se persiguen con él. Tomando en cuenta eso y que el lenguaje propietario que queremos desarrollar muy probablemente no generará código objeto sino código en el LP de alto nivel que ahora utilizamos para desarrollar software, describimos enseguida varias características que podrían ser deseables en el diseño de nuestro lenguaje propietario.</p><ol><li dir="ltr"><p dir="ltr">Simplicidad</p></li></ol><p dir="ltr">Este criterio está vinculado con la Legibilidad: a mayor simplicidad, mayor legibilidad. La simplicidad facilta el uso del lenguaje; sin embargo, hay que considerar que "Everything should be made as simple as possible, but not simpler", pues la sobresimplificación hace engorroso el uso del lenguaje, le resta Expresividad, y lo deja sujeto a muchas restricciones. Las características de Generalidad, Ortogonalidad y Uniformidad conllevan frecuentemente a una disminución de la Simplicidad.</p><p dir="ltr">Ejemplos:</p><ul><li dir="ltr"><p dir="ltr">BASIC: La falta de constructos fundamentales, como declaraciones y bloques, hace más difícil la programación de aplicaciones grandes.</p></li><li dir="ltr"><p dir="ltr">LISP, PROLOG: pocos constructos básicos facilitan las cosas, pero se depende de un sistema de ejecución complejo.</p></li></ul><ol start="2"><li dir="ltr"><p dir="ltr">Legibilidad</p></li></ol><p dir="ltr">Facilidad con la que alguien no-experto puede leer programas escritos en ese lenguaje y entenderlos. Tiene relación con lo que llamaríamos Mantenibilidad, que es la facilidad con la que puede modificarse un programa (v.gr. detectar y corregir errores, y agregar funcionalidad).</p><ol start="3"><li dir="ltr"><p dir="ltr">Expresividad</p></li></ol><p dir="ltr">Facilidad con la cual, escribiendo poco código, se pueden expresar procesos y estructuras complejos.</p><p dir="ltr">Esto es muy claro cuando comparamos un lenguaje de alto nivel con uno de bajo nivel, pero aquí hay otros Ejemplos:</p><ul><li dir="ltr"><p dir="ltr">La posibilidad de utilizar recursión permite resolver ciertos problemas con pocas instrucciones.</p></li><li dir="ltr"><p dir="ltr">En LISP, durante la ejecución de un programa, se pueden modificar no solo los datos sino también el programa mismo.</p></li></ul><p dir="ltr">La Expresividad puede entrar en conflicto con la Simplicidad, como por Ejemplo: &nbsp;</p><ul><li dir="ltr"><p dir="ltr">PROLOG es muy expresivo, pero no simple.</p></li><li dir="ltr"><p dir="ltr">C es expresivo, pero instrucciones como &nbsp;&nbsp;while ( *s++ &nbsp;= &nbsp;*t++ ) no son tan fáciles de entender para un novato.</p></li></ul><ol start="4"><li dir="ltr"><p dir="ltr">Generalidad</p></li></ol><p dir="ltr">Facilidad para combinar constructos estrechamente relacionados en uno solo más general, sin necesidad de casos especiales.</p><p dir="ltr">Ejemplos:</p><ul><li dir="ltr"><p dir="ltr">Pascal tiene declaración de procedimientos y paso de procedimientos como parámetros, pero no tiene variables que tomen procedimientos como valores.</p></li><li dir="ltr"><p dir="ltr">En Pascal el operador &nbsp;de comparación " = " &nbsp;puede ser aplicado solamente a escalares, apuntadores y conjuntos, pero no a arreglos y registros.</p></li></ul><ol start="5"><li dir="ltr"><p dir="ltr">Ortogonalidad</p></li></ol><p dir="ltr">Permite que los constructos del lenguaje puedan ser combinados de cualquier manera que haga sentido, pero al mismo tiempo impide que la interacción entre diferentes constructos, o el contexto en que se están usando, causen restricciones o comportamientos inesperados o inadecuados.</p><p dir="ltr">Ejemplos:</p><ul><li dir="ltr"><p dir="ltr">En C una función puede retornar valores de cualquier tipo de datos excepto arreglos.</p></li><li dir="ltr"><p dir="ltr">En C se pueden pasar todos los parámetros por valor, excepto los arreglos, que deben pasarse por referencia.</p></li></ul><ol start="6"><li dir="ltr"><p dir="ltr">Uniformidad</p></li></ol><p dir="ltr">Consistencia en la apariencia y comportamiento de los constructos del lenguaje:</p><ul><li dir="ltr"><p dir="ltr">Evitar que cosas no similares se vean o se comporten de manera similar.</p></li><li dir="ltr"><p dir="ltr">Evitar que cosas similares se vean o comporten de manera distinta.</p></li></ul><p dir="ltr">Ejemplos:</p><ul><li dir="ltr"><p dir="ltr">En Pascal el constructo repeat–until abre y cierra un bloque de &nbsp;instrucciones, mientras que las instrucciones 'while' e 'if' requieren de pares 'begin' - 'end’.</p></li><li dir="ltr"><p dir="ltr">En Pascal se utiliza &nbsp;";" para separar instrucciones, pero también para terminar una declaración.</p></li></ul><ol start="7"><li dir="ltr"><p dir="ltr">Extensibilidad</p></li></ol><p dir="ltr">Existencia de un mecanismo general que permita al programador añadir nuevas características al lenguaje. (No se consideran extensiones la definición de nuevos tipos de datos, ni la definición de funciones nuevas en una librería.)</p><p dir="ltr">Ejemplo:</p><ul><li dir="ltr"><p dir="ltr">Añadir nuevas palabras clave y constructos (como matrices, números complejos, etc.). LISP v.gr., permite extender su sintaxis.</p></li></ul><p dir="ltr">Continuamos en la siguiente columna!</p><p>&nbsp;</p><p>&nbsp;</p></div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p dir="ltr">Aarón Moreno Monroy es Director de Operaciones y co-fundador de e-Quallity. Fue profesor de asignatura de la Universidad ITESO. Estudió su maestría en el CINVESTAV; su trabajo de tesis tuvo que ver con verificación formal, la cual aborda la prueba de software utilizando modelos matemáticos.</p></div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Mon, 21 Aug 2017 21:12:11 +0000 sg 7742 at https://sg.com.mx https://sg.com.mx/revista/55/prueba-software-lenguajes-computaci-n#comments La prueba de software y los special purpose languages https://sg.com.mx/revista/54/la-prueba-software-y-los-special-purpose-languages <span class="field field--name-title field--type-string field--label-hidden">La prueba de software y los special purpose languages</span> <div class="images-container clearfix"> <div class="image-preview clearfix"> <div class="image-wrapper clearfix"> <div class="field field--name-field-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/images/automata.png" width="641" height="188" alt="" typeof="foaf:Image" /> </div> </div> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/47654" lang="" about="/user/47654" typeof="schema:Person" property="schema:name" datatype="" class="username">ana2lp</a></span> <span class="field field--name-created field--type-created field--label-hidden">Wed, 05/03/2017 - 16:11</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/54" hreflang="und">SG #54</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/secci%C3%B3n-revista/prueba-software" hreflang="und">Prueba de Software</a></li> </ul> </div> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Autor</h3> <ul class='links field__items'> <li><a href="/buzz/autores/luis-vinicio-leon-carrillo" hreflang="und">Luis Vinicio León Carrillo</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>PARTE 6. Máquinas Abstractas y Lenguajes&nbsp;</p><p dir="ltr"><span>Comenzamos abordando los lenguajes formales de una manera más bien no-procedural, en términos algebraicos y de conjuntos; después lo hicimos de una forma más procedural, utilizando gramáticas. En este número los abordaremos con un enfoque </span><span>muy</span><span> procedural, mediante Máquinas de (Conjuntos de) Estados Finitos (o </span><span>Finite States Machines</span><span>), </span><span>MEFs</span><span>. </span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Pero antes de continuar: dado que en el número anterior no aparecieron referencias bibliográficas, las anexo al final de esta columna. Si quisieran profundizar en lo que abordaremos en este número, pueden consultar algún texto sobre Análisis y Diseño de Algoritmos (en particular la sección de </span><span>NP-Completeness</span><span>). Y (como creo haber dicho) si quisieran ahondar en los otros temas que hemos abordado pueden consultar textos sobre Autómatas y Lenguajes Formales y Compiladores. </span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Sin pretensión de tratar de ser exhaustivos aquí, y limitándonos solo a la formalidad suficiente para poder ser claros (aunque sacrificando precisión), vayamos a nuestro tema.</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Máquinas de (Conjuntos de) Estados Finitos (MEFs)</span></p><p dir="ltr"><span>Las Máquinas de Turing (ver definición más adelante) son un tipo de MEFs con las que se abordó la cuestión de la “</span><span>computabilidad</span><span>” (otro enfoque fueron las </span><span>funciones recursivas</span><span>), tratando de descubrir los alcances y las limitaciones de las máquinas (computadoras) que estaban construyéndose/por construirse (Turing publicó su trabajo más importante en 1936).</span></p><p dir="ltr">&nbsp;</p><p dir="ltr"><span>Las MEFs que presentaremos aquí tienen en común que: </span></p><ul><li dir="ltr"><p dir="ltr"><span>están constituidas por un conjunto finito de estados en los que la MEF puede encontrarse cuando procesa la cadena de entrada; hay un estado inicial en que la MEF comienza su procesamiento y un estado (o más, dependiendo del tipo de MEF) en el (los) que puede terminarlo;</span></p></li><li dir="ltr"><p dir="ltr"><span>los símbolos que conforman la cadena de entrada son elementos de un conjunto finito (el “Alfabeto”); </span></p></li><li dir="ltr"><p dir="ltr"><span>las operaciones de la MEF se definen mediante una relación (en el sentido matemático) de transición </span><span>ρ </span><span>&nbsp;, que toma el estado en el que se encuentra la MEF en ese momento y el símbolo actual de la cadena de entrada (y, como veremos, eventualmente otras cosas, dependiendo del tipo de MEF), y regresa el estado al que la MEF debe moverse (y eventualmente otras cosas, como veremos); si la relación de transición </span><span>ρ </span><span>&nbsp;es una función (en el sentido matemático), entonces se le denota con </span><span>δ</span><span>&nbsp;y se dice que la MEF es determinística, en caso contrario se denota con </span><span>ρ </span><span>&nbsp;y se dice que es no-determinística.</span></p></li></ul><p dir="ltr"><span>Aquí usaremos dos convenciones: a) considerar que la MEF termina su procesamiento indicando que no acepta la cadena de entrada cuando alcanza una transición en la relación/función de transición que no haya sido explicitada; y b) mostraremos la MEF mediante un grafo, en el cual los nodos serán los estados y en las aristas colocaremos los elementos que terminen de definir las transiciones de la relación/función de tansición.</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Veamos ahora las MEFs particulares.</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Autómatas Finitos (AFs)</span></p><p dir="ltr"><span>Los AFs (ó </span><span>Finite Automata</span><span>) se definen como quíntuples de la forma &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>AF </span><span>= </span><span>〈</span><span>S,ι, F, A, ρ </span><span>〉</span><span>&nbsp;</span><span>, &nbsp;&nbsp;&nbsp;&nbsp;en los cuales &nbsp;&nbsp;&nbsp;</span></p><p dir="ltr"><span>S</span><span> &nbsp;&nbsp;&nbsp;es el conjunto de eStados, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>ι</span><span>&nbsp;&nbsp;( </span><span>∈</span><span>S </span><span>) es el estado </span><span>i</span><span>nicial,</span></p><p dir="ltr"><span>F</span><span> &nbsp;&nbsp;( </span><span>⊂</span><span>S </span><span>) es el conjunto de estados Finales, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>A</span><span> &nbsp;&nbsp;es el Alfabeto del lenguaje de la cadena de entrada, &nbsp;&nbsp;y &nbsp;</span></p><p dir="ltr"><span>ρ &nbsp;</span><span>(</span><span>ó </span><span>δ</span><span>&nbsp;)</span><span>&nbsp;&nbsp;</span><span>es la Relación (ó Función) de transición &nbsp;&nbsp;&nbsp;</span><span>ρ </span><span>(</span><span>ó </span><span>δ</span><span>&nbsp;</span><span>)</span><span> : </span><span>(</span><span> s</span><span>1</span><span>, a </span><span>&nbsp;</span><span>)</span><span>→</span><span> &nbsp;s</span><span>2</span><span> , </span><span>para &nbsp;&nbsp;&nbsp;</span><span>s</span><span>1</span><span>, s</span><span>2 </span><span>∈ S, &nbsp;&nbsp;a ∈ A.</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Como podrá verificarse, el siguiente AF es determinístico y procesa el lenguaje &nbsp;&nbsp;&nbsp;</span><span>a</span><span>m</span><span> b</span><span>n</span><span> e</span><span>i</span><span>d</span><span>k</span><span> &nbsp;</span><span>, &nbsp;</span><span>para </span><span>m, n, i, k </span><span>&nbsp;</span><span>≥</span><span>1</span><span> e independientes entre sí. </span></p><p dir="ltr"><span><img src="https://lh4.googleusercontent.com/vb9loow2v9mP_IVxu1KRjOtGWS6Q5GyuldHc-CAg7VyEUGpEwekr2_m0YfdwG1lCTY_OBLegnfOHcmpaTVoaDH8c_Q7NBlTf0lM-66OXmJwUI0S66LZEmITOSGI54DEPdc5uXqsrpa58L9YSHQ" width="340" height="79" /></span></p><p dir="ltr"><span>El AF inicia el procesamiento en el estado </span><span>ι</span><span>; lee una </span><span>a</span><span> &nbsp;de la cadena de entrada y pasa al </span><span>Estado 1</span><span>, en el cual lee cero más &nbsp;</span><span>a’</span><span>s (la transición es un ciclo); después procesa una o más &nbsp;</span><span>b’</span><span>s (al menos una), luego una o más &nbsp;</span><span>e’</span><span>s (al menos una), y finalmente una o más &nbsp;</span><span>d’</span><span>s (al &nbsp;menos una). Siguiendo nuestra convención, si nos encontráramos en el </span><span>Estado 2</span><span> y en la cadena de entrada no tuviéramos una </span><span>b</span><span> o una </span><span>c</span><span> el autómata no aceptaría la cadena y terminaría su procesamiento.</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Se ha demostrado que los AFs procesan solamente los Lenguajes Regulares (pero todos ellos). En particular, no pueden procesar los Lenguajes Libres de Contexto porque no tienen memoria que les permita empatar caracteres por pares, como lo requieren este tipo de lenguajes.</span></p><p dir="ltr"><span>Se ha demostrado también que en el caso de los AFs el no-determinismo no implica mayor poder de procesamiento.</span></p><p dir="ltr"><span>Igualmente, se ha demostrado que para cada Expresión Regular existe un AF que procesa el mismo lenguaje y viceversa (de hecho, lo usual es que las herramientas que procesan textos mediante Expresiones Regulares primero las transformen en AFs &nbsp;–como las usadas para definir analizadores léxicos </span><span>lex</span><span> y </span><span>flex</span><span>).</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Autómatas de Pila (APs)</span></p><p dir="ltr"><span>Los APs (ó </span><span>Push Down Automata</span><span>) se definen como séxtuples de la forma &nbsp;&nbsp;&nbsp;</span><span>AP </span><span>= </span><span>〈</span><span>S,ι, F, A, Σ, ρ </span><span>〉</span><span>, &nbsp;&nbsp;&nbsp;en los cuales &nbsp;&nbsp;</span></p><p dir="ltr"><span>S</span><span> &nbsp;&nbsp;&nbsp;es el conjunto de eStados,</span><span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>ι</span><span> &nbsp;</span><span>&nbsp;&nbsp;( </span><span>∈</span><span>S </span><span>) es el estado </span><span>i</span><span>nicial,</span></p><p dir="ltr"><span>F</span><span> &nbsp;( </span><span>⊂</span><span>S </span><span>) es el conjunto de estados Finales, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>A</span><span> &nbsp;&nbsp;es el Alfabeto del lenguaje de la cadena de entrada, &nbsp;&nbsp;</span></p><p dir="ltr"><span>Σ &nbsp;&nbsp;</span><span>es el alfabeto de la pila (o </span><span>Stack</span><span>), que es el tipo de memoria que tienen los APs &nbsp;( </span><span>#</span><span>∈</span><span>Σ , A </span><span>⊂</span><span>Σ &nbsp;</span><span>) , &nbsp;&nbsp;y </span><span>&nbsp;</span></p><p dir="ltr"><span>ρ &nbsp;</span><span>(</span><span>ó </span><span>δ</span><span>)</span><span>es la Relación (ó Función) de transición &nbsp;</span><span>ρ </span><span>(ó</span><span> δ</span><span>) </span><span>: </span><span>( </span><span>s</span><span>1</span><span>, a, σ</span><span>1 </span><span>) → (</span><span> σ</span><span>2 </span><span>, s</span><span>2</span><span>)</span><span>, </span><span>para </span><span>s</span><span>1</span><span>, </span><span>s</span><span>2</span><span> ∈ S, a ∈ A, σ</span><span>1</span><span>, σ</span><span>2</span><span>∈</span><span>Σ.</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Como podrá verificarse, el siguiente AP es determinístico y procesa el lenguaje &nbsp;&nbsp;&nbsp;&nbsp;</span><span>a</span><span>i</span><span> b</span><span>n</span><span> e</span><span>n</span><span>d</span><span> i</span><span> &nbsp;</span><span>, &nbsp;</span><span>para </span><span>n, i</span><span>≥</span><span> &nbsp;</span><span>1</span><span>.</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span><img src="https://lh3.googleusercontent.com/qfPcOPhPrYw9fMHyZ9X0lqnAuMv41u5fgbFGLRoi5qrkMHUdoJZd8-XsJwwIIWPgy5FpCwtQjJYJwAOdRFjcqQi1X2xMgOOGXGNISyTt3znEMcGaqAA-MG7FlAXsioJlXS0vNWGk-jwmk7dyzQ" width="561" height="105" /></span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Iniciamos en </span><span>ι</span><span> y pasamos al </span><span>Estado 1</span><span> sin leer símbolos la cadena de entrada (eso significa la primera </span><span>λ</span><span> de la primera transición), no sacamos elemento alguno de la pila (eso significa la segunda </span><span>λ</span><span>) y metemos “</span><span>#</span><span>” a la pila.</span></p><p dir="ltr"><span>Del </span><span>Estado 1</span><span> pasamos al </span><span>Estado 2</span><span> leyendo una </span><span>a </span><span>de la cadena de entrada sin sacar elemento alguno de la pila y metiendo una </span><span>a </span><span>a la pila. En el </span><span>Estado 2</span><span> repetimos cero o más veces lo siguiente (la transición es un ciclo): leer una </span><span>a </span><span>de la cadena de entrada, no sacar elemento alguno de la pila y meter una </span><span>a</span><span> a la pila. </span></p><p dir="ltr"><span>En las siguientes transiciones (hasta la del </span><span>Estado 3</span><span>) ejecutamos un proceso semejante al anterior pero ahora con las </span><span>b</span><span>´s: por cada </span><span>b</span><span> que leemos de la cadena metemos una </span><span>b</span><span> a la pila.</span></p><p dir="ltr"><span>Las 2 transiciones subsiguientes (hasta la del </span><span>Estado 4</span><span>) se ocupan de sacar una </span><span>b</span><span> de la pila por cada </span><span>e</span><span> que se lee de la cadena de entrada. </span></p><p dir="ltr"><span>Las 2 transiciones subsiguientes (hasta la del </span><span>Estado 5</span><span>) sacan una </span><span>a</span><span> de la pila por cada </span><span>d</span><span> que lean de la cadena de entrada.</span></p><p dir="ltr"><span>La última transición no lee elemento alguno de la cadena de entrada y saca el </span><span>#</span><span> de la pila sin meter elemento alguno en ella.</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Se ha demostrado que los APs procesan solamente los Lenguajes Libres de Contexto (pero todos ellos). En particular, no pueden procesar los Lenguajes Sensibles al Contexto porque la pila sólo les permita empatar caracteres por pares anidados y no en tercias o por pares no anidados, como lo requieren algunos lenguajes de este tipo.</span></p><p dir="ltr"><span>También se ha demostrado que para los AP el no-determinismo sí implica mayor poder de procesamiento, por lo que en los Lenguajes Libres de Contexto (LLC) tenemos los LLC no-determinísticos englobando a los LLC determinísticos. </span></p><p dir="ltr"><span>Un caso concreto es el lenguaje &nbsp;&nbsp;&nbsp;</span><span>a</span><span>i</span><span> b</span><span>i</span><span>∪ </span><span>a</span><span>i</span><span> b</span><span>2i</span><span> &nbsp;</span><span>, &nbsp;</span><span>para </span><span>m, i </span><span>&nbsp;</span><span>≥</span><span> &nbsp;</span><span>0 &nbsp;&nbsp;</span><span>que es un LLC para el que no existe un AP determinístico que lo procese.</span></p><p dir="ltr"><span>Igualmente, se ha demostrado que para cada Gramática Libre de Contexto existe un AP que procesa el mismo lenguaje, y viceversa (de hecho, lo usual es que las herramientas que procesan ese tipo de gramáticas (“determinísticas”) primero las transformen en APs (determinísticos) &nbsp;–como las usadas para definir analizadores sintácticos </span><span>yacc</span><span> y </span><span>bison</span><span>).</span></p><p><span><span>&nbsp;</span></span></p><ol><li dir="ltr"><p dir="ltr"><span>Máquinas de Turing (MTs)</span></p></li></ol><p dir="ltr"><span>Las MT (ó </span><span>Turing Machines</span><span>) se definen como séxtuples de la forma &nbsp;&nbsp;&nbsp;</span><span>MT </span><span>= </span><span>〈</span><span>S,ι, h, A, Γ, ρ </span><span>〉</span><span>, &nbsp;&nbsp;&nbsp;en los cuales &nbsp;&nbsp;</span></p><p dir="ltr"><span>S</span><span> &nbsp;&nbsp;&nbsp;es el conjunto de eStados del AF, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>ι</span><span> &nbsp;</span><span>&nbsp;&nbsp;( </span><span>∈</span><span>S </span><span>) es el estado </span><span>i</span><span>nicial,</span></p><p dir="ltr"><span>h</span><span> &nbsp;&nbsp;(</span><span>∈</span><span>S </span><span>) es </span><span>el</span><span> estado Final, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>A</span><span> &nbsp;&nbsp;es el Alfabeto del lenguaje de la cadena de entrada, &nbsp;&nbsp;</span></p><p dir="ltr"><span>Π &nbsp;</span><span>es el alfabeto de la cinta de Procesamiento, el tipo de memoria que tienen las MTs &nbsp;&nbsp;&nbsp;( </span><span>#</span><span>, </span><span>$</span><span>∈</span><span>Σ ; A </span><span>⊂</span><span>Π &nbsp;&nbsp;</span><span>), &nbsp;&nbsp;&nbsp;y </span><span>&nbsp;&nbsp;</span></p><p dir="ltr"><span>ρ &nbsp;</span><span>(</span><span>ó </span><span>δ</span><span>)</span><span>es la Relación (ó Función) de transición &nbsp;</span><span>ρ </span><span>(</span><span>ó </span><span>δ</span><span>) </span><span>: </span><span>( </span><span>s</span><span>1</span><span>, π</span><span>1 </span><span>) → ( </span><span>π</span><span>2 </span><span>,μ, s</span><span>2</span><span>)</span><span>, </span><span>para &nbsp;&nbsp;&nbsp;</span><span>s</span><span>1</span><span>, </span><span>s</span><span>2</span><span> ∈ S, &nbsp;&nbsp;&nbsp;π</span><span>1 </span><span>, π</span><span>2 </span><span>∈</span><span>Π</span><span>,</span></p><p dir="ltr"><span>μ = L </span><span>(mover la cabeza a la celda de la derecha) ó </span><span>μ = R</span><span> (moverla a la de la izquierda).</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>En el caso de las MT tomaremos la convención de que la cadena de entrada se coloca en la cinta de la siguiente manera: primero se coloca un “</span><span>#</span><span>”, luego la cadena de entrada, y un “</span><span>$</span><span>” después de ella.</span></p><p dir="ltr"><span>Se ha demostrado que las MTs procesan solamente (pero todos) los Lenguajes Estructurados por Frases (o “Recursivamente Enumerables”). En particular, no pueden procesar los Lenguajes Generales (así como no son susceptibles de ser definidos con reglas, tampoco lo son de ser procesados por máquinas).</span></p><p dir="ltr"><span>En el caso de las MTs el no-determinismo no implica mayor poder de procesamiento.</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Los trabajos con las MTs han dado lugar a lo que se conoce como la Tesis de Turing:</span></p><p dir="ltr"><span> &nbsp;&nbsp;&nbsp;Las MTs modelan exactamente lo que pueden realizar las computadoras.</span></p><p dir="ltr"><span>Esta Tesis es muy relevante y útil: aún cuando (se asume que) las MTs tienen el mismo poder de procesamiento que las computadoras, estas máquinas abstractas son muy simples en su funcionamiento, lo cual facilita realizar demostraciones sobre las capacidades y limitaciones de las computadoras.</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>En las MT tenemos varias clases muy importantes, que procedemos a revisar.</span></p><p><span><span>&nbsp;</span></span></p><ol start="2"><li dir="ltr"><p dir="ltr"><span>Autómatas Delimitados Linealmente (ADLs)</span></p></li></ol><p dir="ltr"><span>Los ADLs (ó </span><span>Linear Bounded Automata</span><span>) son MTs que para procesar una cadena solo requieren una cantidad de celdas en la cinta de procesamiento prácticamente igual a la de la cadena de entrada. Los ADLs pueden procesar los Lenguajes Sensibles al Contexto.</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Como podrán verificar, el siguiente ADL es determinístico que procesa el lenguaje &nbsp;&nbsp;&nbsp;</span><span>a</span><span>i</span><span> b</span><span>n</span><span> e</span><span>i</span><span>d</span><span> n</span><span> &nbsp;</span><span>, &nbsp;</span><span>para </span><span>n, i</span><span>≥</span><span>1</span><span> .</span></p><p dir="ltr"><span><img src="https://lh6.googleusercontent.com/zZnmR3RuCCaMzJkl25Qogc-RKUR1c0nngzHbALvWxWL4GWMI80_2H0MrBzaQ4kGCvL_hB8XthMSiDfl18vvuqndDl4Xpr6SHLLVBEySGNEXpcQMK5U_XWsve_yHI71x92JEDnoNo2h_ts5ZwPg" width="433" height="347" /></span></p><p dir="ltr"><span>La MT inicia en </span><span>ι</span><span> y pasa al </span><span>Estado 1</span><span> leyendo el “</span><span>#</span><span>” que antecede a la cadena de entrada, escribiendo el mismo “</span><span>#</span><span>” y moviéndose a la celda de la derecha.</span></p><p dir="ltr"><span>Del </span><span>Estado 1</span><span> pasa al </span><span>Estado 2</span><span> leyendo una </span><span>a </span><span>de la cadena de entrada, escribiendo una </span><span>A </span><span>y moviéndose a la derecha. </span></p><p dir="ltr"><span>En el </span><span>Estado 2</span><span> podemos repetir cero o más veces algunas de las siguientes operaciones (en realidad deberíamos dibujar 3 ciclos en el autómata, uno para cada transición, pero por motivos de espacio dibujamos solo uno y apilamos las transiciones): </span></p><ol><li dir="ltr"><p dir="ltr"><span>leer una </span><span>a </span><span>de la cadena de entrada, escribir una </span><span>a </span><span>y moverse a la derecha (o sea: nos saltamos las </span><span>a</span><span>’s);</span></p></li><li dir="ltr"><p dir="ltr"><span>leer una </span><span>b </span><span>de la cadena de entrada, escribir una </span><span>b </span><span>y moverse a la derecha (nos saltamos las </span><span>b</span><span>‘s);</span></p></li><li dir="ltr"><p dir="ltr"><span>leer una </span><span>E </span><span>de la cadena de entrada, escribir una </span><span>E </span><span>y moverse a la derecha (nos saltamos las </span><span>E</span><span>’s).</span></p></li></ol><p dir="ltr"><span>Después pasamos al </span><span>Estado 3 </span><span>leyendo la primera </span><span>e</span><span>, transformándola en </span><span>E</span><span> y moviéndonos a la izquierda; luego nos movemos hacia la izquierda saltándonos todas las </span><span>a</span><span>’s, </span><span>b</span><span>’s, y </span><span>E</span><span>’s hasta encontrar una </span><span>A</span><span>, nos movemos a la derecha y llegamos nuevamente al </span><span>Estado 1</span><span>.</span></p><p dir="ltr"><span>Enseguida podemos repetir cero o más veces las operaciones de las transiciones de los </span><span>Estados 1, 2 </span><span>y </span><span>3</span><span>, las cuales se pueden resumir como “cambiar una </span><span>e</span><span> por </span><span>E</span><span> por cada </span><span>a</span><span> que se haya cambiado antes por </span><span>A</span><span>” (con ello verificamos si hay igual cantidad de </span><span>a</span><span>‘s que de </span><span>e</span><span>‘s). Dejamos de hacer eso cuando encontramos una </span><span>b</span><span>; entonces escribimos </span><span>b</span><span>, nos movemos a la izquierda y vamos al </span><span>Estado 4</span><span>. Leemos una</span><span> A</span><span>, escribimos una </span><span>A</span><span> y vamos al </span><span>Estado 5</span><span>.</span></p><p dir="ltr"><span>En las transiciones de los </span><span>Estados 5, 6 </span><span>y</span><span> 7</span><span> realizamos con y las </span><span>b</span><span>‘s y </span><span>d</span><span>‘s algo semejante a lo que hicimos con las </span><span>a</span><span>‘s y </span><span>e</span><span>‘s en los los </span><span>Estados 1, 2 </span><span>y</span><span> 3</span><span>: “cambiar una </span><span>d</span><span> por </span><span>D</span><span> por cada </span><span>b</span><span> que se haya cambiado antes por </span><span>B</span><span>” para verificar si hay igual cantidad de </span><span>b</span><span>‘s que de </span><span>d</span><span>‘s. Dejamos de hacer eso cuando encontramos una </span><span>E</span><span>; entonces escribimos una </span><span>E</span><span>, nos movemos a la izquierda y vamos al </span><span>Estado 8</span><span>, donde nos saltamos todas las </span><span>D</span><span>‘s y </span><span>E</span><span>‘s moviéndonos a la derecha hasta encontrar el </span><span># </span><span>&nbsp;que debe venir después del final de la cadena de entrada.</span></p><p><span><span>&nbsp;</span></span></p><ol start="3"><li dir="ltr"><p dir="ltr"><span>Máquinas de Turing que terminan (MTts</span><span>term</span><span>) – Algoritmos</span></p></li></ol><p dir="ltr"><span>Las MTs</span><span>term</span><span> son MTs que siempre terminan cuando procesan cualquier cadena &nbsp;–aunque eventualmente después de </span><span>mucho</span><span> tiempo. &nbsp;Las MTs</span><span>term</span><span> pueden procesar los Lenguajes Decidibles (o “Recursivos”).</span></p><p dir="ltr"><span>La penúltima frase puede parecer obvia, especialmente con tanta ciencia ficción y con tan altas expectativas puestas sobre la </span><span>nouvelle Artificial Intelligence</span><span>, pero ocurre que hay problemas que una MT simplemente no puede resolver (y, de acuerdo a la Tesis de Turing, tampoco las computadoras). Un ejemplo es la demostración de teoremas en el Cálculo de Predicados de Primer Orden, que describiremos aquí rápida e informalmente: desde hace décadas tenemos sistemas de inferencia (finalmente, MTs) que pueden generan todos los teoremas en ese Cálculo; inicialmente se pudo pensar que, para saber si una fórmula era un teorema, simplemente bastaría con comparar esa fórmula con cada uno de los teoremas que fuera generando el sistema; &nbsp;y efectivamente, si la fórmula es un teorema, en algún momento (quizás en un día, quizás en 1,000,000 de años) el sistema anunciará que encontró un teorema que es equivalente a nuestra fórmula; sin embargo, si la fórmula no es un teorema, el sistema (la MT) </span><span>nunca</span><span> terminará porque no generará un teorema equivalente a nuestra fórmula.</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>A partir de algo como lo anterior, es que se suele definir </span><span>Algoritmo</span><span> como una MT que siempre termina (MT</span><span>term</span><span>).</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Problemas, Algoritmos y Heurísticas </span></p><p dir="ltr"><span>Ahora bien: hay problemas para los cuales no se han encontrado algoritmos </span><span>eficientes</span><span> que los resuelvan (y se presume que no existen). En esos casos se suele optar por abstenerse de buscar la solución</span><span> óptima</span><span> mediante la revisión de todas las alternativas en el grafo de búsqueda, y en su lugar recorrer solo parte de él para encontrar </span><span>buena </span><span>solución. A estos métodos solemos llamarlos </span><span>Heurísticas</span><span>.</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Para ejemplificar lo anterior tomemos el </span><span>Problema del Vendedor Viajero</span><span> (PVV): Un Vendedor debe visitar </span><span>n-1</span><span> ciudades partiendo de una inicial, considerando que viajar de una ciudad a otra tiene un costo asociado. </span></p><p dir="ltr"><span>El PVV se puede modelar mediante un grafo dirigido con pesos en las aristas. </span></p><p dir="ltr"><span>Sabemos que, dado un grafo dirigido con </span><span>n</span><span> nodos, la cantidad máxima de </span><span>aristas</span><span> (dirigidas) es </span><span>n (n+1),</span><span> pero: cuántas </span><span>rutas</span><span> hay en ese grafo? Eso nos permitiría saber cuántas rutas tenemos que comparar para escoger </span><span>la</span><span> de costo mínimo.</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Para simplificar nuestro análisis, pensemos que el costo para ir a de una ciudad a otra es el mismo de ida que de vuelta. Tenemos entonces un grafo no dirigido con </span><span>n</span><span> nodos, por lo cual la cantidad máxima de aristas es &nbsp;&nbsp;</span><span>n (n+1) / 2 </span><span>. &nbsp;Ahora bien, cuando el grafo…</span></p><ul><li dir="ltr"><p dir="ltr"><span>tiene </span><span>3 nodos</span><span>, partiendo del nodo inicial solo tenemos </span><span>2 rutas</span><span> para visitar los otros 2 nodos.</span></p></li><li dir="ltr"><p dir="ltr"><span>tiene </span><span>4 nodos</span><span>, partiendo del inicial podemos iniciar 3 rutas yendo a cada uno d los otros 3 nodos, y entonces nos quedan 2 nodos por visitar en cada caso que como vimos en el punto anterior, genera 2 rutas cada uno; por tanto tendríamos </span><span>6 rutas</span><span>.</span></p></li><li dir="ltr"><p dir="ltr"><span>tiene </span><span>5 nodos</span><span>, partiendo del inicial podemos iniciar 4 rutas yendo a cada uno d los otros 4 nodos, y entonces nos quedan 3 nodos por visitar en cada caso que como vimos en el punto anterior, genera 2 rutas cada uno; tendríamos entonces </span><span>24 rutas</span><span>.</span></p></li></ul><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Supongamos que en general, si el grafo tiene </span><span>n </span><span>nodos, habrá </span><span>n! </span><span>( = </span><span>1*2*3*…*n </span><span>) rutas. </span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>En la siguiente tabla se muestran los valores para las curvas &nbsp;&nbsp;&nbsp;</span><span>log</span><span>2</span><span> n</span><span> &nbsp;(la búsqueda en un árbol binario con </span><span>n</span><span> datos requiere una cantidad de operaciones múltiplo de </span><span>log</span><span>2</span><span> n</span><span> &nbsp;), &nbsp;&nbsp;&nbsp;</span><span>n</span><span>&nbsp;&nbsp;, &nbsp;&nbsp;&nbsp;</span><span>n</span><span> 2</span><span> &nbsp;(ordenar &nbsp;</span><span>n</span><span> datos con el método de “Burbuja” requiere una cantidad de operaciones múltiplo de </span><span>n</span><span> 2</span><span> &nbsp;), y &nbsp;&nbsp;</span><span>2</span><span> n</span><span> &nbsp;</span><span>&nbsp;</span><span>. &nbsp;( &nbsp;</span><span>n!</span><span> &nbsp;</span><span>•</span><span>2</span><span> n</span><span> a partir de &nbsp;</span><span>n=4 </span><span>).</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span><img src="https://lh5.googleusercontent.com/uyoyUIBa7c-lEIhtwb8PA86TWEoq3845decNzGPQ4Yrgy4zX4P06zCMdENCpMOYrqyb_z0M8qIvKPeuLje1WgF7y9va9paAH1owsvd0hW7CXvTCMrlvX_kYmjh8nMq2kXaHT8LWDgxG4gk-5eQ" width="665" height="72" /></span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Los numeros en </span><span>azul </span><span>son aproximaciones mías (suficientemente acertadas para nuestro propósito); el resto los produjo la computadora. (El primero de ellos se leería “uno por diez elevado a la tres por diez elevado a la 2” = </span><span>1*10</span><span> 300</span><span> &nbsp;).</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Hoy hablamos de </span><span>Internet of Things</span><span>, y de </span><span>BIG Data</span><span>. Supongamos que nos topamos con un problema equivalente al PVV con una cantidad de ciudades igual a </span><span>10</span><span>9</span><span> . (Si cada ciudad se llevara un Byte, entonces estamos hablando de un GigaByte, nada extraordinario en </span><span>BIG Data</span><span>).</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Para hacer nuestro análisis sin problemas de desbordamiento, tomemos valores no de &nbsp;</span><span>n! &nbsp;</span><span>sino de &nbsp;</span><span>n</span><span>2</span><span> &nbsp;(para </span><span>n=100, &nbsp;n! </span><span>vale casi</span><span> 10</span><span>158 </span><span>). Haciéndolo así, con un GigaByte de ciudades, el algoritmo que revisara todas las rutas para encontrar la óptima tendría que realizar </span><span>10</span><span>300,000,000</span><span> operaciones (</span><span>ver la tabla</span><span>). &nbsp;Eso implica mucho, o poco tiempo? </span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Supongamos que podemos paralelizar mil millones de supercomputadoras que pueden realizar cada una </span><span>10</span><span>21</span><span> operaciones por segundo (un millón de PetaFlops). En un año todas ellas podrían realizar </span><span>10</span><span>9</span><span>*365*24*60*60*10</span><span>21</span><span>= 10</span><span>9</span><span>*3.1536</span><span> *</span><span>10</span><span>7</span><span>*</span><span>10</span><span>21</span><span> = 3.1536 *</span><span>10</span><span>37</span><span> operaciones, &nbsp;así es que (asumiendo que una operación bastara para procesar una ruta completa) para obtener la ruta óptima para un grafo con </span><span>10</span><span>9</span><span> nodos, el algoritmo del PVV se tardaría &nbsp;solamente </span><span>10</span><span>300,000,000-37</span><span> &nbsp;años. </span></p><p dir="ltr"><span>Esperar a obtener el resultado es, al menos, impráctico. Por supuesto, la estrategia a seguir sería utilizar una Heurística.</span></p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Con los elementos del análisis anterior estamos en posición de responder la pregunta que nos había quedado pendiente en un número anterior, acerca de la eficiencia con la que podemos procesar los distintos tipos de lenguajes que hemos venido revisando. La ofrecemos en la siguiente tabla, considerando una cadena de entrada de longitud </span><span>n </span><span>(como dijimos al principio, debido a que nos limitamos solo a la formalidad suficiente, es necesario sacrificar precisión):</span></p><p><span><span><img src="/sites/default/files/images/stories/imagenes.png" width="338" height="242" /></span></span></p><p>Tabla 2. Eficiencia para probar distintos lenguajes.</p><p><span><span>&nbsp;</span></span></p><p dir="ltr"><span>Referencias </span></p><p dir="ltr"><span>[1]</span><span>Luis Vinicio León Carrillo: </span><span>Traducción de Frases del Español al Francés en un Dominio restringido</span><span>; Tesis de Licenciatura, ITESO, 1990</span></p><p dir="ltr"><span>[2]</span><span>Pierre Janton: </span><span>Einfürhrung in die Esperantologie</span><span>; Georg Olms, 1993.</span></p><p dir="ltr"><span>[3]</span><span>Roland Hausser: </span><span>Foundations of Computational Linguistics</span><span>; Springer, 1999.</span></p></div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Wed, 03 May 2017 21:11:28 +0000 ana2lp 7276 at https://sg.com.mx https://sg.com.mx/revista/54/la-prueba-software-y-los-special-purpose-languages#comments La prueba de software y los special purpose languages https://sg.com.mx/revista/54/la-prueba-software-y-los-special-purpose-languages-0 <span class="field field--name-title field--type-string field--label-hidden">La prueba de software y los special purpose languages</span> <div class="images-container clearfix"> <div class="image-preview clearfix"> <div class="image-wrapper clearfix"> <div class="field field--name-field-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/images/programming.jpg" width="960" height="640" alt="" typeof="foaf:Image" /> </div> </div> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/47654" lang="" about="/user/47654" typeof="schema:Person" property="schema:name" datatype="" class="username">ana2lp</a></span> <span class="field field--name-created field--type-created field--label-hidden">Thu, 12/22/2016 - 19:54</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/53" hreflang="und">SG #53</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/secci%C3%B3n-revista/prueba-software" hreflang="und">Prueba de Software</a></li> </ul> </div> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Autor</h3> <ul class='links field__items'> <li><a href="/buzz/autores/luis-vinicio-leon-carrillo" hreflang="und">Luis Vinicio León Carrillo</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p dir="ltr">Parte 5.</p> <p dir="ltr">En números anteriores hemos venido estudiando los lenguajes formales para tener herramientas que nos permitan hacer más eficiente el desarrollo de software. Permítanme en este número hacer una digresión para abordar brevemente el tema principal de este número, que considero podría serles de utilidad en el futuro próximo; prometo no entrar en detalle más allá de lo estrictamente necesario.</p> <p>El tema “Lenguaje” es muy profundo y de muy largo alcance (y, debo confesar, es una de mis más profundas pasiones).</p> <p dir="ltr">“Lenguaje” está fuertemente vinculado con “Aprendizaje” e “Inteligencia” (por cierto, durante la Segunda Guerra Mundial se utilizaron exitosamente exámenes de lenguaje para seleccionar posibles oficiales entre soldados rasos).</p> <p dir="ltr">Hay quien ha llegado a escribir &nbsp;“… el universo es lenguaje, y el lenguaje es universo.”, &nbsp;una frase de profundo alcance.</p> <p>En un número anterior comentamos que sólo hasta que aprendió sobre funciones recursivas, el científico C.A.R. Hoare pudo expresar su método de ordenamiento llamado “QuickSort”. &nbsp;Eso evidencía que los constructos de un lenguaje de computación pueden limitarnos para expresar lo que tenemos en mente (al menos inicialmente). Pero, ¿acaso no ocurre lo mismo con nuestras habilidades lingüísticas, iniciando con nuestra lengua materna?</p> <p>A lo largo del tiempo se han enunciado diversas “promesas” sobre las capacidades de una computadora para procesar lenguaje natural. Algunas capacidades sencillas ya pueden verse hoy en día comercialmente: hay asistentes personales que nos pueden ayudar a &nbsp;realizar reservaciones en un Hotel, o “chatbots” para dar soporte.</p> <p>Otras capacidades más sofisticadas han quedado pendientes. Quizás estemos cerca de ver algunas de ellas comercialmente. Hace algunas semanas asistí a unos eventos de la IBM relacionados con “computación cognitiva”:</p> <ul> <li dir="ltr"> <p dir="ltr">Pude ver cómo un robot humanoide con varios grados de libertad obedecía instrucciones en Inglés medianamente complejas, a través de una conexión con Watson.</p> </li> <li dir="ltr"> <p dir="ltr">Me tocó ver la descripción de un producto para dar soporte de primer nivel, para el que, luego de recolectar 3,000 preguntas, se diseñaron 300 como “intended questions”, que se utilizan como llaves primarias en una base de datos para encontrar las respuestas correspondientes; si el usuario comenta que no recibió la respuesta adecuada, entonces pasa a comunicarse con un humano; se mencionó una “tasa de éxito” es de entre 30% y 70%.</p> </li> <li dir="ltr"> <p dir="ltr">Nos hablaron de un proyecto con el cual Watson podría apoyar a vendedores sugiriendo una propuesta de &nbsp;venta, partiendo de un análisis de patrones de compra del cliente, de su historial de compras, de sus “sentimientos” en las redes sociales, y de noticias sobre él en fechas recientes.</p> </li> </ul> <p>Pero, hablando de aplicaciones que implican una interacción en lenguaje natural muy sofisiticada, a qué nos referimos cuando decimos que una computadora “entiende” el Español por ejemplo? &nbsp;&nbsp;&nbsp;A que la máquina sea “inteligente”, que pueda “pensar”?</p> <p>Como una primera aproximación para responder esas preguntas, ya en 1950 Alan Turing sugirió reemplazar la pregunta “¿Pueden las máquinas pensar?” por “¿Puede una máquina tener un buen desempeño en el ‘Juego de la Imitación’?”, juego que consistía en que un humano interrogaba de manera remota a un hombre y a una mujer que se encontraban en otro cuarto para determinar cuál respuesta había sido dada por el hombre y cuál por la mujer.</p> <p>Si las computadoras pudieran entender nuestros idiomas tan bien como lo hace una persona promedio, podrían comprender muchísimo de lo que hay escrito en internet, así es que podríamos hablar con ellas sobre una inmensa cantidad de temas, y entonces, en muchos casos, sería difícil distinguir si estamos “hablando” con una máquina o con un ser humano muy inteligente y cultivado.</p> <p>(Por cierto: si las computadoras entendieran bien lo que dices y escribes en tus redes sociales y tus correos, entonces una buena cantidad de organizaciones podrían saber más de tu vida de los últimos meses que tus seres queridos más allegados. &nbsp;:-) &nbsp;)</p> <p>El que las computadoras entiendan el lenguaje natural puede tener muchísimas aplicaciones, no solo relativamente “sencillas” como las que mencionamos, sino otras de mucho mayor impacto. En los sistemas e-Learning, por ejemplo, podríamos tener “instructores” que jamás se desesperarían y que podrían enseñar a muchísimas personas, democratizando el conocimiento, y generando más oportunidades para todos; especialmente para los principiantes.</p> <p>Tenemos 50 años diseñando lenguajes de programación para comunicarnos con las computadoras. Cabe preguntarse: ¿por qué no desarrollar también lenguajes naturales para comunicarnos con ellas? &nbsp; &nbsp;</p> <p dir="ltr">Ya hay antecedentes de ese trabajo; echémosle un ojo.</p> <h3>Lenguajes “naturales artificiales”</h3> <p dir="ltr">Llamamos “lenguajes naturales” a aquellos que son o fueron utilizados por una comunidad de seres humanos para comunicarse (como el Español, Inglés, Ruso, Latín, Arameo, etc.). A aquellos lenguajes naturales que son o fueron utilizados por una comunidad pero que fueron desarrollados artificialmente los llamamos “Lenguajes Planificados” (como los que se muestran más adelante).</p> <p>Se considera que la historia de los Lenguajes Planificados comienza en el siglo XVII, con los trabajos de Descartes y de Leibniz.</p> <p dir="ltr">Estos tipos de lenguajes parten de una clasificación de conceptos y construyen sistemas interconectados ordenados alrededor de conceptos fundamentales.</p> <p>Después de esos trabajos se desarrollaron otros Lenguajes Planificados, en relativamente diferentes momentos y países, y partiendo de principios distintos:</p> <ul> <li dir="ltr"> <p dir="ltr">Los llamados lenguajes “a priori” o “esquemáticos” o “meta-lenguajes”, que no incorporan características/construcciones de lenguajes naturales (al menos no intencionalmente), y que tienen una estructura altamente esquematizada, regular y lógica.</p> </li> </ul> <p dir="ltr">Este tipo de lenguajes fueron dominantes durante varios siglos, pero en las primeras décadas del siglo pasado sufrieron un rápido declive. Por otro lado, los que se describen enseguida ganaron un rápido crecimiento.</p> <ul> <li dir="ltr"> <p dir="ltr">Los llamados lenguajes “a posteriori” o “naturalistas” que decididamente toman características de los lenguajes naturales (por ejemplo, la irregularidad tanto en la composición de las palabras y frases, como en declinaciones y conjugaciones), y que renuncian a esquemas y clasificaciones dadas a priori.</p> </li> </ul> <p dir="ltr">Una clase particular de estos lenguajes son los llamados “pseudo-lenguajes”, que mezclan elementos de lenguajes naturales como raíces y declinaciones (originales o modificadas) con elementos desarrollados artificialmente.</p> <ul> <li dir="ltr"> <p dir="ltr">Los lenguajes naturales simplificados (“sean” vivos como el Español, el Ruso, Chino o “muertos” como el Latín y el Arameo), en los que los mecanismos de “construcción” del lenguaje en cuestión (conjugaciones, declinaciones, constitución de frases, etc.) son simplificados sistemáticamente (por ejemplo, haciendo regulares verbos que son originalmente irregulares).</p> </li> </ul> <p>&nbsp;</p> <p dir="ltr">En la siguiente tabla mostramos algunos de estos Lenguajes Planificados:&nbsp;</p> <div dir="ltr"> <table> <colgroup> <col width="161" /> <col width="170" /> <col width="161" /> <col width="170" /> </colgroup> <tbody> <tr> <td> <p dir="ltr"><strong>Lenguajes “a priori” o “meta-lenguajes”</strong></p> </td> <td> <p dir="ltr"><strong>Lenguajes “a posteriori” o “naturalistas”</strong></p> </td> <td> <p dir="ltr"><strong>Lenguajes “a posteriori” &nbsp;“pseudo-lenguajes”</strong></p> </td> <td> <p dir="ltr"><strong>Lenguajes naturales simplificados</strong></p> </td> </tr> <tr> <td><br /> <br /> <br /> <br /> <br /> <br /> &nbsp; <p dir="ltr">Beobi (1920, Rusia)</p> &nbsp; <p dir="ltr">Suma (1943, EEUU)</p> <br /> <br /> <br /> &nbsp; <p dir="ltr">Unilingua (1965, Francia)</p> </td> <td><br /> <br /> <br /> &nbsp; <p dir="ltr">Semi-Latin (1910, Austria)</p> <br /> <br /> <br /> &nbsp; <p dir="ltr">Romanid (1956, Hungría)</p> </td> <td> <p dir="ltr">Volapük (1879, Alemania)</p> <p dir="ltr">Esperanto (1887, Polonia)</p> <p dir="ltr">Dilpok (1898, Francia)</p> &nbsp; <p dir="ltr">Novesperanto (1910, Suiza)</p> <br /> <br /> <br /> &nbsp; <p dir="ltr">Intal (1956, Alemania)</p> &nbsp; <p dir="ltr">Malfalsito (1963, Francia)</p> </td> <td><br /> <br /> &nbsp; <p dir="ltr">Tutonish (1902, EEUU)</p> &nbsp; <p dir="ltr">Simplo (1911, Italia)</p> &nbsp; <p dir="ltr">Anglic (1930, Suecia)</p> <p dir="ltr">Basic (1935, Gran Bretaña)</p> </td> </tr> </tbody> </table> </div> <p>&nbsp;</p> <p dir="ltr">Dos de los Lenguajes Planificados más relevantes son:&nbsp;</p> <ol> <li dir="ltr"> <p dir="ltr">Volapük</p> </li> </ol> <p dir="ltr">Fue desarrollado en Alemania por Johann Martin Schleyer, publicado en 1879, pensado para que lo usara la élite educada. Fue el primer Lenguaje Planificado en pasar de la teoría (sin una comunidad que usara el lenguaje) a la práctica (una comunidad amplia que lo usara y enriqueciera).</p> <p dir="ltr">Luego de 10 años de su publicación, ya existían 283 Organizaciones de “Volapukistas”, 25 diarios en ese idioma, muchos libros de enseñanza traducidos a 25 lenguajes; así como una Academia de la Lenguaje, que por cierto no era muy abierta a aceptar o desarrollar reformas al lenguaje, lo cual, aunado a que el autor veía al lenguaje como algo de su propiedad, originó un gran debilitamiento del “Volapukismo”.</p> <ol start="2"> <li dir="ltr"> <p dir="ltr">Esperanto</p> </li> </ol> <p dir="ltr">Esperanto significa “un esperanzado” o “alguien que espera”, lo que da idea inicial sobre su autor, quien realizó las primeras publicaciones sobre el lenguaje bajo el seudónimo de “Dr. Esperanto”.</p> <p dir="ltr">Su verdadero nombre era Lazarus Ludvig Zamenhof. De origen judío, nació en 1859 en Bialystok (hoy Polonia), en donde confluían rusos, polacos, alemanes y judíos; él vivía en un área socieconómicamente deprimida.</p> <p dir="ltr">Zamenhof hablaba Ruso en casa y Polaco en la calle; en la preparatoria se distinguió en Alemán y Francés, así como en Latín y Griego; con su padre profundizó en el Hebreo.</p> <p dir="ltr">Estudió medicina en Varsovia, y luego se especializó en Oftalmología.</p> <p dir="ltr">Zamenhof era un humanista idealista que, viviendo en Europa pocos años antes de la Primera Guerra Mundial, quería con su “Lenguaje Universal” unir a la humanidad. Murió en 1917 pobre, en buena medida por sus inversiones en el desarrollo del Esperanto (publicaciones, viajes, actividades, etc.).</p> <p dir="ltr">A diferencia de Schleyer con Volapük, Zamenhof no se apropió del Esperanto. Esperaba que el lenguaje contribuyera a una democratización del saber y la cultura, y a conectar las masas a nivel internacional sin necesidad de la élite educada.</p> <p dir="ltr">Sabía que su “Lenguaje Universal” podía generar un movimiento social, y realizó también trabajos para desarrollar una “Religión Universal”.</p> <p>&nbsp;</p> <p dir="ltr">Zamenhof diseñó Esperanto buscando que…</p> <ul> <li dir="ltr"> <p dir="ltr">fuera tan fácil de asimilar, que cualquiera pudiera aprenderlo jugando;</p> </li> <li dir="ltr"> <p dir="ltr">pudiera ser usado rápidamente por un aprendiz, gracias a su estructura simple y lógica;</p> </li> <li dir="ltr"> <p dir="ltr">fuera usado por las masas. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p> </li> </ul> <p>&nbsp;</p> <p dir="ltr">Objetivos que alcanzó gracias a que en Esperanto:</p> <ul> <li dir="ltr"> <p dir="ltr">el vocabulario fue tomado de varios lenguajes naturales vivos;</p> </li> <li dir="ltr"> <p dir="ltr">la derivación y la flexión son regulares y estructuradas;</p> </li> <li dir="ltr"> <p dir="ltr">a cada letra le corresponde un solo sonido, y el vocalismo se limita a las 5 vocales;</p> </li> <li dir="ltr"> <p dir="ltr">las raíces de las palabras se tomaron en un 75% de las lenguas romances –especialmente el Latín (del que fueron escogidas por su internacionalidad, de manera que un ruso entendiera inmediatamente un 40%) y del Francés–, 20% de las lenguas germánicas, y el 5% restante del Griego, Hebreo, el Árabe, el Japonés, y las lenguas Eslavas;</p> </li> <li dir="ltr"> <p dir="ltr">se buscó una pronunciación con máxima internacionalidad.</p> </li> </ul> <p>Todo lo anterior originó que el Esperanto ganara mucha aceptación: la primera de las muchas publicaciones sobre el lenguaje fue “Linguo Internatia” en 1887; en 1905, en Francia, 668 personas de 20 países participaron en el primer Congreso Mundial; hasta antes de 1914 se realizaron unos 8 congresos. Sin embargo, en ese desarrollo se cruzaron las dos grandes guerras, y todas las consecuencias de las mismas debilitaron mucho ese movimiento.</p> <h3 dir="ltr">Lingüística Computacional</h3> <p dir="ltr">Aún cuando la idea de desarrollar un Lenguaje Planificado que tenga la estructura adecuada como para hacer práctica la comunicación de un humano con un sistema de cómputo es “nice”, y viable en principio, eso no es lo que finalmente se busca; entre otras cosas porque los humanos tendríamos que aprender otro lenguaje natural, lo cual es una limitante, aún en nuestras sociedades modernas. Lo que se desea es entendernos con ella libremente en nuestra propia lengua. &nbsp;Eso nos empuja a ver las cosas desde una perspectiva más amplia: la Lingüística Computacional.</p> <p>La Lingüística Computacional es un campo interdisciplinario que comprende secciones de lingüística tradicional y teórica, lexicografía, psicología del lenguaje, filosofía analítica y lógica, procesamiento de texto, bases de datos, así como procesamiento de lenguaje hablado y escrito.</p> <p>La computación numérica ha sido el enfoque predominante desde el nacimiento de las computadoras. En él, la comprensión del lenguaje natural ha estado restringida fundamentalmente al usuario: cuando uno quiere encontrar fragmentos relevantes en un texto largo relacionados con “problemas con autos rojos durante el periodo entre 1990 y 2000”, la palabra “rojos” es tratada sólo como un signo por la computadora, no con el significado que tiene para nosotros; si la computadora entendiera &nbsp;no solo el significado de “rojos”, sino de la frase completa, nos mostraría también textos que incluyeran las frases “década de los 90s”, y “sedanes/automóviles/coches tintos”, entre otras.</p> <p dir="ltr">Técnicamente dicho: en los sistema de cómputo actuales, el query anterior tiene una alta Precision (esto es: de los textos que son mostrados, el porcentaje que sí son relevantes) &nbsp;pero tiene un bajo Recall (de todos los posibles textos relevantes, el porcentaje que representa los que sí son mostrados).</p> <p>La llamada “Nouvelle Artificial Intelligece” no hace el típico procesamiento simbólico de la “traditional Artificial Intelligence” usando “computadoras numéricas”, sino que se enfoca al procesamiento de significado usando “Agentes Autónomos” (robots). La Lingüística Computacional hace uso de este tipo de tecnología.</p> <p>El objetivo de la Lingüística Computacional es desarrollar componentes tecnológicos, que llamaremos “agentes cognitivos autónomos” (robots), con los que el humano pueda comunicarse libremente en natural lenguaje. Esto cual requiere del modelado de procedimientos y estados cognitivos, para lo cual es necesario tanto un modelo del hablante como del oyente.</p> <p dir="ltr">Para efectos del desarrollo de un agente cognitivo autónomo, uno podría considerar como…</p> <ol> <li dir="ltr"> <p dir="ltr">“Prototipo Básico de Comunicación” el discurso que se presenta entre dos partes, “cara a cara”, hablando de objetos concretos, y en su ambiente inmediato.</p> </li> <li dir="ltr"> <p dir="ltr">“Componentes de Comunicación Básica”…</p> </li> </ol> <ul> <li dir="ltr"> <p dir="ltr">La especificación del medioambiente de la tarea a realizar (a la representación interna actual del medioambiente se le suele llamar “Contexto” del agente).</p> </li> <li dir="ltr"> <p dir="ltr">La estructura del agente cognitivo, que representa su “cognición”; los datos que recibe (por ejemplo de sensores), que constituyen su “percepción”; y la clasificación de los mismos que se considera su “reconocimiento”.</p> </li> <li dir="ltr"> <p dir="ltr">La especificación del lenguaje en el cual se lleva a cabo la comunicación, que debería los siguientes elementos:</p> </li> </ul> <ol> <li dir="ltr"> <p dir="ltr">Fonética: para facilitar la automatización de los procesos de articulación, acústicos y auditivos del habla.</p> </li> <li dir="ltr"> <p dir="ltr">Léxico: en el cual tengamos por ejemplo, para cada concepto, sus hipónimos e hiperónimos, que nos permitan entender mejor el input recibido por el agente para generar un output de mejor calidad.</p> </li> <li dir="ltr"> <p dir="ltr">Morfología: que nos facilite el análisis de las palabras del input y obtener sus constituyentes para eventualmente expandirlas antes de generar el output del agente.</p> </li> <li dir="ltr"> <p dir="ltr">Sintaxis: que nos permita detectar si las estructuras en el input son correctas y generar las equivalentes en el output.</p> </li> <li dir="ltr"> <p dir="ltr">Semántica: que nos permita por ejemplo entender frases con negaciones y detectar frases que tienen significados equivalentes.</p> </li> <li dir="ltr"> <p dir="ltr">Pragmática: que nos permita entender el significado de frases genéricas como “aspectos revisados en la última junta” en contextos particulares.</p> </li> </ol> <p dir="ltr">Para ilustrar algunos de los elementos anteriores tomemos el caso de la traducción automática. A lo largo del tiempo se han desarrollado diferentes enfoques:</p> <ul> <li dir="ltr"> <p dir="ltr">Traducción directa (50’s - 60’s): utilizando diccionarios, prácticamente se traducía palabra por palabra (o cuando mucho, utilizando su morfología), evadiendo el análisis del significado, pero buscando preservar los significados y proporcionar traducciones sintácticamente aceptables.</p> </li> <li dir="ltr"> <p dir="ltr">El enfoque “de Transferencia”, en el que se realiza un análisis léxico, sintáctico y morfológico del texto y se construye una representación del mismo; luego, utilizado esa representación y un diccionario que incluya aspectos sintácticos y morfológicos, se hace la traducción. Es un mejor enfoque que el anterior, pero aún no se entiende el significado del input, lo que generará problemas cuando:</p> </li> </ul> <ul> <li dir="ltr"> <p dir="ltr">un verbo en el lenguaje fuente (“to be” en Inglés) tiene dos traducciones en el lenguaje destino (“ser” y “estar” en Español), o</p> </li> <li dir="ltr"> <p dir="ltr">un pronombre en el lenguaje fuente (“they” en Inglés) tiene dos traducciones en el lenguaje destino (“ellas” y “ellos” en Español).</p> </li> </ul> <ul> <li dir="ltr"> <p dir="ltr">El enfoque ‘Interlingua’, en el cual, además del análisis léxico, sintáctico y morfológico, se realizan también el semántico y el pragmático, y se construye una “representación interlingüística” (por ejemplo, en Esperanto) rica en elementos para permitir generar una traducción de alta calidad.</p> </li> <li dir="ltr"> <p dir="ltr">Se han desarrollado también soluciones parciales como los “Restricted Languages”, que son lenguajes naturales simplificados altamente esquematizados y enfocados a un dominio específico, permitiendo con ello realizar traducciones de muy alta calidad.</p> </li> </ul> <p>&nbsp;</p> <p dir="ltr">(Después de lo anterior, qué no podría preguntarse uno: si el agente me entendiera a mí en Español y a ti en Alemán, en realidad “entendería” los dos idiomas; ¿por qué no habría de funcionar como nuestro traductor?)</p> <h3>El aspecto formal</h3> <p dir="ltr">Aún cuando en nuestra primera columna mencionamos un enfoque sobre lenguajes formales llamado Sistemas Lindenmayer (proveniente de la Biología), dado nuestro interés en encontrar mecanismos para eficientar el desarrollo de software, en números posteriores estudiamos los lenguajes formales utilizando principalmente los trabajos sobre gramáticas del lingüista Noam Chomsky, las cuales se conocen como Gramáticas Estructuradas por Frase, y en un número reciente presentamos una jerarquía de las mismas. Se presume que, en esa jerarquía, los lenguajes naturales se encuentran en la clase de los Lenguajes Sensibles al Contexto.</p> <p dir="ltr">En realidad, las Gramáticas Estructuradas por Frase son un tipo particular de las llamadas Gramáticas Generativas, que son sistemas (“recursivos”) de reglas provenientes del trabajo en la Lógica Matemática.</p> <p dir="ltr">Algunos de los enfoques más relevantes que han sido utilizados para abordar las Gramáticas Generativas son:</p> <ol> <li dir="ltr"> <p dir="ltr">Gramáticas Categóricas (“C-Grammars”): desarrolladas inicialmente en 1929 por el polaco Lesniesvsky. Aplicadas al los natural lenguajes por primera vez por Bar-Hillel en 1953.</p> </li> <li dir="ltr"> <p dir="ltr">Gramáticas Estructuradas por Frase (PS-Grammars): basadas en los “Rewrite Systems” de Emil Post desarrollados en 1936, que fueron aplicadas a los lenguajes naturales por primera vez por Chomsky en 1957.</p> </li> <li dir="ltr"> <p dir="ltr">Gramáticas Asociativas-por-la-Izquierda (Left-Assotiative-Grammars): desarrolladas en 1985 por Roland Hausser especialmente para procesar lenguajes naturales.</p> </li> </ol> <p dir="ltr">Los dos primeros enfoques presentan el problema de que los recursos requeridos (tiempo y memoria) para hacer el procesamiento de lenguajes naturales son demasiado grandes como para llevarlos a la práctica. El tercero muestra algunas bondades al respecto.</p> <p dir="ltr">Formalmente, una Gramática-LA (del Inglés Left-Associative Grammar, LAG) es una séptupla de la forma:</p> <p>〈 W, C, LX, CO, RP, SI , SF 〉 &nbsp;&nbsp;&nbsp;donde&nbsp;</p> <p>W&nbsp;es un conjunto finito de llamadas Word surfaces;&nbsp;</p> <p>C es un conjunto finito de Category segments ;</p> <p dir="ltr">L⊃ &nbsp;( W×C<sup>+ </sup>) es un conjunto finito conteniendo el Lexico) ;</p> <p dir="ltr">CO= ( co<sub>1</sub>, …, co<sub>n-1 </sub>) es una secuencia finita de funciones recursivas totales (entiéndase “programas”) de (C<sup>* </sup>×C<sup>+</sup>) a (C<sup>* </sup>∪{⊥}) &nbsp;llamadas Categorial Operations ;</p> <p dir="ltr">RP= ( rp<sub>1</sub>, …, rp<sub>n-1 </sub>) es una secuencia finita ( igualmente larga que CO ) de subconjuntos de n &nbsp;( donde n = { i | 0 ≤ i &lt; n} ) &nbsp;llamada Rule Packages ;</p> <p dir="ltr">S<sub>I</sub>= { ( c<sub>s1</sub> &nbsp;&nbsp;rp<sub>s1 </sub>) … ( c<sub>sk </sub>&nbsp;&nbsp;rp<sub>sk </sub>) } es un conjunto finito de eStados Initiales, donde cada c∈C+ y cada rp es un subconjunto de n llamado paquete de reglas de inicio;</p> <p dir="ltr">S<sub>F</sub>= { ( c<sub>f1</sub> &nbsp;&nbsp;rp<sub>f1 </sub>) … ( c<sub>fk </sub>&nbsp;&nbsp;rp<sub>fk </sub>) } es un conjunto finito de eStados Finales , donde cada c∈C<sup>*</sup> y cada rp ∈RP .</p> <p>&nbsp;</p> <p dir="ltr">Así como con las Gramáticas Estructuradas por Frase de Chomsky que estudiamos, &nbsp;en el conjunto de lenguajes generados por Gramáticas-LA también tenemos subclases:</p> <ul> <li dir="ltr"> <p dir="ltr">Las Gramáticas-LAgenerales, o A-LAGs, corresponden a la definición de arriba.</p> </li> <li dir="ltr"> <p dir="ltr">Las Gramáticas-LA limitadas (Bounded) linealmente, o B-LAGs (LAGs), son la subclase de las A-LAGs en las cuales la longitud de las categorías está limitada linealmente con respecto a la longitud de la cadena de entrada.</p> </li> <li dir="ltr"> <p dir="ltr">Las Gramáticas-LA limitadas por una Constante, o C-LAGs, son la subclase de las B-LAGs en las cuales la cantidad de cálculos requerida por operaciones categóricas individuales está limitada por una constante.</p> </li> </ul> <p dir="ltr">Dentro de estas C-LAGs tenemos las subclases de C3-LAGs , C2-LAGs , y C1-LAGs .</p> <p>&nbsp;</p> <p dir="ltr">La siguiente es la relación de las LAGs con la Jerarquía de Chomsky (incluimos algunos aspectos de rendimiento, que eventualmente abordaremos en números posteriores).</p> <p dir="ltr">El conjunto de Gramáticas-LA…</p> <ul> <li dir="ltr"> <p dir="ltr">generales o A-LAGs, aceptan y generan todos los Lenguajes Recursivos (o “Decidibles”), algo relevante, pues como vimos en un número anterior, en la Jerarquía de Chomsky no había un tipo de Gramática que definiera este tipo de lenguajes.</p> </li> <li dir="ltr"> <p dir="ltr">bounded o B-LAGs, aceptan y generan todos los Lenguajes Sensibles al Contexto (LSC).</p> </li> <li dir="ltr"> <p dir="ltr">constant o C-LAGs, constan de 3 subclases:</p> </li> </ul> <ul> <li dir="ltr"> <p dir="ltr">C3-LAGs contiene los Lenguajes Libres de Contexto (LLC) más complejos y algunos LSC que son “NP-Complete” (la clase de problemas para los cuales no se han descubierto algoritmos eficientes que los resuelvan, y se piensan que no existen). Para procesar estos lenguajes se requiere tanto tiempo que los vuelve prohibitivos en la práctica (técnicamente requieren “tiempo polinomial”, lo que significa que pueden procesarse en un tiempo expresado como un polinomio de grado ≥ 2 en función de la cantidad de datos de entrada).</p> </li> <li dir="ltr"> <p dir="ltr">C2-LAGs contiene varios LLC “no-deterministas” (su procesamiento implica backtracking) y varios LSC simples. Para procesarlos también se requiere tiempo polinomial.</p> </li> <li dir="ltr"> <p dir="ltr">C1-LAGs contiene todos los LLC “deterministas” (no requieren backtracking para procesarlos) y varios LSC simples. Su procesamiento sólo requiere tiempo lineal, lo que los vuelve muy útiles en la práctica.</p> </li> </ul> <p dir="ltr">Se piensa que en esta jerarquía, los lenguajes naturales están dentro de la clase C1-LAG, lo cual significaría que su procesamiento puede realizarse de manera práctica, aún con altos volúmenes de input.</p> <p dir="ltr">Ojalá y tengamos pronto una C1-LAG para el Español, que nos permita desarrollar verdaderos sistemas cognitivos y entendernos con las computadoras en nuestra lengua materna! &nbsp;</p> <p dir="ltr">Sistemas que nos hagan buenas traducciones, nos ayuden en el trabajo, y de paso, ¡ayuden a los niños con su tarea! &nbsp;:-)))) &nbsp;</p> <p dir="ltr">(¿Ven ahora por qué decimos que la Lingüística Computacional es de largo alcance? &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:-))) &nbsp;)</p> </div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p><span>Luis Vinicio León Carrillo es Director General y co-fundador de e-Quallity. Fue profesor-investigador en la universidad ITESO. Realizó estudios de posgrado en Alemania, durante los cuales abordó temas relacionados con la prueba de software y los métodos y lenguajes formales.</span></p> </div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> <div class="field field--name-field-tags field--type-entity-reference field--label-above field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label">Tags</h3> <ul class='links field__items'> <li><a href="/tags/lenguajes" hreflang="und">lenguajes</a></li> </ul> </div> Fri, 23 Dec 2016 01:54:50 +0000 ana2lp 6941 at https://sg.com.mx Special Purpose Languages, parte 4 https://sg.com.mx/revista/52/special-purpose-languages-parte-4 <span class="field field--name-title field--type-string field--label-hidden">Special Purpose Languages, parte 4</span> <div class="images-container clearfix"> <div class="image-preview clearfix"> <div class="image-wrapper clearfix"> <div class="field field--name-field-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/images/prueba-fig1.jpg" width="1444" height="648" alt="" typeof="foaf:Image" /> </div> </div> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/1" lang="" about="/user/1" typeof="schema:Person" property="schema:name" datatype="" class="username">sg</a></span> <span class="field field--name-created field--type-created field--label-hidden">Wed, 10/12/2016 - 02:59</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/52" hreflang="und">SG #52</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/secci%C3%B3n-revista/prueba-software" hreflang="und">Prueba de Software</a></li> </ul> </div> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Autor</h3> <ul class='links field__items'> <li><a href="/buzz/autores/luis-vinicio-leon-carrillo" hreflang="und">Luis Vinicio León Carrillo</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">En el número anterior mostramos la </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Jerarquía de lenguajes de Chomsky</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, que se construye considerando la complejidad de la estructura de las reglas del conjunto </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">R</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> que define cada tipo de lenguaje. Partamos ahora no de las gramáticas, sino de los lenguajes, y apliquemos unas extensiones: llamamos…</span></p><ul style="margin-top: 0pt; margin-bottom: 0pt;"><li style="list-style-type: disc; font-size: 13.333333333333332px; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lenguajes Regulares</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">(o de </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Tipo 3</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, o de manera corta</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Lgs</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">3</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">) a aquellos que pueden definirse utilizando </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Gramáticas Regulares</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, cuyas</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">reglas son de la forma &nbsp;&nbsp;&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">A→ B d </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">&nbsp;| </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">d </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">&nbsp;&nbsp;&nbsp;(o menos compleja). </span></p></li></ul><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 36pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">(Nota: las reglas podrían ser de la forma </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">A→ d B </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">| </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">d</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;, pero no se pueden mezclar ambas formas en una misma gramática.)</span></p><ul style="margin-top: 0pt; margin-bottom: 0pt;"><li style="list-style-type: disc; font-size: 13.333333333333332px; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lenguajes Libres de Contexto </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">(o </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Tipo 2</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, o </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lgs</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">2</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">)</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> a aquellos que pueden definirse utilizando </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Gramáticas Libres de Contexto</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, cuyas</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">reglas son de la forma &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">A→ </span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">α</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">&nbsp;(o menos compleja).</span></p></li></ul><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 36pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Dentro de estos lenguajes existen varias divisiones. Una de las más relevantes es la que diferencia entre los lenguajes determinísticos y los no-determinísticos; un ejemplo de estos últimos es &nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">a</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">n</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> b</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">n </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">∪ </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">a</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">n</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> b</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">2n &nbsp;</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, que como podrán intuir, para procesarlo es necesario que el compilador asociado realice </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">backtracking</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">.</span></p><ul style="margin-top: 0pt; margin-bottom: 0pt;"><li style="list-style-type: disc; font-size: 13.333333333333332px; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; margin-left: -1px;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lenguajes Sensibles al Contexto </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">(o </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Tipo 1</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, o </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lgs</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">1</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">)</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> a aquellos que pueden definirse utilizando </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Gramáticas Sensibles al Contexto</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, cuyas</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">reglas ó son de la forma a) </span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">β</span><span style="font-size: 7.999999999999999px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">1</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">A</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">β</span><span style="font-size: 7.999999999999999px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">2</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">→</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">β</span><span style="font-size: 7.999999999999999px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">1</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">α</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">β</span><span style="font-size: 7.999999999999999px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">2</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;(o menos compleja), donde </span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">α</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">≠</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">λ</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> ; ó b) &nbsp;&nbsp;&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">θ</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">→</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">α</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">(o menos compleja), donde |</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">θ</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">| </span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">≤</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> |</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">α</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">| .</span></p></li><li style="list-style-type: disc; font-size: 13.333333333333332px; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lenguajes Estructurados por Frases </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">(o </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Recursivamente Enumerables</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">,</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">o </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Tipo 0</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, o </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lgs</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">0</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">)</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> a aquellos que pueden definirse utilizando </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Gramáticas Estructuradas por Frases</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, cuyas reglas son de la forma &nbsp;</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">θ</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">→ </span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">α</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">(o menos compleja), donde </span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">θ</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">≠</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">λ</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">.</span></p></li></ul><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 36pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Dentro de estos </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lgs</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">0 </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">se encuentra la importantísima clase los </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lenguajes Decidibles</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> (o </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Recursivos</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">,</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">o </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lgs</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">dec</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">), que son</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">&nbsp;aquellos para los que es posible construir programas (por ejemplo compiladores) que siempre terminan y anuncian si la cadena sí es elemento del lenguaje o si no lo es (aunque para ello consuman cantidades considerables de tiempo y memoria). Las reglas con las que se definen tienen la misma forma que los </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lgs</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">0</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">. </span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 36pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Podemos ver a los </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lgs</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">0</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> como lenguajes semi-decidibles: los programas que los procesan (por ejemplo compiladores) pueden determinar cuando las cadenas sí son elementos del lenguaje, pero cuando no es así continúan su procesamiento indefinidamente.</span></p><ul style="margin-top: 0pt; margin-bottom: 0pt;"><li style="list-style-type: disc; font-size: 13.333333333333332px; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lenguajes Generales</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> (o </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lgs</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">gral</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">)</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> a aquellos que incluyen a todos los anteriores y a los que no son susceptibles de ser definidos con reglas.</span></p></li></ul><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr">&nbsp;</p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">En esta jerarquía ocurre (obviando algunas precisiones) que &nbsp;&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lgs</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">3</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">⊂≠ </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lgs</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">2</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">⊂≠ </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lgs</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">1</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">⊂≠ </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lgs</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">dec</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">⊂≠ </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lgs</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">0 </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">⊂≠ </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lgs</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">grals</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">.</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Esto enuncia con mayor exactitud lo que mencionamos sobre la cantidad de programas (|</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">N|</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">) y de lenguajes (|</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">2</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">N</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">|): de todo el universo de lenguajes </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lgs</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">grals</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, solamente para los </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lgs</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">dec</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">podemos escribir procesadores que determinan cuando las cadenas sí forman parte del lenguaje y también cuando no es así. &nbsp; <br /></span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr">&nbsp;</p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 14.666666666666666px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Ejemplos de especificaciones usando gramáticas</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Especifiquemos ahora con gramáticas los lenguajes que definimos “algebraicamente” en el número anterior: &nbsp;</span></p><ul style="margin-top: 0pt; margin-bottom: 0pt;"><li style="list-style-type: disc; font-size: 13.333333333333332px; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">L</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">1</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> : &nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">a</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">m</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> b</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">n</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> c</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">i</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">d</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">k</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, &nbsp;</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">para </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">m, n, i, k </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">≥</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;0 e independientes entre sí:</span></p></li></ul><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 70.8pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">E → &nbsp;λ </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">|</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> a E </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">| </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">b </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">|</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> b F</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">| </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">c </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">| </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">c G</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">|</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> d </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">|</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> d H &nbsp;</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 70.8pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">F &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;→ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">|</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> b F</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">| </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">c </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">| </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">c G</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">|</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> d </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">|</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> d H &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">&nbsp;</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 70.8pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">G &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;→ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">| </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">c G</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">|</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> d </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">|</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> d H &nbsp;</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 70.8pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">H &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;→ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">|</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> d H</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">&nbsp;&nbsp;</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 35.4pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Como pueden observar, se trata de una Gramática Regular.</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 35.4pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Escribamos lo que se denomina una </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">derivación</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> para </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">a</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">2</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> b</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">3</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> c</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">1</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> d</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">0</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> :</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 85.05pt; text-indent: -14.150000000000006pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">E → &nbsp;a E → &nbsp;aa E &nbsp;→ &nbsp;aa F → &nbsp;aab F → &nbsp;aabb F → &nbsp;aabbb F → &nbsp;aabbb G → &nbsp;aabbbc G → &nbsp;aabbbc H &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;→ &nbsp;aabbbc λ &nbsp;→ &nbsp;aabbbc</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 35.4pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Este tipo de gramáticas son equivalentes a las conocidas </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">expresiones regulares</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, y como veremos en seguida, son suficientes para especificar los “</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">scanners</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">” de los compiladores, los cuales se encargan del análisis lexicográfico.</span></p><ul style="margin-top: 0pt; margin-bottom: 0pt;"><li style="list-style-type: disc; font-size: 13.333333333333332px; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">L</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">2</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> : &nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">a</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">m</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> b</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">i</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> c</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">i</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> d</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">m</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, &nbsp;</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">para </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">m, i </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">≥</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">0 &nbsp;</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">que aparecen por pares y están “anidadas”:</span></p></li></ul><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 70.8pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">E → &nbsp;a E d | F</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 70.8pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">F → &nbsp;b F c | λ</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 35.4pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Este es un ejemplo “clásico” de una Gramática Libre de Contexto.</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 35.4pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">He aquí una derivación para </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">a</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">2</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> b</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">3</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> c</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">3</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> d</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">2</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;:</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 85.05pt; text-indent: -14.150000000000006pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">E → &nbsp;a E d → aa E dd → aa F dd → aab F cdd → &nbsp;aabb F ccdd → &nbsp;aabbb F cccdd → &nbsp;aabbb λ cccdd </span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 85.05pt; text-indent: -14.150000000000006pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;&nbsp;→ aabbbcccdd</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 36pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">(Si hacemos &nbsp;&nbsp;&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">a</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> = ( , &nbsp;&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">b</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> = { , &nbsp;&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">c</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> = } , &nbsp;&nbsp;y &nbsp;&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">d</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> = ) &nbsp;&nbsp;tenemos el caso concreto que mencionamos en la revista anterior.)</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 35.4pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Este tipo de gramáticas son equivalentes a los conocidos </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">grafos de sintaxis</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, y son suficientes para especificar los </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">parsers</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> de los compiladores, los cuales se encargan del análisis sintáctico.</span></p><p><strong style="font-weight: normal;"><strong style="font-weight: normal;">&nbsp;</strong></strong></p><ul style="margin-top: 0pt; margin-bottom: 0pt;"><li style="list-style-type: disc; font-size: 13.333333333333332px; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">L</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">3</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> : &nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">a</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">m</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> b</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">i</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> c</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">m</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> d</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">i</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, &nbsp;</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">para </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">m, i </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">&nbsp;</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">≥</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">0</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> , que aparecen por pares pero no están anidadas:</span></p></li></ul><ol style="margin-top: 0pt; margin-bottom: 0pt;"><li style="list-style-type: decimal; font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; margin-left: 71px;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;&nbsp;S → V &nbsp;| λ</span></p></li><li style="list-style-type: decimal; font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; margin-left: 71px;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;&nbsp;V → a V Y | a c | X</span></p></li><li style="list-style-type: decimal; font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; margin-left: 71px;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;&nbsp;X → b X Z | b Z</span></p></li><li style="list-style-type: decimal; font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; margin-left: 71px;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Z Y → Z T</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">1</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;, &nbsp;&nbsp;Z T</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">1</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> → Y T</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">1</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;, &nbsp;Y T</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">1</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> → Y Z &nbsp;&nbsp;&nbsp;/* </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Reglas que abreviaremos como</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;&nbsp;Z Y → Y Z &nbsp;*/</span></p></li><li style="list-style-type: decimal; font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; margin-left: 71px;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">b Y → b c</span></p></li><li style="list-style-type: decimal; font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; margin-left: 71px;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">c Y → c c </span></p></li><li style="list-style-type: decimal; font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; margin-left: 71px;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">c Z → c d</span></p></li><li style="list-style-type: decimal; font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; margin-left: 71px;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">d Z → d d</span></p></li><li style="list-style-type: decimal; font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; margin-left: 71px;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">b Z → b d</span></p></li></ol><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 35.4pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Excepto por el </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">λ </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">en la primera regla, que es indispensable porque el lenguaje genera </span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">λ</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, y que es aceptable porque solo la genera el Símbolo-inicial, la anterior es una Gramática Sensible al Contexto: en las 3 primeras reglas no hay contexto (</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">β</span><span style="font-size: 7.999999999999999px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">1</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">= </span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">λ</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> y </span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">β</span><span style="font-size: 7.999999999999999px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">2</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">= </span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">λ</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, volviéndolas Libres de Contexto); en las restantes ocurre que </span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">β</span><span style="font-size: 7.999999999999999px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">1</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">= </span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">λ</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> o que </span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">β</span><span style="font-size: 7.999999999999999px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">2</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">= </span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">λ</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> .</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 35.4pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">He aquí una derivación para </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">a</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">3</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> b</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">2</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> c</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">3</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> d</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">2</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;&nbsp;:</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 85.05pt; text-indent: -14.150000000000006pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">S → &nbsp;V &nbsp;→ &nbsp;a V Y → &nbsp;a a V Y Y → &nbsp;a a a V Y Y Y </span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 85.05pt; text-indent: -14.150000000000006pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;&nbsp;→ &nbsp;a a a X Y Y Y → &nbsp;a a a b X Z Y Y Y &nbsp;→ &nbsp;a a a b b Z Z Y Y Y &nbsp;</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 85.05pt; text-indent: -14.150000000000006pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;&nbsp;→ &nbsp;a a a b b Z Y Z Y Y → &nbsp;a a a b b Y Z Z Y Y → &nbsp;a a a b b Y Z Y Z Y → &nbsp;a a a b b Y Y Z Z Y</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 85.05pt; text-indent: -14.150000000000006pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;&nbsp;→ &nbsp;a a a b b Y Y Z Y Z &nbsp;→ &nbsp;a a a b b Y Y Y Z Z → &nbsp;a a a b b c Y Y Z Z → &nbsp;a a a b b c c Y Z Z</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 85.05pt; text-indent: -14.150000000000006pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;&nbsp;→ &nbsp;a a a b b c c c Z Z → &nbsp;a a a b b c c c d Z → &nbsp;a a a b b c c c d d</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 35.4pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Con este tipo de gramáticas se podrían especificar (al menos buena parte de) los Sistemas de Tipos de los lenguajes de programación, los cuales definen sus aspectos semánticos (de significado, como los del paso de parámetros que mencionamos, o la equivalencia de tipos). Sin embargo, dado que el procesamiento de estas gramáticas es más complejo y costoso en tiempo que el de las Libres de Contexto, y que la mayoría de los constructos de los lenguajes de computación son de este último tipo, los aspectos semánticos también se suelen abordar apoyándose en gramáticas Libres de Contexto y en una </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Tabla de Identificadores </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">(en la cual suele almacenarse, entre otras cosas, su nombre, clase (si es variable, procedimiento, función, etc.), tipo (v.gr. integer, string, </span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">〈</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">char, real</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">〉</span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">→</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> boolean), y dirección). </span></p><p><strong style="font-weight: normal;"><strong style="font-weight: normal;">&nbsp;</strong></strong></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 14.666666666666666px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Lenguajes y Compiladores </span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Obviando algunas precisiones, un compilador suele tener una estructura como la siguiente:</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: center;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><img src="https://lh6.googleusercontent.com/-sJNqehZmbwX1MVNl0QyoKaLLLMbMDplka0JgqZPHNGqO4sX8hIW1xfwbleLf_edEqcig1TGAoE48srFplrF1sW9hC98B-DXEItKmNvJHc7BhR7OTAXm4E9sSXnjxTchNRn_7vtoy5KfgoHq5g" width="489" height="227" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" /></span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Grosso modo</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, su funcionamiento es como sigue:</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Cada vez que el </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">scanner</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> (</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Analizador Léxico</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">) es llamado, reanuda su lectura de caracteres del </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Código Fuente</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> escrito en el Lenguaje</span><span style="font-size: 7.999999999999999px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">1</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">; se salta caracteres irrelevantes (como una secuencia de comentarios, blancos, y/o saltos de línea) y luego concatena los que sí son relevantes hasta completar una cadena que tenga significado por sí misma (por ejemplo “</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">{</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">“, “</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">main</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">” y “</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">contador</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">” en el lenguaje C); en seguida detecta si la cadena es una palabra reservada (como “</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">main</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">”), un símbolo (como “</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">{</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">“,) o un identificador (como “</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">contador</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">”), en cuyo caso &nbsp;lo busca en la </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Tabla de Identificadores</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> y si no lo encuentra lo da de alta; finalmente, regresa esta información a la subrutina que lo llamó, usualmente el </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">parser</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">.</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">El </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">parser</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> (</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Analizador Sintáctico</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">) suele ser el componente central del procesamiento de un compilador. Manda llamar al scanner, el cual le regresa la cadena que acaba de completar y la información que mencionamos arriba. Con esos datos, el </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">parser</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> busca seguir alguna de las reglas gramaticales del lenguaje; en caso de no encontrar alguna envía un mensaje de error. En su procesamiento va utilizando y actualizando la Tabla de Identificadores (por ejemplo, escribiendo si el Identificador es el nombre de una subrutina o de una variable, así como su tipo), va construyendo el </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Árbol Sintáctico</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> del programa en cuestión (ver un ejemplo en seguida), y va ejecutando instrucciones que tiene “embebidas”, tanto del </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Analizador Semántico</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> que revisa cuestiones relacionadas principalmente con tipos de datos (para lo cual se apoya en la Tabla de Identificadores), como del </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Generador de Código</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> (el cual también se apoya en esa Tabla) para ir construyendo el </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Código Objeto</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> con instrucciones en el Lenguaje</span><span style="font-size: 7.999999999999999px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">2.</span></p><p><strong style="font-weight: normal;"><strong style="font-weight: normal;"><br /><br /></strong></strong></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">El árbol sintáctico para la cadena </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">a</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">2</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> b</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">3</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> c</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">3</span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> d</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: super; white-space: pre-wrap;">2</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> &nbsp;del lenguaje </span><span style="font-size: 13.333333333333332px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">L</span><span style="font-size: 7.999999999999999px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: bold; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">2</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, descrito arriba, se muestra en la siguiente figura. En ella se puede observar que se parte de S</span><span style="font-size: 7.999999999999999px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: sub; white-space: pre-wrap;">0</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> y se van generando ramificaciones sustituyendo no-Terminales mediante la aplicación de alguna regla de la gramática; las hojas del árbol acaban siendo Terminales o </span><span style="font-size: 13.333333333333332px; font-family: Symbol; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">λ</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">.</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 16px; font-family: 'Times New Roman'; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><img src="https://lh5.googleusercontent.com/J17SZbUIb5-2NzgfVORHxa98xlVeddrw0sFyScmZmRIzDpHibV0DpD99XiRC7MH1e80kzlx8TSN3pMoyY6sKGlTsWGDMqEycn5hapmOp8bT-ckI5soBuliCms8IzksFg-4KRjfT4nuCXQB67Bw" width="62" height="201" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" /></span></p><p><strong style="font-weight: normal;"><strong style="font-weight: normal;">&nbsp;</strong></strong></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 14.666666666666666px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Compiladores y Arquitectura </span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">La investigación en Arquitectura de Software ha estado motivada principalmente porque los sistemas han venido creciendo en tamaño y complejidad, haciendo que el tema de mayor preocupación no sean ya tanto los algoritmos y las estructuras de datos, sino la interacción entre los constituyentes del sistema.</span></p><p><strong style="font-weight: normal;"><strong style="font-weight: normal;">&nbsp;</strong></strong></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Esta investigación puede verse como una continuación natural del desarrollo de mecanismos de abstracción en los lenguajes de programación, los cuales buscan facilitar el desarrollo de sistemas:</span></p><ul style="margin-top: 0pt; margin-bottom: 0pt;"><li style="list-style-type: disc; font-size: 13.333333333333332px; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Los primeros programas de software fueron escritos en lenguaje máquina. La inserción de una nueva instrucción podía requerir tener que revisar manualmente el programa completo, lo cual motivó el desarrollo de Ensambladores Simbólicos, que hacían actualización automática de referencias y permitían utilizar nemónicos en lugar de códigos de operación de instrucciones. Los posteriores procesadores de macros fueron más allá y permitieron que un solo símbolo fuera sustituido por una secuencia de instrucciones.</span></p></li><li style="list-style-type: disc; font-size: 13.333333333333332px; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Después se detectaron patrones de ejecución comunes, como la evaluación de expresiones aritmético-algebraicas, el llamado a subrutinas, así como las instrucciones de alternación (como el “</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">if</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">”) y de repetición (como el “</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">while</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">”).</span></p></li></ul><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 36pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Luego se detectaron también patrones en el uso de datos, que condujeron al desarrollo de Sistema de Tipos que incluían tipos básicos y constructores de tipos.</span></p><ul style="margin-top: 0pt; margin-bottom: 0pt;"><li style="list-style-type: disc; font-size: 13.333333333333332px; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Después vino la introducción de módulos, que permitió “aislar” subrutinas y tipos de datos para impedir su modificación, y proveer interfaces de los mismos solamente para su uso a (el resto de) los programadores.</span></p></li><li style="list-style-type: disc; font-size: 13.333333333333332px; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Hoy se trabaja en la formalización de Patrones Arquitectónicos para poder procesarlos con lenguajes formales, &nbsp;facilitando la construcción de la arquitectura los sistemas.</span></p></li></ul><p><strong style="font-weight: normal;"><strong style="font-weight: normal;">&nbsp;</strong></strong></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Es común que la </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">arquitectura</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> de un producto de software se defina formalmente como un grafo dirigido definido por: a) un conjunto (finito) de nodos, que son los componentes del producto (subrutinas, datos, etc.); b) un conjunto (finito) de conectores entre los nodos (interacciones como llamadas, accesos a datos, etc.); y (eventualmente) c) un conjunto de restricciones e invariantes sobre los grafos (v.gr. la ausencia de ciclos).</span></p><p><strong style="font-weight: normal;"><strong style="font-weight: normal;">&nbsp;</strong></strong></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">En la literatura especializada se han documentado varios </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">patrones arquitectónicos</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">. Dos de ellos son: </span></p><ul style="margin-top: 0pt; margin-bottom: 0pt;"><li style="list-style-type: disc; font-size: 13.333333333333332px; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Pipelines</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">: en ellos los componentes son programas que llamamos </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">filters</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> y que se ejecutan secuencialmente, y los conectores, que llamamos </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">pipes</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, son los flujos de datos entre ellos. </span></p></li></ul><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 36pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Inicialmente (en los 70’s), la arquitectura de un compilador se veía como un </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">pipeline</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">: &nbsp;&nbsp;&nbsp;</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 36pt; text-align: center;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><img src="https://lh3.googleusercontent.com/hQ2s0uZ-UpQIx7bbLuBZqMV9537pAsyv1Fmjo9Ox0zQ1ru1qq8pa9gtk4Pci-EnB0C-CStCSKL1DvzHWay5ui7ejKNySmzD4IUZY4nKNiseAL73qBR7cq_HahEe14Xc3XqUG1zOk8-Kh7Ti4pw" width="509" height="193" style="border: none; transform: rotate(0.00rad); -webkit-transform: rotate(0.00rad);" /></span></p><p><strong style="font-weight: normal;"><strong style="font-weight: normal;"><br /><br /><br /></strong></strong></p><ul style="margin-top: 0pt; margin-bottom: 0pt;"><li style="list-style-type: disc; font-size: 13.333333333333332px; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Repositories</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">: uno de los tipos más importantes de </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">repository</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> son los </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">blackboards</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, en los cuales hay una(s) estructura(s) de datos central(es) a la(s) que se conectan los componentes, la(s) cual(es) dirige(n) la ejecución de los mismos.</span></p></li></ul><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; margin-left: 36pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">La arquitectura de los compiladores se ha venido sofisticando y hoy en día tiene más bien una estructura de </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">blackboard</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> como la que mostramos al inicio de la sección anterior.</span></p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr">&nbsp;</p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Los compiladores pueden ser un muy buen ejemplo al abordar el tema de los patrones arquitectónicos: </span></p><ul style="margin-top: 0pt; margin-bottom: 0pt;"><li style="list-style-type: disc; font-size: 13.333333333333332px; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">facilitan el estudio de la necesidad y aplicabilidad de patrones a la luz de la complejidad y sofisticación el producto en cuestión a lo largo del tiempo (como hemos intentado hacerlo aquí, si bien superficialmente);</span></p></li><li style="list-style-type: disc; font-size: 13.333333333333332px; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;" dir="ltr"><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">cuando se construyen compiladores se aprovechan los avances en el procesamiento de lenguajes formales para generar automáticamente el </span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">blackboard</span><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> y utilizar meta-lenguajes especializados (como como las Expresiones Regulares, la notación BNF, y los Grafos de Sintaxis) con los cuales se especifica la instancia del compilador específico, así como para aplicar el método de análisis sintáctico que resulte más conveniente. </span></p></li></ul><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr">&nbsp;</p><p style="line-height: 1.2; margin-top: 0pt; margin-bottom: 0pt; text-align: justify;" dir="ltr"><span style="font-size: 13.333333333333332px; font-family: Calibri; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Podremos abundar sobre este tema en números posteriores.</span></p></div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>Luis Vinicio León Carrillo es Director General y co-fundador de e-Quallity. Fue profesor-investigador en la universidad ITESO. Realizó estudios de posgrado en Alemania, durante los cuales abordó temas relacionados con la prueba de software y los métodos y lenguajes formales.</p></div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Wed, 12 Oct 2016 07:59:18 +0000 sg 6829 at https://sg.com.mx https://sg.com.mx/revista/52/special-purpose-languages-parte-4#comments Special Purpose Languages, parte 3 https://sg.com.mx/revista/51/special-purpose-languages-parte-3 <span class="field field--name-title field--type-string field--label-hidden">Special Purpose Languages, parte 3</span> <div class="images-container clearfix"> <div class="image-preview clearfix"> <div class="image-wrapper clearfix"> <div class="field field--name-field-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/images/testing.png" width="421" height="245" alt="" typeof="foaf:Image" /> </div> </div> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/1" lang="" about="/user/1" typeof="schema:Person" property="schema:name" datatype="" class="username">sg</a></span> <span class="field field--name-created field--type-created field--label-hidden">Fri, 07/08/2016 - 12:33</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/51" hreflang="und">SG #51</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/secci%C3%B3n-revista/prueba-software" hreflang="und">Prueba de Software</a></li> </ul> </div> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Autor</h3> <ul class='links field__items'> <li><a href="/buzz/autores/luis-vinicio-leon-carrillo" hreflang="und">Luis Vinicio León Carrillo</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p class="Parrafo-cuerpo"><span class="CharOverride-28">&nbsp;</span><span class="CharOverride-28">En el número anterior</span> definimos lo que es un lenguaje formal de la siguiente manera:</p> <ol> <li class="Numbered-list ParaOverride-13">partimos de la definición del concepto de alfabeto como un conjunto finito de caracteres <span class="CharOverride-82">B = { b</span><span class="CharOverride-83">1</span><span class="CharOverride-82"> , b</span><span class="CharOverride-83">2</span><span class="CharOverride-82"> , …, b</span><span class="CharOverride-83">m</span><span class="CharOverride-82"> }</span>, y dijimos que <span class="CharOverride-82">B</span> tiene una cardinalidad (cantidad de elementos) igual a <span class="CharOverride-82">m</span> , lo cual escribimos como <span class="CharOverride-82">|B| = m</span> ;</li> <li class="Numbered-list ParaOverride-13">definimos la operación de concatenación ‘<span class="CharOverride-84">·</span>‘ sobre caracteres (lo que nos permite construir <span class="CharOverride-82">b</span><span class="CharOverride-83">5</span><span class="CharOverride-84">·</span><span class="CharOverride-82"> b</span><span class="CharOverride-83">4</span><span class="CharOverride-84">·</span><span class="CharOverride-82"> b</span><span class="CharOverride-83">8</span><span class="CharOverride-84">·</span><span class="CharOverride-82"> b</span><span class="CharOverride-83">8</span> ) y sobre conjuntos de caracteres (lo que nos permite construir <span class="CharOverride-82">B </span><span class="CharOverride-84">·</span><span class="CharOverride-82"> A </span><span class="CharOverride-84">·</span><span class="CharOverride-82"> C</span> ) ;</li> <li class="Numbered-list ParaOverride-13">definimos la exponenciación de la concatenación <span class="CharOverride-82">B</span><span class="CharOverride-85">x</span> sobre un alfabeto <span class="CharOverride-82">B</span> como la aplicación de la concatenación <span class="CharOverride-82">x-1</span> veces sobre el alfabeto ( <span class="CharOverride-82">B </span><span class="CharOverride-84">·</span><span class="CharOverride-82"> B </span><span class="CharOverride-84">·</span><span class="CharOverride-82"> … </span><span class="CharOverride-84">·</span><span class="CharOverride-82"> B</span> , donde <span class="CharOverride-82">B</span> aparece <span class="CharOverride-82">x</span> veces) ;</li> <li class="Numbered-list ParaOverride-13">definimos la cerradura de Kleene B<span class="CharOverride-86">*</span> como la unión de todas las exponenciaciones sobre el alfabeto <span class="CharOverride-82">B (B</span><span class="CharOverride-85">*</span><span class="CharOverride-82"> = U</span><span class="CharOverride-85">∞</span><span class="CharOverride-83">i=0</span><span class="CharOverride-82"> B</span><span class="CharOverride-85">i</span><span class="CharOverride-82"> ) </span>;</li> <li class="Numbered-list ParaOverride-13">definimos que un lenguaje formal sobre un alfabeto B es cualquier subconjunto de B* .</li> </ol> <p class="Parrafo-cuerpo">De lo anterior se desprende que, dado un código ASCII extendido que llamaremos <span class="CharOverride-82">AE</span> de cualquier cantidad de caracteres, podemos ver al lenguaje Java como el subconjunto de cadenas de cualquier longitud escritas utilizando ese AE que son aceptadas como “correctas” por el compilador de Java. Lo mismo es cierto si sustituimos “Java” por el nombre de cualquier lenguaje de computación.</p> <p class="Parrafo-cuerpo">Ahora bien, en <span class="CharOverride-82">AE</span><span class="CharOverride-85">*</span> están incluidos no solo todos los lenguajes de programación existentes y por existir, sino también todos los compiladores (escritos y por escribirse) de todos esos lenguajes. De hecho, en <span class="CharOverride-82">AE</span><span class="CharOverride-85">*</span> se encuentran todas las cadenas de caracteres que podamos escribir en esa extensión del ASCII, incluyendo los programas “incorrectos” en todos los lenguajes.</p> <p class="Parrafo-cuerpo">Contestemos ahora las primeras 2 preguntas que planteamos al final del número anterior, en el cual dijimos que dado un conjunto <span class="CharOverride-82">A</span> que tiene <span class="CharOverride-82">i</span> elementos, la cantidad de subconjuntos que pueden formarse sobre <span class="CharOverride-82">A</span> es igual a <span class="CharOverride-82">2</span><span class="CharOverride-85">i</span> .</p> <p class="Parrafo-cuerpo">Dijimos también que <span class="CharOverride-82">B*</span>, la <span class="CharOverride-40">Cerradura de Kleene</span> sobre el alfabeto <span class="CharOverride-82">B</span>, es un conjunto infinito pero contable, porque tiene la misma cardinalidad que el conjunto de los números naturales <span class="CharOverride-82">N</span>. Esto implica en particular que, así como ocurre en el conjunto de los números naturales <span class="CharOverride-82">N</span>, dada una de las cadenas de <span class="CharOverride-82">B</span><span class="CharOverride-85">*</span>, siempre podemos definir cuál es la que le sigue y listar sus elementos en orden sin saltarnos alguno (en <span class="CharOverride-82">N</span> , dado un número natural <span class="CharOverride-82">y</span>, sabemos que el que le sigue es <span class="CharOverride-82">y+1</span>).</p> <p class="Parrafo-cuerpo">Del penúltimo párrafo se sigue que la cantidad de lenguajes sobre cualquier alfabeto <span class="CharOverride-82">B</span> es igual a <span class="CharOverride-82">2</span><span class="CharOverride-85">N</span> … El asunto es que <span class="CharOverride-82">2</span><span class="CharOverride-85">N</span> es una cardinalidad estrictamente mayor que la de <span class="CharOverride-82">N</span> (siguiendo el Teorema de Cantor), lo que lo vuelve un conjunto no-contable (aquellos conjuntos en los que, dado un elemento <span class="CharOverride-82">x</span>, no es posible decir cuál elemento es el que sigue, como en el caso de los números reales R : si tenemos el número 0.0004 no podemos decir que el que le sigue es 0.0005; tampoco que es 0.00041; en realidad, entre cualesquiera 2 números reales hay una cantidad infinita de números reales).</p> <p class="Parrafo-cuerpo">Una consecuencia importantísima de lo anterior es que la cantidad de lenguajes (<span class="CharOverride-82">2</span><span class="CharOverride-85">N</span>) que pueden definirse sobre un alfabeto es estrictamente mayor que la cantidad de cadenas (<span class="CharOverride-82">N</span>) que pueden construirse sobre ese alfabeto, así es que: independientemente del tamaño del alfabeto, siempre tendremos lenguajes sobre ese alfabeto para los que no podemos definir un compilador, esto es, siempre habrá lenguajes que no podremos procesar.</p> <p class="Parrafo-cuerpo">Para nuestro propósito de construir lenguajes propietarios, esto significa que para poder procesarlos, en principio debemos observar algunas restricciones para su diseño. El lado bueno de esto es que, dado que estamos acostumbrados a utilizar lenguajes de programación y sus estructuras obviamente son procesables, podemos incluir estructuras de ese tipo en nuestro lenguaje. El lado malo es precisamente eso mismo: como estamos acostumbrados a ello, probablemente no incluyamos otras estructuras que serian más adecuadas para las actividades que nuestros programadores automatizarán.</p> <p class="Parrafo-cuerpo">El punto no es para subestimarse: las estructuras que tenemos a nuestra disposición en un lenguaje (sea artificial o natural) pueden imponer límites a lo que podemos expresar (sea programar o pensar); como ejemplo tenemos el comentario del reconocido científico computacional C.A.R. Hoare sobre su método de ordenamiento Quick-Sort, después de que tomó un curso de Algol-60 (primer lenguaje en ofrecer la posibilidad de escribir subrutinas recursivas):</p> <p class="Parrafo-cuerpo ParaOverride-8"><span class="CharOverride-40">“Fue entonces que aprendí por primera vez sobre procedimientos recursivos y vi cómo programar el método de ordenamiento que previamente había tenido tanta dificultad para explicar.”</span></p> <p class="Parrafo-cuerpo">Para contestar la tercera pregunta necesitaremos elementos que revisaremos más adelante; pero antes, veamos algunos ejemplos.</p> <h3 class="Section-subtitle">Ejemplos con “especificaciones algebráicas”</h3> <p class="Parrafo-cuerpo">Usando las definiciones arriba mencionadas y tomando como convención que escribiremos:</p> <ul> <li class="Bullet-list ParaOverride-13"><span class="CharOverride-82">b</span><span class="CharOverride-83">i</span><span class="CharOverride-82">b</span><span class="CharOverride-83">j</span> en lugar de <span class="CharOverride-82">b</span><span class="CharOverride-83">i</span><span class="CharOverride-84">·</span><span class="CharOverride-82"> b</span><span class="CharOverride-83">j</span> (concatenación de caracteres);</li> <li class="Bullet-list ParaOverride-13"><span class="CharOverride-82">b</span><span class="CharOverride-83">i</span><span class="CharOverride-85">n</span> en lugar de <span class="CharOverride-82">b</span><span class="CharOverride-83">i</span><span class="CharOverride-84">·</span><span class="CharOverride-82"> … </span><span class="CharOverride-84">·</span><span class="CharOverride-82"> b</span><span class="CharOverride-83">i</span> (concatenación en la que <span class="CharOverride-82">b</span><span class="CharOverride-83">i</span> aparece <span class="CharOverride-82">n</span> veces);</li> <li class="Bullet-list ParaOverride-13"><span class="CharOverride-82">a</span> en lugar de <span class="CharOverride-82">b</span><span class="CharOverride-83">1</span> , <span class="CharOverride-82">b</span> en lugar de <span class="CharOverride-82">b</span><span class="CharOverride-83">2</span> , <span class="CharOverride-82">c</span> en lugar de <span class="CharOverride-82">b</span><span class="CharOverride-83">3</span> , y <span class="CharOverride-82">d</span> en lugar de <span class="CharOverride-82">b</span><span class="CharOverride-83">4</span> (haciendo concreto el alfabeto abstracto<br /> <span class="CharOverride-82">B = { b</span><span class="CharOverride-83">1</span><span class="CharOverride-82"> , b</span><span class="CharOverride-83">2</span><span class="CharOverride-82"> , …, b</span><span class="CharOverride-83">4</span> } ) ;</li> </ul> <p class="Parrafo-cuerpo">especifiquemos algunos lenguajes formales:</p> <ul> <li class="Bullet-list ParaOverride-13"><span class="CharOverride-82">a</span><span class="CharOverride-85">m</span><span class="CharOverride-82"> b</span><span class="CharOverride-85">n</span><span class="CharOverride-82"> c</span><span class="CharOverride-85">i</span> , para <span class="CharOverride-82">m, n, i</span> enteros mayores a cero e independientes entre sí. Este sencillo lenguaje, que llamaremos <span class="CharOverride-82">L</span><span class="CharOverride-83">1</span> , especifica todas las cadenas que tienen una o más <span class="CharOverride-82">a</span>’s seguidas por una o más <span class="CharOverride-82">b</span>’s seguidas por una o más <span class="CharOverride-82">c</span>’s.</li> <li class="Bullet-list ParaOverride-13"><span class="CharOverride-82">a</span><span class="CharOverride-85">m</span><span class="CharOverride-82"> b</span><span class="CharOverride-85">n</span><span class="CharOverride-82"> c</span><span class="CharOverride-85">n</span><span class="CharOverride-82"> d</span><span class="CharOverride-85">m</span> , para <span class="CharOverride-82">m, n ≥ 0</span> . Obviando detalles, este lenguaje que llamaremos <span class="CharOverride-82">L</span><span class="CharOverride-83">2</span> (más complejo que <span class="CharOverride-82">L</span><span class="CharOverride-83">1</span> ), es una abstracción de los sublenguajes incluidos en prácticamente todos los lenguajes de programación, en los que por ejemplo, los paréntesis y las llaves deben venir por pares (uno de cierre por cada uno de apertura) y estar “emparejados adecuadamente” (por ejemplo, no se acepta “ ( … {… ( … ) … ) … } ” ) ;</li> <li class="Bullet-list ParaOverride-13"><span class="CharOverride-82">a</span><span class="CharOverride-85">m</span><span class="CharOverride-82"> b</span><span class="CharOverride-85">n</span><span class="CharOverride-82"> c</span><span class="CharOverride-85">m</span><span class="CharOverride-82"> d</span><span class="CharOverride-85">n</span> , para <span class="CharOverride-82">m, n ≥ 0</span> . Obviando detalles, este lenguaje que llamaremos <span class="CharOverride-82">L</span><span class="CharOverride-83">3</span> (más complejo que <span class="CharOverride-82">L</span><span class="CharOverride-83">2</span> ), es una abstracción de la especificación del mecanismo de paso de parámetros que utilizan muchos lenguajes de programación para exigir que la cantidad de parámetros establecidos en la definición de una subrutina sea la misma que cuando ésta se utiliza.</li> </ul> <h3 class="Section-subtitle">Gramáticas</h3> <p class="Parrafo-cuerpo">Después de esa primera definición de lenguaje en términos de concatenaciones sobre alfabetos, que podríamos llamar algebraica y que es más bien declarativa, tomaremos ahora un enfoque un poco más imperativo utilizando reglas (que pueden verse como una abstracción del concepto de patrones).</p> <p class="Parrafo-cuerpo">Podemos definir lenguajes utilizando gramáticas, las cuales son cuátruplas de la forma</p> <p class="Parrafo-cuerpo"><span class="CharOverride-82"> &lt; T, N, S</span><span class="CharOverride-83">0</span><span class="CharOverride-82"> , R &gt;</span> donde</p> <p class="Parrafo-cuerpo ParaOverride-14"><span class="CharOverride-82">T</span> es el conjunto de los símbolos terminales del lenguaje (en adelante “Terminales”), los cuales podemos ver como el alfabeto con cuyos elementos finalmente se construyen las cadenas de caracteres;</p> <p class="Parrafo-cuerpo ParaOverride-14"><span class="CharOverride-82">N</span> es el conjunto de los símbolos no-terminales del lenguaje (en adelante “no-Terminales”); aquellos símbolos abstractos que deben definirse en términos de Terminales y no-Terminales; nota: debe cumplirse que <span class="CharOverride-82">T </span><span class="CharOverride-87">∩</span><span class="CharOverride-82"> N = {} </span>;</p> <p class="Parrafo-cuerpo ParaOverride-14"><span class="CharOverride-82">R</span> es el subconjunto del producto cartesiano<br /> <span class="CharOverride-82">(T </span><span class="CharOverride-87">∪</span><span class="CharOverride-82"> N)</span><span class="CharOverride-85">*</span><span class="CharOverride-82"> x (T </span><span class="CharOverride-87">∪</span><span class="CharOverride-82"> N)</span><span class="CharOverride-85">*</span> que define la relación matemática que denota las reglas de reescritura del lenguaje (en adelante “Reglas”);</p> <p class="Parrafo-cuerpo ParaOverride-14"><span class="CharOverride-82">S</span><span class="CharOverride-83">0</span> es el elemento distintivo de los no-Terminales llamado “Símbolo-inicial”, que es con el que inicia el “procesamiento” de <span class="CharOverride-82">R</span> .</p> <p class="Parrafo-cuerpo">Escribiremos las Reglas utilizando el “meta-lenguaje” (llamado así porque es un lenguaje con el cual definimos lenguajes) llamado BNF (Backus-Naur Form). En él, para cada regla se coloca el primer elemento del producto cartesiano, seguido del símbolo “<span class="CharOverride-87">→</span>” seguido del segundo elemento del producto cartesiano.</p> <p class="Parrafo-cuerpo">Ahora bien, cuando tengamos un conjunto de reglas como</p> <p class="Parrafo-cuerpo ParaOverride-14"><span class="CharOverride-87">α → β</span><span class="CharOverride-83">1</span><br /> <span class="CharOverride-87">α → β</span><span class="CharOverride-83">2</span><span class="CharOverride-87"></span><br /> …<br /> <span class="CharOverride-87">α → β</span><span class="CharOverride-83">n</span> , donde <span class="CharOverride-87">α</span> y todas las <span class="CharOverride-87">β</span><span class="CharOverride-83">i</span> son elementos de <span class="CharOverride-82">(T </span><span class="CharOverride-87">∪</span><span class="CharOverride-82"> N)</span><span class="CharOverride-85">*</span> (o sea, elementos de la cerradura de Kleene de la unión de los Terminales y no-Terminales; es decir, combinaciones de uno o Terminales y no-Terminales),</p> <p class="Parrafo-cuerpo">lo escribiremos como</p> <p class="Parrafo-cuerpo ParaOverride-8"><span class="CharOverride-87">α → β</span><span class="CharOverride-83">1</span><span class="CharOverride-87"> | β</span><span class="CharOverride-83">2</span><span class="CharOverride-87"> | … | β</span><span class="CharOverride-83">n</span></p> <p class="Parrafo-cuerpo">Si alguna <span class="CharOverride-87">β</span><span class="CharOverride-83">i</span> contiene cero Terminales y cero no-Terminales, la escribiremos como <span class="CharOverride-87">λ</span> (la letra griega lambda), que representará la cadena vacía.</p> <p class="Parrafo-cuerpo">Además, escribiremos los Terminales con <span class="CharOverride-40">minúsculas</span>, los no-Terminales con <span class="CharOverride-40">MAYÚSCULAS</span>, y <span class="CharOverride-82">S</span><span class="CharOverride-83">0</span> será el no-Terminal que aparece a la izquierda de “<span class="CharOverride-87">→</span>” en la primer Regla. Con ello <span class="CharOverride-82">R</span> define la gramática por sí sola, porque con las convenciones queda explícito cuáles son los Terminales, los no-Terminales y <span class="CharOverride-82">S</span><span class="CharOverride-83">0</span> . Entonces, en adelante podremos definir un lenguaje listando únicamente las reglas de <span class="CharOverride-82">R</span> .</p> <h3 class="Section-subtitle">Una jerarquía de lenguajes</h3> <p class="Parrafo-cuerpo">Tenemos la siguiente categorización de lenguajes, que se hace considerando la complejidad de la estructura de las reglas en la <span class="CharOverride-82">R</span> particular que los define (por cuestiones de espacio, obviaremos algunos detalles):</p> <ul> <li class="Bullet-list ParaOverride-13">Llamaremos gramáticas regulares a aquellas cuyas reglas en <span class="CharOverride-82">R</span> sean de la forma <span class="CharOverride-82">A→ B d | d</span> (o menos compleja); y llamaremos lenguajes regulares (o de Tipo 3, o Lgs<span class="CharOverride-88">3</span> de manera corta) a aquellos que puedan definirse utilizando gramáticas regulares. Nota: las reglas pueden ser de la forma <span class="CharOverride-82">A→ d B | d</span> , pero no se deben mezclar ambas formas.)</li> <li class="Bullet-list ParaOverride-13">Llamaremos gramáticas libres de contexto a aquellas cuyas reglas en <span class="CharOverride-82">R</span> sean de la forma <span class="CharOverride-82">A→ </span><span class="CharOverride-87">α</span> (o menos compleja), y lenguajes libres de contexto (o de Tipo 2, o Lgs<span class="CharOverride-88">2</span>) a aquellos que puedan definirse utilizando gramáticas libres de contexto.</li> <li class="Bullet-list ParaOverride-13">Llamaremos gramáticas sensibles al contexto a aquellas cuyas reglas en <span class="CharOverride-82">R</span> sean de la forma <span class="CharOverride-87">β</span><span class="CharOverride-83">1</span><span class="CharOverride-82"> A </span><span class="CharOverride-87">β</span><span class="CharOverride-83">2</span><span class="CharOverride-82"> → </span><span class="CharOverride-87">β</span><span class="CharOverride-83">1</span><span class="CharOverride-87">α</span><span class="CharOverride-87">β</span><span class="CharOverride-83">2</span> (o menos compleja), donde <span class="CharOverride-87">α</span><span class="CharOverride-89"> ≠ λ</span> ; y lenguajes sensibles al contexto (o de Tipo 1, o Lgs<span class="CharOverride-88">1</span>) a aquellos que puedan definirse utilizando gramáticas sensibles al contexto. Decimos que <span class="CharOverride-87">β</span><span class="CharOverride-83">1</span><span class="CharOverride-82"> y </span><span class="CharOverride-87">β</span><span class="CharOverride-83">2</span> representan el contexto en el que <span class="CharOverride-82">A</span> se puede transformar en <span class="CharOverride-87">α</span> .Ahora bien, como <span class="CharOverride-87">α ≠ λ</span> , entonces la suma de la cantidad de Terminales y de no-Terminales en <span class="CharOverride-87">α</span> es mayor o igual a uno; a esta cantidad la llamaremos la longitud de <span class="CharOverride-87">α</span> y la denotaremos con <span class="CharOverride-87">|α|</span>. Ahora podemos generar otra definición menos restrictiva (aunque una que no deja ver el atributo de “sensible al contexto”): llamaremos gramáticas sensibles al contexto a aquellas cuyas reglas en <span class="CharOverride-82">R</span> sean de la forma<br /> <span class="CharOverride-87">θ → α</span> (o menos compleja), donde <span class="CharOverride-87">θ ∈</span><span class="CharOverride-82"> (T </span><span class="CharOverride-87">∪</span><span class="CharOverride-82"> N)</span><span class="CharOverride-85">*</span><span class="CharOverride-82"> , </span><span class="CharOverride-87">θ</span><span class="CharOverride-82"> ≠ </span><span class="CharOverride-87">λ</span><span class="CharOverride-82"> y |</span><span class="CharOverride-87">θ</span><span class="CharOverride-82">| ≤ |</span><span class="CharOverride-87">α</span><span class="CharOverride-82">|</span> ; y llamaremos lenguajes sensibles al contexto a aquellos que puedan definirse utilizando este tipo de gramáticas</li> <li class="Bullet-list ParaOverride-13">Por último, llamaremos gramáticas estructuradas por frases a aquellas cuyas reglas en <span class="CharOverride-82">R</span> sean de la forma <span class="CharOverride-87">θ → α</span> (o menos compleja), donde <span class="CharOverride-87">θ</span><span class="CharOverride-87">∈</span><span class="CharOverride-82"> (T </span><span class="CharOverride-87">∪</span><span class="CharOverride-82"> N)</span><span class="CharOverride-85">*</span> y <span class="CharOverride-87">θ ≠ λ</span> ; y llamaremos lenguajes estructurados por frases (o Tipo 0, o Lgs<span class="CharOverride-88">0</span>) a aquellos que puedan definirse utilizando gramáticas estructuradas por frases.</li> </ul> <p class="Parrafo-cuerpo">Lo anterior define lo que es conocido como la Jerarquía de Chomsky, en la cual ocurre, como se puede observar, que Lgs<span class="CharOverride-88">3</span> <span class="CharOverride-87">⊂≠</span> Lgs<span class="CharOverride-88">2</span> <span class="CharOverride-87">⊂≠</span> Lgs<span class="CharOverride-88">1</span> <span class="CharOverride-87">⊂≠</span> Lgs<span class="CharOverride-88">0</span> (esto es, los Lgs<span class="CharOverride-88">i</span> son subconjuntos propios de los Lgs<span class="CharOverride-88">i-1</span>). Para el caso particular de Lgs<span class="CharOverride-88">3</span> <span class="CharOverride-87">⊂≠</span> Lgs<span class="CharOverride-88">2</span> , esto significa que todos los lenguajes regulares (todas las gramáticas regulares) son libres de contexto, pero que hay lenguajes libres de contexto que no son regulares (para los que no existen gramáticas regulares que los definan).</p> <p class="Parrafo-cuerpo">La Jerarquía de Chomsky muestra con claridad un crecimiento significativo en la complejidad de la estructura de las reglas, o dicho de otra manera, una disminución significativa en las restricciones sobre esa estructura. Esto obviamente impacta en la complejidad (incluso en la posibilidad) de procesar todos esos tipos de lenguajes. Retomaremos el tema con más profundidad más adelante.</p> <p class="Basic-Paragraph"><span class="Referencias-title _idGenCharOverride-1"><br /> Referencias</span></p> <ol> <li class="Referencias ParaOverride-15">L. León. “Los Special Purpose Languages, parte 1”. Revista Software Guru #48.<br /> <a href="http://sg.com.mx/revista/48/los-special-purpose-languages-0"><span class="Hyperlink">http://sg.com.mx/revista/48/los-special-purpose-languages</span></a></li> <li class="Referencias">L. León. “Los Special Purpose Languages, parte 2”. Revista Software Guru #50.<br /> <span class="Hyperlink"><a href="http://sg.com.mx/revista/50/special-purpose-languages-2">http://sg.com.mx/revista/50/los-special-purpose-languages-2</a></span></li> </ol> </div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p dir="ltr">Luis Vinicio León Carrillo es Director General y socio fundador de e-Quallity. Antes de fundar e-Quallity fue profesor-investigador en la universidad jesuita ITESO durante varios lustros, que incluyeron una estancia de posgrado en Alemania, durante la cual abordó aspectos relacionados con el Testing y los formal methods and languages.</p> </div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Fri, 08 Jul 2016 17:33:09 +0000 sg 6565 at https://sg.com.mx https://sg.com.mx/revista/51/special-purpose-languages-parte-3#comments Special Purpose Languages, parte 2 https://sg.com.mx/revista/49/special-purpose-languages-parte-2 <span class="field field--name-title field--type-string field--label-hidden">Special Purpose Languages, parte 2</span> <div class="images-container clearfix"> <div class="image-preview clearfix"> <div class="image-wrapper clearfix"> <div class="field field--name-field-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/images/aboratory.jpg" width="1280" height="853" alt="" typeof="foaf:Image" /> </div> </div> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/1" lang="" about="/user/1" typeof="schema:Person" property="schema:name" datatype="" class="username">sg</a></span> <span class="field field--name-created field--type-created field--label-hidden">Tue, 12/22/2015 - 19:50</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/49" hreflang="und">SG #49</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/secci%C3%B3n-revista/prueba-software" hreflang="und">Prueba de Software</a></li> </ul> </div> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Autor</h3> <ul class='links field__items'> <li><a href="/buzz/autores/luis-vinicio-leon-carrillo" hreflang="und">Luis Vinicio León Carrillo</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>En el número anterior hice alusión a la plática que ofrecí en el pasado SG Conference &amp; Expo. Durante ella analizamos brevemente la problemática que dio origen a la llamada “Crisis del software” (a partir de la cual se acuñó por cierto el término “Ingeniería de Software” en los 60), y describimos algunos enfoques que se han aplicado para abatirla, entre ellos los métodos formales, los cuales definimos y describimos brevemente en el número anterior y vimos que utilizan lenguajes formales (que definimos de manera no-formal) procesados por compiladores.</p><p>El “estado del arte” de nuestra industria ha estado fuertemente influenciado por el desarrollo de los que llamo: “lenguajes de computación”, que incluyen tanto los lenguajes de programación (de bajo y alto nivel; de primera, segunda, tercera, cuarta y quinta generación; procedurales, funcionales y lógicos, etc.), como los lenguajes de documentación, de especificación, y de arquitectura, entre otros.</p><p>En general, dichos lenguajes nos sirven para formalizar patrones que posibilitan la automatización.</p><p>Un caso un tanto distinto es el que comenzamos a revisar en el número pasado, en el que les pedí aplicar 3 veces la siguiente regla/patrón haciendo las sustituciones siempre en paralelo.</p><p><img src="/sites/default/files/images/stories/sg49/prueba-fig1.jpg" alt="" width="200" /></p><p>Por cuestión de espacio expongo aquí solo las primeras 2 transformaciones, en las que los colores tienen la intención de ayudar al seguimiento de las sustituciones (noten que hay ligeras variaciones en algunas inclinaciones de las figuras; finalmente las plantas son sistemas adaptativos).</p><p><img src="/sites/default/files/images/stories/sg49/prueba-fig2.jpg" alt="" width="250" /></p><p>Como pueden observar, este pequeño patrón, descrito con esa sencilla y única regla, parece describir el crecimiento de una planta (solo en 2 dimensiones). Lenguajes en los que las reglas se aplican en paralelo, se han utilizado para describir fenómenos de este tipo, y han dado lugar a toda una jerarquía de lenguajes conocida como Sistemas Lindenmayer (L-Systems), los cuales a su vez tienen relación con los fractales (el todo contenido en cada parte). Este enfoque viene de la biología (su creadora, Aristid Lindenmayer, era bióloga).</p><p>Por otro lado, los lenguajes que utilizamos en la computación utilizan reglas que se aplican no tanto en paralelo, sino más bien secuencialmente, y se definen con un marco conceptual que proviene de la Lingüística (Chomsky es lingüista).</p><p>Pero antes de entrar más en detalle con este último enfoque, déjenme abordar algunas cuestiones fundamentales utilizando el enfoque de conjuntos. Por favor, no pierdan de vista que estamos haciendo esto porque queremos describir cómo construir special purpose languages propietarios para incrementar la productividad y la calidad de nuestros procesos de desarrollo (y prueba) de software.</p><h3>Definiciones</h3><p>Un alfabeto es un conjunto finito de letras. En el caso del Español, ese conjunto tiene 30 letras (contando la ch, ll y la ü), con las cuales podemos construir palabras, oraciones y textos “correctos” en ese idioma, pero también frases que no se consideran parte del mismo (como “añu is morgen”). Podemos decir entonces que el Español es un conjunto de frases consideradas “correctas”, el cual a su vez es un subconjunto del de todas las frases que pueden escribirse con su alfabeto.</p><p>Generalicemos un poco y definamos el alfabeto <em>B = {b<sub>1</sub>, b<sub>2</sub>, …, b<sub>n</sub>}</em>, un conjunto finito que contiene <em>n</em> caracteres. Diremos que tiene una cardinalidad de <em>n</em>, y lo escribiremos <em>|B| = n</em>.</p><p>Definamos ahora la concatenación entre caracteres de un alfabeto <em>B</em> como sigue:</p><p class="code"><em>b<sub>i</sub> · b<sub>j</sub> = b<sub>i</sub>b<sub>j</sub></em><br /><em>b<sub>i</sub> · λ = λ · b<sub>i</sub> = b<sub>i</sub> (λ es la “cadena vacía: una cadena sin letras)</em><br /><em>( b<sub>i</sub> · b<sub>j</sub> ) · b<sub>k</sub> = b<sub>i</sub> · (b<sub>j</sub> · b<sub>k</sub> ) = b<sub>i</sub>b<sub>j</sub>b<sub>k</sub></em></p><p>Adicionalmente, definamos el alfabeto <em>C = {c<sub>1</sub>, c<sub>2</sub>, …, c<sub>m</sub>}</em>; C es también finito, con <em>|C| = m</em>.</p><p>Definamos la concatenación entre conjuntos de caracteres:</p><p class="code"><em>B · C&nbsp; =&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {&nbsp; b<sub>1</sub>c<sub>1</sub> , b<sub>1</sub>c<sub>2</sub> , …, b<sub>1</sub>c<sub>m</sub> , </em><br /><em>&nbsp;&nbsp;&nbsp; b<sub>2</sub>c<sub>1</sub> , b<sub>2</sub>c<sub>2</sub> , …, b<sub>2</sub>c<sub>m</sub> ,&nbsp; </em><br /><em>&nbsp;&nbsp;&nbsp; …,</em><br /><em>&nbsp;&nbsp;&nbsp; b<sub>n</sub>c<sub>1</sub> , b<sub>n</sub>c<sub>2</sub> , …, b<sub>n</sub>c<sub>m</sub>&nbsp; }</em></p><p><em>B · C</em> es también un conjunto finito, con cardinalidad <em>|B·C | = n * m</em>.</p><p>Definamos ahora la exponenciación de la concatenación aplicada a un conjunto de caracteres:</p><p class="code"><em>B<sup>x</sup> = B · B<sup>x-1</sup></em><br />B<sup>0</sup> = { λ } (El conjunto que tiene un solo elemento, que es la cadena vacía.)</p><p>B<sup>x</sup> es un conjunto finito, de cardinalidad |Bx | = |B |x + 1 (por la cadena vacía).</p><p>Ahora definamos la operación conocida como Cerradura de Kleene:</p><p class="code"><em>B*&nbsp; =&nbsp; U<sup>∞</sup><sub>i=0</sub>&nbsp; B<sup>i</sup></em><br /><em>&nbsp; &nbsp;&nbsp;&nbsp; =&nbsp; B<sup>0</sup> U B<sup>1</sup> U B<sup>2</sup> U B<sup>3</sup> U ...&nbsp;&nbsp; &nbsp;&nbsp; </em><br /><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp; {&nbsp; λ ,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (λ cadena de tamaño 0) </em><br /><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b<sub>1</sub>, b<sub>2</sub>, …, b<sub>n</sub> ,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; (n cadenas de tamaño 1)</em><br /><em>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b<sub>1</sub>b<sub>1</sub> , b<sub>1</sub>b<sub>2</sub> , …, b<sub>1</sub>b<sub>n</sub> ,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; (n2 cadenas de tamaño 2), </em><br /><em>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b<sub>2</sub>b<sub>1</sub>, b<sub>2</sub>b<sub>2</sub> , …, b<sub>2</sub>b<sub>n</sub> ,</em><br /><em>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; …,</em><br /><em>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b<sub>n</sub>b<sub>1</sub> , b<sub>n</sub>b<sub>2</sub> , …, b<sub>n</sub>b<sub>n</sub> ,&nbsp; </em></p><p class="code"><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ... &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</em></p><p>Ciertamente, B* es un conjunto infinito, pero de los que llamamos “contable”, pues podemos utilizar los números naturales IN (IN = {0, 1, 2, …}) para listar todos sus elementos en orden: para i = 0 (un número natural) sabemos que hay 1 cadena (otro número natural), para i = 1 sabemos que hay n cadenas, para i = 2 hay n<sup>2</sup>, y así sucesivamente. Esto permite decir que la cardinalidad de B* es la misma que la de IN. En otras palabras: dado el alfabeto finito B, podemos construir tantas cadenas con sus caracteres como números naturales hay.</p><p>Lo anterior es cierto independientemente de la cantidad de elementos de B. Si B fuera la más grande extensión del código ASCII, esto implica que la cantidad de cadenas de caracteres que podemos escribir en una computadora (o en cualquier dispositivo para procesar información) es infinita, pero es contable.</p><p>Finalmente: dado el conjunto A, ɚ(A) (“el conjunto potencia del conjunto A”) denota el conjunto conformado por los subconjuntos de A. Algunos ejemplos:</p><p class="code">&nbsp; Si A = { }, entonces ɚ(A) = {{}},&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y |ɚ(A)| = 1.<br />&nbsp; Si A = { a<sub>1</sub> }, entonces ɚ(A) = {{}, {a1 }},&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y |ɚ(A)| = 2.<br />&nbsp; Si A = { a<sub>1</sub>, a<sub>2</sub> }, entonces ɚ(A) = {{}, {a<sub>1</sub> }, {a<sub>1</sub> }, {a<sub>1</sub>, a<sub>2</sub>} },&nbsp;&nbsp;&nbsp;&nbsp; y |ɚ(A)| = 4.</p><p>Podemos demostrar que en general, |ɚ(A)| = 2<sup>|A|</sup>.</p><p>Ahora estamos en posición de definir con mucha precisión qué es un lenguaje en términos de conjuntos:</p><p>Dado un alfabeto finito B, un lenguaje formal sobre B es cualquier subconjunto de B*. (Dado un código ASCII extendido de 256 caracteres, Java es un subconjunto especial de cadenas escritas utilizando ese ASCII.)</p><h3>Preguntas</h3><p>Regresaremos al punto anterior más adelante, pero antes, quisiera hacer notar que a partir de lo descrito anteriormente se desprenden varias preguntas interesantes:</p><ul><li>Dado un alfabeto B, ¿cuántos lenguajes podemos construir con sus caracteres?</li><li>¿Podríamos procesarlos todos? (v.gr. mediante compiladores o intérpretes)</li><li>¿Qué tan complejo y eficiente sería ese procesamiento? (en términos computacionales)</li></ul><p><br />Piensen sus respuestas; continuaremos abordando este tema en el siguiente número.</p><p>Referencias</p><ol><li>L. León. “Los Special Purpose Languages, parte 1”. Revista Software Guru #48.&nbsp;<br /><a href="http://sg.com.mx/revista/48/los-special-purpose-languages-0">http://sg.com.mx/revista/48/los-special-purpose-languages-0</a></li></ol></div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>Luis Vinicio León Carrillo es Director General y co-fundador de e-Quallity. Fue profesor-investigador en la universidad ITESO. Realizó estudios de posgrado en Alemania, durante los cuales abordó temas relacionados con la prueba de software y los métodos y lenguajes formales.</p></div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Wed, 23 Dec 2015 01:50:44 +0000 sg 6212 at https://sg.com.mx https://sg.com.mx/revista/49/special-purpose-languages-parte-2#comments