Want to create interactive content? It’s easy in Genially!

Get started free

TEMA 5. ANÁLISIS SINTÁCTICO

JAZM�N GUADALUPE DOM�NGUEZ CRUZ

Created on February 26, 2024

Start designing with a free template

Discover more than 1500 professional designs like these:

Higher Education Presentation

Psychedelic Presentation

Vaporwave presentation

Geniaflix Presentation

Vintage Mosaic Presentation

Modern Zen Presentation

Newspaper Presentation

Transcript

Tema 5. Análisis sintáctico

Escribe un subtítulo aquí

EMPEZAR >

introduccion

El análisis sintáctico en la teoría de lenguajes formales aborda la estructura gramatical de los programas. Desde la definición de gramáticas hasta la generación de analizadores, su comprensión es clave en el diseño de compiladores y procesadores de lenguajes de programación.

5.1

Definición de gramáticas

Una gramática en el análisis sintáctico es un conjunto de reglas que define la estructura de una lengua. Se utiliza para analizar la sintaxis de las oraciones y determinar si son gramaticalmente correctas según las reglas establecidas.

EJEMPLO

5.1

clasificación de gramáticas

Gramáticas según el tipo de análisis

Gramáticas según la notación utilizada

5.2

Las Gramáticas Libres de Contexto (GLC) son un tipo específico de gramáticas en la teoría de lenguajes formales y autómatas. Se caracterizan por tener reglas de producción donde el lado izquierdo consiste en un único símbolo no-terminal y el lado derecho puede ser cualquier secuencia de símbolos, tanto terminales como no-terminales.

Gramáticas Libres de Contexto (GLC).

5.2

INF

GRAMATICAS LIBRES DE CONTEXTO

Las reglas de producción en una GLC son de la forma A -> α, donde A es un símbolo no-terminal y α es una secuencia de símbolos. En el análisis sintáctico, las GLC son ampliamente utilizadas debido a su capacidad para describir la estructura sintáctica de lenguajes naturales y lenguajes de programación de manera concisa y precisa. Estas gramáticas se utilizan para generar árboles de derivación que representan la estructura sintáctica de una cadena de entrada.

EJEMPLO

5.3

Un árbol de derivación es una estructura jerárquica que representa cómo una cadena de símbolos puede ser derivada a partir de un símbolo inicial de una gramática.

ARBOLES DE DERIVACION

Text button

5.4

Formas normales de Chomsky

5.4 Formas normales de Chomsky

Forma Normal de Chomsky (CNF)

definición

BENEFICIOS

5.5

Diagramas de sintaxis

5.5 DIAGRAMAS DE SINTAXIS

definición

componentes

uso

5.6

Eliminación de la recursividad

5.6 ELIMINACIÓN DE LA RECURSIVIDAD

PASOS

5.7 TIPOS DE ANALIZADORES

  • los analizadores juegan un papel crucial en el procesamiento y reconocimiento de cadenas de símbolos según las reglas definidas por una gramática o un autómata.

Analizadores Sintácticos Ascendentes (Bottom-Up):

Analizadores Sintácticos Descendentes (Top-Down):

  • Los analizadores descendentes intentan construir la derivación de la cadena de entrada utilizando las reglas de la gramática, comenzando desde el símbolo inicial y avanzando hacia los símbolos terminales.

Estos analizadores intentan reducir la cadena de entrada a la gramática de manera inversa, utilizando la pila de análisis para realizar reducciones hasta llegar al símbolo inicial de la gramática.

Analizadores Sintácticos LR:

Analizadores Sintácticos Predictivos:

  • Estos analizadores son un tipo de analizadores sintácticos ascendentes que utilizan el enfoque "Left-to-Right, Rightmost derivation".
  • Utilizan tablas de análisis LR(0), SLR(1), LR(1), LALR(1) para determinar la acción a tomar en cada paso del análisis.
  • Son más poderosos que los analizadores sintácticos predictivos y pueden analizar un conjunto más amplio de gramáticas, incluidas algunas gramáticas ambiguas.
  • Estos son un tipo específico de analizadores sintácticos descendentes que utilizan información predictiva basada en la siguiente entrada para determinar qué regla de producción aplicar.
  • Los analizadores predictivos intentan predecir la producción correcta para aplicar en cada paso del análisis sintáctico sin retroceder en las decisiones tomadas.

Cada tipo de analizador sintáctico tiene sus propias características, ventajas y desventajas, y es adecuado para diferentes tipos de gramáticas y lenguajes. La elección del analizador adecuado depende de varios factores, como la complejidad de la gramática del lenguaje, los recursos computacionales disponibles y los requisitos de rendimiento del sistema.

