APCV 15 Lenguajes. Gramatica. Analizador sintactico. Parser, Parsing.

AUGUSTO CORTEZ VASQUEZ
4 Nov 201925:16

Summary

TLDREl análisis sintáctico es una parte fundamental en la construcción de un compilador, donde se revisa la estructura gramatical de las frases en un lenguaje de programación. Este proceso verifica que los componentes léxicos se encuentren en el orden correcto según las reglas de la gramática del lenguaje. Los analizadores sintácticos pueden ser descendentes, construyendo el árbol sintáctico a partir de la raíz, o ascendentes, partiendo de las hojas. La gramática proporciona una especificación precisa del lenguaje, lo que permite la creación automática de analizadores eficientes y la facilidad para incorporar nuevas construcciones al lenguaje. Los errores encontrados en la compilación se clasifican en léxicos, sintácticos y semánticos. Este video ofrece una visión general de los conceptos y procesos involucrados en el análisis sintáctico, así como ejemplos prácticos de cómo se aplican estas técnicas en diferentes gramáticas y lenguajes de programación.

Takeaways

  • 📚 El analizador sintáctico es un módulo de un compilador que verifica la sintaxis o gramática de un programa para asegurarse de que sigue las reglas del lenguaje.
  • 🌐 Recibe una secuencia de lexemas del analizador léxico y utiliza las reglas de derivación de la gramática del lenguaje para determinar si la secuencia es válida.
  • 🔍 El proceso de análisis sintáctico implica intentar construir un árbol sintáctico para las frases que se quieren reconocer, aunque en la práctica se utilizan autómatas de pila en su lugar.
  • 🛠️ Los analizadores sintácticos pueden ser de dos tipos principales: descendente, que construye el árbol a partir de la raíz hacia las hojas, y ascendente, que lo hace desde las hojas hacia la raíz.
  • ✅ La gramática proporciona una especificación precisa y fácil de entender para un lenguaje de programación, lo que permite la construcción automática de un analizador eficiente.
  • 🔧 Los lenguajes de programación evolucionan y se pueden añadir nuevas construcciones a un lenguaje más fácilmente si existe una descripción gramatical.
  • 🔄 El proceso de construcción del analizador sintáctico puede revelar ambigüedades sintácticas y otras construcciones difíciles de analizar que podrían pasar desapercibidas en la fase inicial del diseño de un lenguaje.
  • 📈 Los errores en la compilación se clasifican en léxicos, sintácticos y semánticos, cada uno correspondiendo a un tipo de problema en la estructura del programa.
  • 🔗 El análisis léxico y el análisis sintáctico interactúan estrechamente, donde el último solicita al primero el siguiente componente léxico y ambos se comunican hasta completar el análisis del programa.
  • 📖 La estructura sintáctica de un programa se basa en la sintaxis abstracta y concreta, y es fundamental para la traducción de un programa fuente a código objeto correcto y para la detección de errores.
  • 🔬 Las gramáticas recursivas por la izquierda y las gramáticas con recursos inmediatos son conceptos clave en la construcción de analizadores sintácticos y pueden requerir técnicas especiales como la factorización para su manejo.

Q & A

  • ¿Qué es el analizador sintáctico en el contexto de un compilador?

    -El analizador sintáctico es el módulo de un compilador que realiza la revisión de la sintaxis o gramática de un programa para verificar si una frase está bien formada o no según las reglas del lenguaje.

  • ¿Cuál es la función del analizador léxico en la construcción de un árbol sintáctico?

    -El analizador léxico proporciona una secuencia de símbolos léxicos o lexemas al analizador sintáctico, que luego decide si la secuencia está bien escrita o no en base a las reglas de la gramática del lenguaje.

  • ¿Cómo se describe el proceso de análisis sintáctico?

    -El proceso de análisis sintáctico se describe como el intento de construir un árbol sintáctico para las frases que se quieren reconocer, utilizando las reglas de derivación de la gramática del lenguaje.

  • ¿Por qué en la práctica no se implementan los árboles de análisis sintáctico?

    -Los árboles de análisis sintáctico no se implementan en la práctica porque suelen requerir mucho espacio; en su lugar, se utilizan autómatas de pila que guardan información en la pila acerca de los nodos del árbol sintáctico relevante en cada frase.

  • ¿Cómo se relaciona la gramática con el análisis sintáctico?

    -La gramática proporciona una especificación precisa y fácil de entender de un lenguaje de programación. A partir de algunas clases de gramática, se puede construir automáticamente un analizador eficiente que determine si un programa fuente está sintácticamente bien formado.

  • ¿Qué son los errores léxicos, sintácticos y semánticos en el proceso de compilación?

    -Los errores léxicos ocurren cuando un símbolo no corresponde a ningún componente léxico del lenguaje. Los errores sintácticos ocurren cuando una secuencia de símbolos no se ajusta a las reglas de la sintaxis definida por la gramática. Los errores semánticos ocurren cuando no existe una relación semántica adecuada entre los componentes léxicos, como el uso incorrecto de un operador en tipos de datos incompatibles.

  • ¿Cuáles son los dos tipos principales de análisis sintáctico?

    -Los dos tipos principales de análisis sintáctico son el análisis sintáctico descendente, que intenta construir un árbol de análisis sintáctico empezando desde la raíz, y el análisis sintáctico ascendente, que intenta construir un árbol de análisis sintáctico empezando desde las hojas.

  • ¿Qué es una gramática recursiva por la izquierda y cómo se identifica?

    -Una gramática es recursiva por la izquierda si existe al menos una regla de derivación en la que el lado izquierdo tiene un no terminal y el lado derecho comienza con el mismo no terminal. Esto puede llevar a la ambigüedad en el análisis sintáctico.

  • ¿Cómo se define la función 'primero' en el análisis sintáctico?

    -La función 'primero' de un símbolo alfa es un conjunto que consta de los terminales que inician las cadenas derivadas de alfa. Se utiliza para determinar los símbolos con los que puede comenzar una derivación que contenga a ese símbolo no terminal.

  • ¿Qué es la reclusión por la izquierda y cómo se resuelve?

    -La reclusión por la izquierda es una situación en la que una regla de producción tiene un no terminal en el lado derecho que también aparece al inicio de la regla. Se resuelve creando una nueva regla de producción que extraiga el no terminal a una posición más a la derecha o introduciendo un nuevo símbolo no terminal.

  • ¿Cómo se utiliza la función 'siguiente' en la construcción de la tabla de análisis sintáctico?

    -La función 'siguiente' se utiliza para determinar los símbolos que pueden seguir a un símbolo no terminal en una producción dada, considerando el contexto en el que aparece. Se utiliza para construir la tabla de análisis sintáctico, ayudando a decidir qué producción aplicar en un no terminal dado el símbolo siguiente en la entrada.

Outlines

00:00

😀 Introducción al Analizador Sintáctico

Este párrafo introduce el concepto de analizador sintáctico en el contexto de un compilador. Se discute su función de revisar la sintaxis o gramática para verificar la conformidad con el lenguaje. Se menciona que el analizador sintáctico recibe la secuencia de lexemas del analizador léxico y utiliza las reglas de derivación de la gramática para construir un árbol sintáctico. Además, se exploran los tipos de analizador sintáctico y se habla sobre cómo se puede implementar uno y ejercitar en su funcionamiento. Se destaca la importancia de la gramática en la especificación de un lenguaje de programación y cómo los errores léxicos, sintácticos y semánticos pueden ser identificados en el proceso de análisis.

05:00

📚 Ejemplos y Procesos de Análisis Sintáctico

Este párrafo profundiza en el proceso de análisis sintáctico con ejemplos prácticos. Se muestra cómo se construye un árbol de sintaxis para determinar si una frase pertenece a un lenguaje dada su gramática. Se utiliza el ejemplo de la gramática g11 para demostrar cómo se reconocen las frases que cumplen con la estructura definida por la gramática. Además, se describe el proceso de análisis ascendente, que comienza con las hojas de un árbol y sube hacia la raíz. Se discuten los errores que pueden ocurrir durante la compilación y cómo se pueden clasificar en léxicos, sintácticos y semánticos. Finalmente, se presenta un ejemplo de cómo se verifica la pertenencia de una frase al lenguaje utilizando un árbol sintáctico.

10:01

🔍 Gramáticas y Análisis Recursivo

Este párrafo se enfoca en las características de las gramáticas y cómo afectan el análisis sintáctico. Se definen las gramáticas recursivas por la izquierda y por la derecha, y se explica cómo se pueden eliminar las reglas recursivas para facilitar el análisis. Se introduce el concepto de gramática no reconocida inmediata y cómo, a través de derivaciones sucesivas, se puede llegar a una secuencia reconocible. Se discuten técnicas como la factorización de gramáticas para simplificar el proceso de análisis. Además, se describe la estructura de un análisis sintáctico descendente, incluyendo el uso de una tabla de análisis sintáctico y una pila para rastrear el proceso.

15:02

🛠️ Construcción de la Tabla de Análisis Sintáctico

Este párrafo se centra en el proceso de construcción de la tabla de análisis sintáctico, que es esencial para el análisis descendente. Se describen las funciones 'primero' y 'siguiente' y cómo se utilizan para determinar qué regla de producción aplicar en un momento dado. Se presentan reglas para obtener estas funciones y se muestra cómo se aplican en ejemplos concretos. Se discute el algoritmo para construir la tabla de análisis sintáctico y se ilustra con ejemplos cómo se usa para analizar frases específicas. Se destaca la importancia de estas tablas en la compilación de programas y cómo ayudan a identificar errores de sintaxis.

20:03

🌐 Análisis de Gramáticas para Lenguajes Específicos

Este párrafo explora cómo se aplican los conceptos previamente discutidos para el análisis de gramáticas que definen lenguajes específicos, como el cálculo proposicional y la teoría de conjuntos. Se presentan ejemplos de frases en estos lenguajes y se muestra cómo se utiliza la tabla de análisis sintáctico para determinar si las frases son válidas según la gramática. Se abordan técnicas para eliminar la recursión por la izquierda en las gramáticas y se describe cómo se construye el árbol de análisis sintáctico para frases en estos lenguajes. Se destaca la utilidad de estos análisis para la comprensión y la validación de las estructuras en lenguajes formales.

25:05

📚 Recursos y Bibliografía

Este párrafo ofrece recursos adicionales para aquellos interesados en profundizar en el tema de las gramáticas y el análisis sintáctico. Se invita a los lectores a suscribirse al canal para recibir más información y se proporcionan referencias bibliográficas para una mayor comprensión del tema. Se cierra el párrafo agradeciendo al lector por su interés y participación.