Tipos de analizadores sintácticos

5.8 GENETACION DE MATRIZ PERDICTIVA

EMPEZAR >

Cuando se trabaja con gramáticas libres de contexto, especialmente en el contexto de análisis sintáctico predictivo, la matriz predictiva es una estructura de datos fundamental.

GENERACIÓN DE MATRIZ PREDICTIVA

Gramáticas Libres de Contexto (CFG):

Análisis Sintáctico Predictivo:

Tabla Predictiva

La matriz predictiva es una tabla (a menudo implementada como una tabla hash o una tabla de dispersión) que mapea pares de no terminales y terminales a producciones en la gramática.

El análisis sintáctico predictivo es una técnica de análisis sintáctico que se basa en la anticipación de las producciones de la gramática para determinar la derivación de la cadena de entrada.

Una gramática libre de contexto define un lenguaje formal en términos de reglas de producción que especifican cómo se pueden formar las cadenas de símbolos terminales (símbolos que no pueden ser reemplazados) a partir de símbolos no terminales (símbolos que pueden ser reemplazados).

Conjunto FIRST

Si X es un no terminal, y X → Y1Y2...Yn es una regla de producción, entonces se agregan los símbolos en FIRST(Y1), FIRST(Y2), ..., FIRST(Yn) a FIRST(X), excepto si FIRST(Y1), FIRST(Y2), ...,

El conjunto FIRST(X) para un símbolo no terminal X en una gramática libre de contexto es el conjunto de terminales que pueden comenzar las cadenas derivadas de X. El cálculo de los conjuntos FIRST se realiza recursivamente según las reglas de producción de la gramática. Si X es un terminal, entonces FIRST(X) = {X}.

Conjunto FOLLOW

  • El conjunto FOLLOW(X) para un símbolo no terminal X en una gramática libre de contexto es el conjunto de terminales que pueden seguir a X en alguna cadena derivada de la gramática.
  • El cálculo de los conjuntos FOLLOW se realiza observando las reglas de producción de la gramática y los lugares donde aparecen los no terminales.
  • Si S es el símbolo inicial de la gramática, entonces se agrega $ (el final de la entrada) a FOLLOW(S).
  • Si hay una producción A → αBβ, entonces todo lo que puede estar en FIRST(β) (excepto ε) se agrega a FOLLOW(B).
  • Si hay una producción A → αB y ε está en FIRST(β), entonces todo lo que está en FOLLOW(A) se agrega a FOLLOW(B).

5.9 Manejo de errores

El manejo de errores es una parte integral de cualquier sistema de software, crucial para la estabilidad, seguridad y usabilidad de las aplicaciones. Aunque los métodos específicos pueden variar entre lenguajes de programación y sistemas, hay principios universales y prácticas recomendadas que se aplican en general.

CARACTERISTICAS DEL MANEJO DE ERRORES

El manejador de errores en un analizador sintáctico tiene objetivos fáciles de establecer: · -Debe de informar de la presencia de errores con claridad y exactitud. · -Se debe de recuperar de cada error con la suficiente rapidez como para detectar errores posteriores. -No debe retrasar de manera significativa el procesamiento de programas correctos.

Next

5.10 Generadores de analizadores sintácticos

Next

Los generadores de analizadores sintácticos son herramientas que permiten generar automáticamente el código fuente de analizadores sintácticos para un lenguaje determinado. Estos analizadores se utilizan en la fase de análisis sintáctico del proceso de compilación para verificar que el código fuente cumple con la gramática del lenguaje.

TIPOS COMUNES DE ERRORES

Errores Lógicos: Fallos en la lógica del programa que resultan en salida incorrecta o comportamiento inesperado.

Errores de Sintaxis: Errores en el código que violan las reglas gramaticales del lenguaje de programación.

Errores de Sistema: Fallos relacionados con el entorno de ejecución, como falta de memoria, permisos insuficientes, o fallos de hardware.

CARACTERISTICAS

Generación de Código en Múltiples Lenguajes

Definición de Gramáticas

Automatización del Análisis Sintáctico

Análisis Léxico Integrado o Separado

Manejo de Conflictos y Ambigüedades

Generación de Árboles de Análisis Sintáctico

GENERADORES MAS COMUNES

CONCLUSIÓN

Estos temas constituyen aspectos fundamentales del análisis sintáctico y la teoría de lenguajes formales, siendo esenciales para el diseño y la implementación de compiladores y analizadores en el campo de la informática.

¡Muchas gracias!

<

>