Mindmap

Keywords

💡analizador sintáctico

El analizador sintáctico es un módulo de un compilador que revisa la estructura de una frase o programa para verificar su conformidad con las reglas de sintaxis del lenguaje. Se encarga de construir un árbol sintáctico a partir de la secuencia de lexemas proporcionada por el analizador léxico, utilizando las reglas de derivación de la gramática del lenguaje. En el video, se discute cómo este proceso es fundamental para verificar si una frase o programa está bien formado sintácticamente.

💡gramática

Una gramática es un conjunto de reglas que definen la estructura y el orden de las palabras en una oración o programa para que tenga sentido en un lenguaje determinado. En el contexto del video, las gramáticas son utilizadas para describir el lenguaje de programación y para construir analizadores sintácticos que puedan verificar la sintaxis de las frases o programas. Las gramáticas también son útiles para la detección de errores y la generación de código objeto.

💡árbol sintáctico

Un árbol sintáctico es una representación jerárquica de la estructura de una frase o programa. Se construye utilizando las reglas de una gramática para mostrar cómo los elementos se combinan para formar una estructura significativa. En el video, se menciona que el proceso de análisis sintáctico intenta construir este tipo de árbol para las frases que se quieren reconocer, aunque en la práctica se utilizan autómatas de pila en su lugar.

💡autómatas de pila

Los autómatas de pila son una alternativa a los árboles sintácticos que se utilizan en la implementación de analizadores sintácticos. Estos autómatas guardan información en una pila, la cual representa los nodos del árbol sintáctico relevante en cada frase del proceso de análisis. En el video, se indica que los árboles de análisis sintáctico no se implementan a menudo debido al espacio que ocuparían y en su lugar se usan autómatas de pila.

💡análisis sintáctico descendente

Este es un método de análisis sintáctico que comienza con la raíz de un árbol sintáctico y trabaja hacia abajo, hacia las hojas. Se trata de obtener una derivación por la izquierda para una cadena de entrada, comenzando desde la raíz y creando los nodos del árbol en orden previo. En el video, se describe cómo este proceso se utiliza para construir un árbol de análisis sintáctico y verificar la sintaxis de una frase.

💡análisis sintáctico ascendente

El análisis sintáctico ascendente es un proceso que comienza con las hojas de un árbol sintáctico y sube hacia la raíz. Es equivalente a obtener una reducción desde una cadena hasta llegar al axioma. En el video, se menciona que este método se utiliza para construir un árbol de análisis sintáctico partiendo desde las hojas y subiendo hacia la raíz.

💡errores léxicos

Los errores léxicos son aquellos en los que un símbolo no corresponde a ningún componente léxico reconocido del lenguaje. Por ejemplo, podría ser un identificador mal escrito, un verbo o un operando incorrecto. En el video, se discuten los errores léxicos como una de las categorías de errores que pueden ocurrir durante el proceso de compilación.

💡errores sintácticos

Los errores sintácticos ocurren cuando una secuencia de componentes léxicos no se ajusta a las reglas de la sintaxis definida por la gramática del lenguaje. Un ejemplo dado en el video es una expresión aritmética con paréntesis no equilibrados. Estos errores son detectados por el analizador sintáctico durante la revisión de la sintaxis del programa.

💡errores semánticos

Los errores semánticos son aquellos en los que no existe una relación semántica adecuada entre los componentes léxicos. En el video, se menciona un ejemplo de un error semántico como intentar sumar un número real con una variable booleana, lo que va en contra de las reglas de tipo del lenguaje.

💡recursividad por la izquierda

La recursividad por la izquierda se refiere a una regla de derivación en la que un no terminal deriva en una secuencia que inicia con el mismo no terminal. Esto puede llevar a problemas de análisis, como la capacidad de un analizador para determinar el correcto análisis de una frase. En el video, se discute cómo se puede eliminar la recursividad por la izquierda mediante la construcción de una nueva gramática.

💡función primero

La función 'primero' es una herramienta utilizada en la construcción de la tabla de análisis sintáctico. Define el conjunto de terminales que pueden aparecer al inicio de cualquier cadena derivada de un no terminal. En el video, se describe cómo se calcula la función 'primero' y cómo es esencial para la creación de la tabla de análisis sintáctico.

Highlights

El analizador sintáctico es el módulo de un compilador responsable de revisar la sintaxis o gramática de un programa para verificar su conformidad con el lenguaje.

Recibe la secuencia de tokens del analizador léxico y decide si la secuencia está bien formada según las reglas gramaticales.

El proceso de análisis sintáctico implica construir un árbol sintáctico para las frases que se quieren reconocer.

Los autómatas de pila se utilizan como alternativa a los árboles de análisis sintáctico para manejar la información de los nodos del árbol.

La gramática proporciona una especificación precisa y fácil de entender para un lenguaje de programación, lo que facilita la construcción de analizadores eficientes.

Los lenguajes de programación evolucionan y se pueden añadir nuevas construcciones más fácilmente si se basa en una descripción gramatical.

La construcción del analizador sintáctico puede revelar ambigüedades sintácticas y construcciones difíciles de analizar que podrían pasar desapercibidas en la fase inicial del diseño de un lenguaje.

Existen dos tipos principales de análisis sintáctico: descendente, que construye el árbol a partir de la raíz, y ascendente, que lo hace a partir de las hojas.

Las gramáticas libres de contexto son comunes para describir la sintaxis en las construcciones de los lenguajes de programación.

Los errores de compilación se clasifican en léxicos, sintácticos y semánticos, cada uno correspondiendo a un tipo de incumplimiento en la estructura del lenguaje.

El análisis de la gramática y la construcción del árbol sintáctico son métodos para verificar si una frase pertenece a un lenguaje definido por una gramática.

La reclusión por la izquierda en las gramáticas puede ser un problema, pero se puede solucionar con técnicas como la factorización y la introducción de nuevos no terminales.

La función 'primero' y la función 'siguiente' son herramientas clave para construir la tabla de análisis sintáctico y manejar la reclusión por la izquierda.

El algoritmo de análisis sintáctico descendente utiliza una tabla de análisis sintáctico para determinar qué producción debe aplicarse a un no terminal dado.

La estructura del análisis sintáctico ascendente comienza con las hojas y sube hacia la raíz, lo que es equivalente a obtener una reducción hasta llegar al axioma.

Los errores léxicos, sintácticos y semánticos son comunes en la compilación y se pueden detectar y corregir mediante la interacción entre los diferentes módulos del compilador.

La gramática recursiva por la izquierda y la gramática con recursos inmediatos son conceptos importantes para entender las capacidades y limitaciones de las gramáticas en la descripción de lenguajes.

La construcción de un analizador sintáctico para un lenguaje específico implica la creación de una tabla de análisis sintáctico a partir de la gramática del lenguaje y la aplicación de técnicas para evitar la reclusión por la izquierda.

Transcripts

play00:00

hola amigos en el contexto de un

play00:03

compilador el analizador sintáctico es

play00:06

el módulo que realiza el proceso de

play00:07

revisión de la sintaxis o gramática para

play00:11

verificar si una frase está tendencia o

play00:12

no al lenguaje para ello recibe el

play00:15

examen soto kings del analizador léxico

play00:18

veremos en la siguiente presentación

play00:20

cómo se realiza este proceso

play00:24

nuestra agenda consiste en lo siguiente

play00:26

conocer el concepto de analizador

play00:29

sintáctico

play00:30

conocer los tipos de analizador

play00:33

sintáctico especificar e implementar un

play00:36

analizador sintáctico y ejercitarse en

play00:39

el funcionamiento de un analizador

play00:41

sintáctico

play00:46

todo lenguaje definido por una gramática

play00:49

por ejemplo en nuestro lenguaje la frase

play00:52

juan estudia mucho

play00:54

consta de un sujeto un verbo y predicado

play00:56

en ese orden igualmente un programa en

play01:00

un lenguaje informal se rige por una

play01:02

gramática el proceso de análisis

play01:04

sintáctico verifica que los componentes

play01:06

léxicos que son entregados por el

play01:08

analizador de léxico se encuentran en un

play01:10

orden prescrito

play01:13

el analizador sintáctico recibe una

play01:16

secuencia de toppings o lexemas del

play01:18

analizador léxico y decide si la

play01:21

secuencia está bien escrita o no para

play01:23

ello hace uso de las reglas de

play01:24

derivación de la gramática del lenguaje

play01:26

el proceso de análisis sintáctico puede

play01:29

describirse como el intento de construir

play01:31

un árbol sintáctico para las frases que

play01:34

se quiere reconocer aunque en la

play01:36

práctica los árboles de análisis

play01:37

sintáctico no se implementan porque

play01:39

compartían mucho espacio es por esta

play01:41

razón que se usan como alternativa los

play01:43

autómatas de pila que guardan

play01:45

información en la pila acerca de los

play01:48

nodos del árbol sintáctico relevante en

play01:51

cada frase del proceso de análisis la

play01:53

sintaxis en las construcciones de los

play01:55

lenguajes de programación pueden

play01:56

describirse por medio de gramáticas

play01:57

libres de contexto

play01:59

tenemos ahí la estructura de un

play02:02

compilador los módulos iniciales

play02:04

corresponden a la fase de análisis

play02:06

léxico sintáctico y semántico y los

play02:10

siguientes módulos corresponden al

play02:12

proceso de síntesis generación de código

play02:16

intermedio optimización de código y

play02:18

generación de código

play02:24

vemos aquí la interacción entre el

play02:27

analizador léxico y en el señor

play02:28

sintáctico este último le solicita al

play02:32

léxico que le entregue el siguiente

play02:34

componente léxico él le provee siente

play02:37

como en el léxico y conversan entre sí

play02:39

hasta terminar el programa fuentes que

play02:42

están reconocidas

play02:46

veamos algunas ventajas del analizador

play02:48

sintáctico la gramática proporciona una

play02:51

especificación precisa y fácil de

play02:53

entender de un lenguaje de programación

play02:55

a partir de algunas clases de gramática

play02:57

se puede construir automáticamente un

play03:00

analizador eficiente que determine si un

play03:03

programa fuente está sintácticamente

play03:05

bien formado es decir cumplir con la

play03:08

gramática del lenguaje

play03:10

los lenguajes evolucionan con el tiempo

play03:11

adquiriendo nuevas construcciones y

play03:14

realizando tareas adicionales

play03:16

y estas nuevas construcciones se pueden

play03:18

añadir con más facilidad a un lenguaje