Gramáticas según la notación utilizada

  • Gramáticas formales: Aquellas que se definen utilizando notaciones formales como la forma normal de Chomsky o la forma normal de Greibach.
  • Gramáticas informales: Aquellas que se expresan de manera más intuitiva, como las gramáticas de tipo BNF (Backus-Naur Form) o EBNF (Extended Backus-Naur Form), que se utilizan con frecuencia en la descripción de lenguajes de programación

EJEMPLO

Expr -> Expr + Term

Esta regla indica que una expresión (Expr) puede ser derivada en otra expresión seguida de un operador de suma y un término (Term). Esta regla podría usarse para generar expresiones aritméticas válidas. En términos de autómatas, las GLC pueden ser asociadas con autómatas de pila (stack automata) para reconocer el lenguaje generado por la gramática. Los autómatas de pila son una generalización de los autómatas finitos que utilizan una pila para el procesamiento de símbolos, lo que los hace adecuados para reconocer lenguajes generados por GLC.

Arboles de derivación

Son útiles para visualizar y comprender la estructura sintáctica de una cadena en un lenguaje generado por una gramática dada. Cada camino desde la raíz del árbol hasta una hoja representa una derivación específica de la cadena, donde las etiquetas de los nodos indican qué reglas de producción se aplicaron en cada paso.

  • Los árboles de derivación son fundamentales en el análisis sintáctico de lenguajes formales.
  • Es útil en la programación de compiladores, en el análisis de lenguajes naturales y en la verificación de la corrección de algoritmos de análisis sintáctico.

Ejemplo árbol de derivación para la cadena

GRAMATICA SEGUN EL TIPO DE ANALISIS
  • Gramáticas dependientes del contexto: También conocidas como gramáticas sensibles al contexto, estas son capaces de capturar dependencias sintácticas complejas entre las palabras en una oración. Se representan con la notación de Chomsky como gramáticas de tipo 1.
  • Gramáticas independientes del contexto: Conocidas como gramáticas libres de contexto, estas son menos restrictivas que las gramaticas dependientes del contexto y se utilizan con frecuencia en el análisis sintáctico. Se representan con la notación de Chomsky como gramáticas de tipo 2.
  • Gramáticas regulares: Son las menos expresivas pero también las más simples. Se utilizan para analizar estructuras sintácticas simples y se representan con la notación de Chomsky como gramáticas de tipo 3.

En esta forma normal, todas las producciones de una gramática libre de contexto (GLC) tienen una de las dos formas siguientes: A → BC: Donde A, B, y C son símbolos no terminales. Esta regla representa la división de un símbolo no terminal en dos no terminales. A → a: Donde A es un símbolo no terminal y 'a' es un símbolo terminal. Esta regla representa la asignación de un terminal a un símbolo no terminal.

- Facilita el análisis sintáctico: La forma normal de Chomsky simplifica el proceso de análisis sintáctico al hacer que las reglas sean más predecibles y manejables. - Condiciones más claras: Las reglas en CNF tienen condiciones más claras que facilitan la implementación de algoritmos para el análisis sintáctico. - Aplicaciones en la teoría de la computación: La CNF es útil en la teoría de la computación y la construcción de autómatas, ya que proporciona una estructura clara y regular.

Los diagramas de sintaxis abstracta son herramientas visuales utilizadas para representar la estructura sintáctica de un lenguaje de programación o cualquier otro tipo de lenguaje formal. Estos diagramas ayudan a visualizar la gramática de un lenguaje de manera clara y concisa. Los diagramas de sintaxis abstracta son comúnmente utilizados en la fase de diseño y análisis de compiladores.

Nodos: Representan constructores sintácticos, como expresiones, declaraciones, o bloques de código. Arcos o Flechas: Conectan los nodos y representan las relaciones sintácticas entre ellos. Pueden indicar la secuencia de ejecución, la dependencia entre elementos, etc. Etiquetas: Proporcionan información adicional sobre los nodos o arcos, como el tipo de operación o la regla gramatical asociada.

La eliminación de la ambigüedad en el contexto del análisis sintáctico de lenguajes y autómatas es un paso crucial para garantizar que una gramática sea interpretada de manera única. La ambigüedad en una gramática puede dar lugar a interpretaciones conflictivas de las cadenas de entrada, lo que complica el proceso de análisis sintáctico y puede llevar a resultados no deseados o ambiguos.

1. Reescribir la Gramática: Modifica la gramática original para eliminar las reglas ambigüas. Esto puede implicar la introducción de nuevas reglas o la reorganización de las existentes. Algunas técnicas incluyen: Factorización a la izquierda o derecha: Dividir reglas comunes para hacerlas no ambiguas. Eliminación de recursión izquierda: Si hay recursión a la izquierda, reorganiza las reglas para convertirlas en recursión a la derecha o eliminarlas por completo.