play03:21

cuando existen una aplicación basada en

play03:23

una descripción gramatical

play03:25

una gramática imparte una estructura un

play03:28

lenguaje de programación útil para la

play03:30

traducción de un programa fuente a

play03:32

código objeto correcto y para la

play03:35

detección de errores el proceso de

play03:37

construcción del analizador sintáctico

play03:39

puede revelar ambigüedades sintácticas y

play03:42

otras construcciones difíciles de

play03:45

analizar que podrían pasar sin ser

play03:47

detectadas en la fase inicial del diseño

play03:49

de un lenguaje y de eso compiladora

play03:54

la estructura sintáctica

play03:57

de un programa se basa en la sintaxis

play03:59

abstracta y la sintaxis concreta

play04:04

la sintaxis desempeñan dos funciones

play04:06

basadas en estos dos conceptos

play04:10

tenemos aquí cuatro programas escritos

play04:14

en lenguajes diferentes

play04:16

sin embargo cumplen

play04:19

la

play04:21

gramática en forma trata

play04:25

tenemos dos tipos de del sabor

play04:27

sintáctico el análisis sintáctico

play04:30

descendente y el ascendiente

play04:34

el análisis sintáctico descendente

play04:36

intenta construir un árbol de análisis

play04:38

sintáctico empezando desde la raíz y

play04:41

descendiendo hacia las hojas los que lo

play04:43

mismo intenta obtener una derivación por

play04:46

la izquierda para una cadena de entrada

play04:48

comenzando desde la raíz y creando los

play04:50

nodos del árbol en orden previo

play04:53

por otro lado el análisis sintáctico

play04:55

ascendente intenta construir un árbol de

play04:58

análisis sintáctico empezando desde las

play05:00

hojas la cadena misma y ascendiendo

play05:03

hacia arriba hacia la raíz lo que es lo

play05:05

mismo que intentar obtener una reducción

play05:08

desde una cadena hasta llegar al axioma

play05:11

el lenguaje definido por una gramática

play05:13

lo vamos a notar como el deje y consta

play05:17

del conjunto de frases w que son

play05:20

derivadas del axioma s aplicamos recibas

play05:23

derivaciones pero esto no basta me doble

play05:26

tiene que pertenecer a la cerradura de

play05:27

pesos es decir veedor debe constar de

play05:30

puros terminales cuando una frase w

play05:33

constan de terminales o no terminales se

play05:37

dice que es una forma asistencial y

play05:39

cuando la frase tiene puros terminales

play05:41

se dice que es una sentencia

play05:43

otra forma de verificar si una frase

play05:46

pertenece a un lenguaje es construyendo

play05:48

el árbol de sintaxis para la frase si

play05:51

será bueno construir el árbol decimos

play05:53

que la frase está en el lenguaje si no

play05:55

se dan a construir decimos que no

play05:56

pertenece al lenguaje

play05:59

veamos el ejemplo de la gramática g11

play06:02

tenemos la gramática con unos terminales

play06:04

s/a y b&b terminales a veces de

play06:08

minúsculas las reglas se deriven a la

play06:12

deriva a ab ab y débil derive en dvd o

play06:17

cd

play06:17

tenemos aquí dos ejemplos de árboles

play06:19

sintácticos para reconocer la frase abs

play06:23

de y otra que reconoce a bb cd

play06:27

el lenguaje generado por g11 consta de

play06:30

frases de la forma a la mba la m sea a

play06:33

la n de a la n donde m y n es mayor o

play06:36

igual que 1 vemos aquí que el número de

play06:38

as y debés es el mismo mientras que el

play06:41

número de se mide también es el mismo

play06:43

sin embargo la cantidad de aceves

play06:45

seguidas no es la misma que la cantidad

play06:48

de 6 y 10 seguidas

play06:50

vemos ahora cómo se construye el árbol

play06:53

en forma descendente comenzamos en la

play06:55

raíz y usando la regla de derivación se

play06:59

deriva en ave descendemos en el árbol

play07:01

luego a deriva y se debe a la vez

play07:07

deriven se sella se llega a las hojas

play07:11

etiquetadas con abs de por tanto decimos

play07:14

que la secuencia de abc de pertenece al

play07:16

lenguaje

play07:19

veamos ahora el proceso de árbol

play07:21

ascendente comenzamos ahora con las

play07:23

hojas vsd y vamos ascendiendo usando la

play07:27

ley las reglas de derivación los nuevos

play07:30

ave se reducen

play07:32

al no terminar los nodos 7 se reducen al

play07:36

no terminal b y luego el nodo a y el 9

play07:40

se reduce a ese luchando la regla 1 por

play07:43

tanto decimos que la secuencia pertenece

play07:45

al lenguaje

play07:49

durante el proceso de compilación

play07:51

ocurren diversos errores esto lo podemos

play07:54

clasificar en errores léxicos errores

play07:56

sintácticos y errores semántico los

play07:58

decimos que un error este tipo léxico

play08:02

cuando un ex tema no corresponde a

play08:04

ningún componente léxico del lenguaje

play08:07

por ejemplo escribir mal un

play08:09

identificador un verbo u operando

play08:12

ocurre uno sintáctico cuando una

play08:14

secuencia de componentes léxico no se

play08:16

ajusta a las reglas de la sintaxis

play08:17

definida por la gramática ejemplo una

play08:20

expresión aritmética con paréntesis no

play08:22

equilibrados

play08:24

y ocurre un error semántico cuando no el

play08:26

7 relación semántica entre la secuencia

play08:29

de componentes léxicos por ejemplo un

play08:31

operador aplicado para los incompatibles

play08:33

por ejemplo intentar sumar un número

play08:36

real con una variable booleana

play08:42

tenemos aquí como ejemplo la frase al

play08:45

igual base por altura entre 2

play08:49

el proceso de análisis de léxico gráfico

play08:52

en la columna del cuadro de la izquierda

play08:56

se aprecia que todos los componentes

play08:58

léxicos son correctos

play09:01

mientras que en el cuadro de color verde

play09:05

se detectan dos errores

play09:09

el eczema doblar base no corresponde

play09:11

ningún componente léxico igualmente el

play09:14

eczema 2

play09:16

no corresponde a ningún componente por

play09:18

tanto se dice que son errores

play09:19

lexicográficos

play09:25

tenemos como ejemplo la gramática

play09:28

reducida del español muy reducida y

play09:31

vamos a verificar si la frase el pequeño

play09:34

niño corre rápidamente la tendencia el

play09:36

lenguaje intentamos construir el árbol y

play09:39

vemos que si llegamos a partir del

play09:40

axioma hacia la frase que están

play09:43

etiquetadas con las hojas el pequeño

play09:45

niño corre rápidamente por tanto decimos

play09:47

que la frase si pertenece al lenguaje

play09:51

queremos verificar si la secuencia la

play09:53

estudios alumna estudia mucho para tener

play09:56

ese lenguaje generado por la gramática

play09:57

intentamos construir el árbol

play10:00

partimos de la acción s y usando las

play10:03

reglas de derivación llegamos a las

play10:04

hojas etiquetadas con la frase la

play10:08

estudiosos alumna estudia mucho por

play10:10

tanto decimos que la frase de

play10:11

pertenencia al lenguaje

play10:14

una gramática se hice recursiva por la

play10:16

izquierda si existen por lo menos una

play10:19

regla de derivación en el conjunto p

play10:22

de tal forma que en el lado izquierdo

play10:24

tenemos un no terminal y en el lado

play10:26

derecho una secuencia de símbolos que

play10:28

inicia con el mismo no terminal

play10:30

la gramática se dice recurso inmediata

play10:33

si existe una regla de producción de la

play10:35

forma a derivan a alfa para un alfa una

play10:39

gramática puede ser no reconocida

play10:41

inmediata pero puede ser recursiva

play10:43

aplicando sucesivas derivaciones

play10:48

en el subte orem a una gramática y

play10:50

reconocida por izquierda cuando existe a

play10:54

no terminal que deriva en una secuencia

play10:57

que inicie con un nuevo terminal a alfa

play11:00

y beta donde beta en nombre inicia con

play11:04

la de igual forma una gramática de

play11:07

recogida por la derecha cuando él no

play11:08

termina la deriva en una secuencia que

play11:11

termina con la de la misma o deriva en

play11:15

beta que no termina como para algún alfa

play11:18

o beta

play11:21

para eliminar la reclusión por la

play11:22

izquierda con tenemos una nueva

play11:24

gramática que prima

play11:27

supongamos que tenemos la gramática a

play11:30

deriva a alfa obieta construimos una

play11:33

nueva gramática introduciendo un nuevo

play11:34

no terminal a prima y hacemos que él no

play11:38

tiene la derive en beta a prima y en la

play11:42

prima insertado derive en alfa prima o

play11:45

también en landa vemos ahí los árboles

play11:49

construidos con la gramática inicial y

play11:51

la gramática modificada

play11:57

en este teorema generaliza la reclusión

play11:59

por la izquierda

play12:03

también podemos factorizar

play12:05

si tenemos una gramática

play12:07

[Música]

play12:09

el cual un no terminal deriva en una

play12:12

secuencia de frases de la forma alfa

play12:14

beta 1 alfa beta 2 alfa beta n o gamma

play12:21

podemos reemplazar la gramática por una

play12:25

nueva de esta forma que la deriva en

play12:27

alfa a prima a primeras un nuevo no

play12:30

terminal o gamma y en la prima deriva en

play12:33

beta 1 o beta 2 o beta n

play12:37

ahí tenemos un ejemplo que deriva en if

play12:42

expresión de proporción o expresión de

play12:46

en proposición s proposición o a

play12:50

sin factor izamos tenemos feder y 20 y

play12:53

expresión de proposición de prima este

play12:57

prima es un nuevo terminal que va a

play12:59

derivar en ese de holanda

play13:09

tenemos ahora la estructura de el

play13:13

análisis sintáctico descendente tenemos

play13:16

en el diagrama

play13:18

w en la frase que se quiere analizar que

play13:22

se encuentra un buffer tenemos la tabla

play13:25

de análisis sintáctico que vamos a

play13:26

construir posteriormente asimismo

play13:28

hacemos de una pila el análisis

play13:31

sintáctico ascendente intenta construir

play13:33

el árbol de análisis sintáctico

play13:34

empezando desde la raíz y desciende

play13:36

hacia las hojas el objetivo de

play13:38

determinar qué producción debe aplicarse

play13:40

a un no terminal

play13:44

tenemos ahí

play13:47

el algoritmo de análisis sintáctico

play13:49

descendente

play13:57

el mismo algoritmo en un lenguaje más

play13:59

formal

play14:04

veamos como ejemplo tenemos una

play14:07

gramática que reconoce especiales

play14:09

aritméticas pero podemos ver que es

play14:12

reconocida por la izquierda en la

play14:14

primera producción tenemos a deriven a

play14:16

mabe o beta tiene la forma a deriven a

play14:20

alfa beta viste anteriormente por tanto

play14:23

reemplazamos estas producciones por las

play14:26

siguientes a la deriva en bea prima y la

play14:29

prima deriva en más de a prima holanda

play14:32

de igual forma las reglas de deriva en

play14:35

este disco se hace se reemplazan por be

play14:39

deriva en se ve prima y de prima derive

play14:43

en asterisco se deprima holanda por

play14:46

último se derive en paréntesis izquierdo

play14:49

francis derecho y de oye no es recogida

play14:53

por la izquierda por tanto se copió de

play14:54

la misma forma tenemos ahí la tabla de

play14:57

análisis sintáctico para esta gramática

play15:02

por ahora la vamos a utilizar más

play15:04

adelante y mostraremos cómo se construye

play15:06

esta tabla

play15:09

vemos algunos ejemplos

play15:14

tenemos aquí la frase y de maside por d

play15:19

aplicando el algoritmo

play15:22

como la piel tenemos un no tener ientras

play15:25

tenemos y d

play15:28

buscamos en la tabla en la fila columna

play15:32

y d

play15:33

encontramos ahí la red de producción a

play15:36

la deriva en vea prima el algoritmo nos

play15:39

dice que tenemos que desempleada y

play15:41

reemplazar en su lugar el vera prima en

play15:45

orden inverso tenemos entonces en la

play15:47

segunda fila doblar a primera vez que

play15:50

reemplazó a la y en la entrada permanece

play15:53

igual sin ningún cambio

play15:56

en el siguiente iteración tenemos ve en

play16:00

la pila y de la entrada nuevamente

play16:03

buscamos en la matriz en la fila b

play16:06

columna y de y encontramos la regla de

play16:10

deriva en c

play16:11

breide esto significa que de sentiremos

play16:15

desde la pila y enfilamos el lado

play16:18

derecho de la regla de producción se

play16:20

deprima en orden inverso

play16:23

esto va a seguir hasta que encontremos

play16:26

en el top de la pila

play16:29

un elemento que se igual a la entrada en

play16:32

el paso 4 vemos que entonces la pila

play16:35

tenemos y de entrada tenemos idea el

play16:38

algoritmo manda que en este caso se dé

play16:41

simple el ide y se avanza una posición

play16:44

de la entrada y no hay ninguna

play16:46

derivación que aplicar

play16:52

para construir la tabla de análisis

play16:54

sintáctico hacemos uso de la función

play16:55

primero y la función siguiente

play17:02

la definición del primero de alfa y la

play17:04

siguiente a es un conjunto y consta de

play17:07

los terminales

play17:10

que inicia las cadenas derivadas de alfa

play17:14

w construyen una secuencia de cero más

play17:18

terminales solo terminales

play17:21

vemos aquí algunas reglas para obtener

play17:23

la función primero

play17:29

la definición de primero de alfa y la

play17:31

siguiente a es un conjunto y consta de

play17:34

los terminales

play17:37

que inicia las cadenas derivadas de alfa

play17:41

w construyen una secuencia de 0 +

play17:45

terminales son los terminales

play17:47

vemos aquí algunas reglas para obtener

play17:50

la función primero

play17:55

siguiente vea es también un conjunto

play17:57

constituido por los terminales que le

play18:00

siguen al elemento a

play18:03

en el contexto alfa como hábitat donde

play18:05

haya ciertas consecuencias de acero más

play18:07

terminales o no terminales

play18:09

el símbolo se entiende en el dólar

play18:11

siempre está en siguiente del símbolo

play18:14

distinguido de la gramática

play18:16

2 si existe una producción a deriven

play18:20

alfa de verdad entonces decimos que

play18:23

primero de meta sin él anda está

play18:26

incluido en siguiente dv

play18:29

3 si existe una regla de producción a

play18:32

deriven alfa b

play18:35

existe otra regla deriven alfa beta

play18:39

donde la cndh está en primero de beta es

play18:41

decir de verdad se puede derivar a landa

play18:46

decimos en este caso que siguiente día

play18:48

está incluido el siguiente debe

play18:52

que tenemos un ejemplo

play18:55

de una gramática

play18:58

con operadores adicción solamente

play19:03

tenemos la frase v ac y su derivación

play19:07

para verificar si la frase está en el

play19:09

lenguaje continuo es el conjunto primero

play19:12

y el conjunto siguiente

play19:14

con las reglas descritas anteriormente

play19:19

tenemos otro ejemplo parecido al

play19:22

anterior en este caso la gramática

play19:25

reconoce expresiones aritméticas con

play19:27

operadores adición y multiplicación

play19:30

tenemos el conjunto primero y el

play19:32

conjunto el siguiente obtenido con las

play19:33

reglas descritas anteriormente

play19:37

tenemos aquí el algoritmo para construir

play19:40

la tabla el s sintáctico

play19:46

tenemos las tablas del ejemplo anterior

play19:48

la función primero

play19:52

con su algoritmo y la función siguiente

play19:55

consideremos la gramática que reconoce

play19:58

frases del cálculo proposicional

play20:01

queremos verificar por ejemplo si la

play20:03

frase

play20:04

pertenece al lenguaje intentamos

play20:07

construir el árbol partimos de la acción

play20:09

mapa y usando las reglas de derivación

play20:11

digamos en p ocu luego puede viva en q

play20:16

q de viva en ere ere deriven de este

play20:21

precise que derive en q

play20:25

y q nuevamente de viven q y r recuerden

play20:30

que los símbolos en rojo son terminales

play20:32

y los nuevos en azul son no terminales

play20:36

luego que vive en él y termina en pe

play20:40

leer de biden p

play20:44

por tanto

play20:46

vemos que las hojas están etiquetadas en

play20:49

color rojo y contienen la expresión p y

play20:52

q r

play20:54

por tanto decimos que la frase de

play20:56

pertenencia al lenguaje

play21:00

consideremos ahora la frase p

play21:04

verificamos si es reconocida comenzamos

play21:09

con el axioma p diríamos en q nuevo q

play21:12

deriva en q y r

play21:15

q deriva en r

play21:18

a su vez deriva en paréntesis de parejas

play21:23

la p deriven p

play21:29

se deriven rp y por otro lado la derecha

play21:35

deriva en el aire y luego en b

play21:38

finalmente r deriva en p revisamos los

play21:42

nodos en color rojo y tenemos que

play21:44

paréntesis p

play21:47

p paréntesis

play21:51

te pertenece el lenguaje generado por la

play21:54

gramática

play21:57

para el mismo lenguaje del cálculo de

play21:59

proposiciones queremos construir su

play22:01

analizador sintáctico vemos que la regla

play22:04

p implica p

play22:06

y q deben cubrir son recursos por la

play22:10

izquierda por tantos eliminamos la

play22:12

reclusión por la izquierda y tenemos una

play22:14

nueva gramática en el lado derecho

play22:16

construimos el conjunto primero y el

play22:19

conjunto siguiente

play22:23

y luego construimos la tabla con un

play22:26

algoritmo explicado anteriormente

play22:28

tenemos una fila y p

play22:31

columna p la regla p deriva en cu p

play22:35

prima

play22:36

en la fila p columna paréntesis

play22:39

izquierdo tenemos la regla p deriva en

play22:41

cupey

play22:42

y así sucesivamente

play22:45

tenemos luego el análisis para la frase

play22:50

entre paréntesis o p

play22:53

y luego de aplicar la regla de

play22:56

derivación y

play22:58

el algoritmo explicado anteriormente

play23:01

llegamos a que en el paso 24 la pila

play23:05

queda vacía así mismo una entrada y las

play23:08

reglas de derivación que están en la

play23:10

columna salida constituyen los pasos

play23:13

para construir el árbol de análisis

play23:15

sintáctico

play23:18

consideremos la gramática para el

play23:20

lenguaje de expresiones de teoría

play23:22

conjuntos por ejemplo frases de la forma

play23:25

a unión ve a unión b intersección ce a

play23:28

intersección b unión c tenemos las

play23:31

reglas de derivación a deriven a unión b

play23:33

vez deriven b interés acción seo se se

play23:37

deriva en entre paréntesis o la

play23:39

proposición p

play23:41

vemos que esta gramática es reconocida

play23:43

por izquierda dado que la primera regla

play23:46

tiene una forma a la deriva a unión b y

play23:50

la segunda vez deriva en b intersección

play23:52

se eliminamos la reclusión por la

play23:54

izquierda y tenemos una nueva gramática

play23:59

construimos luego el conjunto primero y

play24:02

conjunto siguiente de forma similar al

play24:05

ejemplo anterior construimos la tabla de

play24:06

análisis sintáctico

play24:09

la siguiente gramática es similar a la

play24:11

anterior habiéndose añadido en la

play24:14

operación complemento de un conjunto

play24:17

denotamos con ce en color marrón

play24:20

complemento de un conjunto tenemos ahí

play24:23

ejemplo los complementos de la unión b

play24:24

complemento de la unión b intersección c

play24:27

las reglas de producción son similares

play24:29

excepto en la última al cual se le ha

play24:32

añadido se deriva en complemento de a

play24:35

cómo una gramática sigue siendo

play24:37

reconocida por la izquierda se elimina

play24:39

la recolección por la izquierda y

play24:40

tenemos la nueva gramática construimos

play24:42

en forma similar con los algoritmos

play24:44

anteriores la función primero y función

play24:47

siguiente y nuevo la tabla

play24:52

y podemos revisar

play24:55

mayor información en la dirección si

play24:58

tienen interés en gramáticas políticas

play25:00

de hipertexto

play25:04

tenemos algunas referencias

play25:06

bibliográficas para mayor

play25:08

complementación y les invito a

play25:11

suscribirse al canal para enviarles

play25:13

mayor información gracias

Rate This

5.0 / 5 (0 votes)

الوسوم ذات الصلة
Análisis SintácticoCompiladoresGramáticaÁrbol SintácticoLenguajes de ProgramaciónErrores LéxicosErrores SintácticosErrores SemánticosGramática Libre de ContextoRecursión por la IzquierdaOptimización de Código
هل تحتاج إلى تلخيص باللغة الإنجليزية؟