Análisis de sintaxis: tipos de análisis de arriba hacia abajo y de abajo hacia arriba del compilador

¿Qué es el análisis de sintaxis?

Análisis de sintaxis Es una segunda fase del proceso de diseño del compilador en la que se verifica la cadena de entrada dada para confirmar las reglas y la estructura de la gramática formal. Analiza la estructura sintáctica y comprueba si la entrada dada está en la sintaxis correcta del lenguaje de programación o no.

El proceso de análisis de sintaxis en el diseño del compilador viene después de la fase de análisis léxico. También se le conoce como árbol de análisis o árbol de sintaxis. El Parse Tree se desarrolla con la ayuda de una gramática predefinida del idioma. El analizador de sintaxis también comprueba si un programa determinado cumple las reglas implícitas en una gramática libre de contexto. Si es satisfactorio, el analizador crea el árbol de análisis de ese programa fuente. Otrowise, mostrará mensajes de error.

Análisis de sintaxis
Proceso del analizador de sintaxis

¿Por qué necesita el analizador de sintaxis?

  • Compruebe si el código es válido gramaticalmente
  • El analizador sintáctico te ayuda a aplicar reglas al código.
  • Le ayuda a asegurarse de que cada llave de apertura tenga un saldo de cierre correspondiente.
  • Cada declaración tiene un tipo y ese tipo debe existir.

Terminología importante del analizador de sintaxis

Terminologías importantes utilizadas en el proceso de análisis de sintaxis:

  • Frase: Una oración es un grupo de caracteres sobre algún alfabeto.
  • Lexema: Un lexema es la unidad sintáctica de nivel más bajo de un idioma (por ejemplo, total, inicio).
  • Token: Un token es solo una categoría de lexemas.
  • Palabras clave y palabras reservadas – Es un identificador que se utiliza como parte fija de la sintaxis de una declaración. Es una palabra reservada que no puede utilizar como nombre de variable o identificador.
  • palabras ruidosas – Las palabras irrelevantes son opcionales y se insertan en una declaración para mejorar la legibilidad de la oración.
  • Comentarios – Es una parte muy importante de la documentación. Se muestra principalmente por, /* */, o//En blanco (espacios)
  • Delimitadores – Es un elemento sintáctico que marca el inicio o final de alguna unidad sintáctica. Como una declaración o expresión, “comienzo”…”fin”, o {}.
  • Conjunto de caracteres – ASCII, Unicódigo
  • Identificadores – Es una restricción de longitud que ayuda a reducir la legibilidad de la oración.
  • Símbolos del operador – + y – realiza dos operaciones aritméticas básicas.
  • Elementos sintácticos de la lengua.

¿Por qué necesitamos análisis?

Parsing

Un análisis también verifica que la cadena de entrada esté bien formada y, si no, la rechaza.

Parsing

Following Hay tareas importantes que realiza el analizador en el diseño del compilador:

  • Le ayuda a detectar todo tipo de errores de sintaxis.
  • Encuentre la posición en la que se ha producido el error
  • Descripción clara y precisa del error.
  • Recuperación de un error para continuar y encontrar más errores en el código.
  • No debería afectar la compilación de programas "correctos".
  • El análisis debe rechazar los textos no válidos informando errores de sintaxis.

Técnicas de análisis

Las técnicas de análisis se dividen en dos grupos diferentes:

  • Análisis de arriba hacia abajo,
  • Análisis de abajo hacia arriba

Análisis de arriba hacia abajo

En el análisis de arriba hacia abajo, la construcción del árbol de análisis comienza en la raíz y luego continúa hacia las hojas.

Dos tipos de análisis de arriba hacia abajo son:

  1. Análisis predictivo:

El análisis predictivo puede predecir qué producción se debe utilizar para reemplazar la cadena de entrada específica. El analizador predictivo utiliza un punto de anticipación, que apunta hacia los siguientes símbolos de entrada. Retroceder no es un problema con esta técnica de análisis. Se le conoce como analizador LL(1).

  1. Análisis de descenso recursivo:

Esta técnica de análisis analiza recursivamente la entrada para crear un árbol de oración. Consta de varias funciones pequeñas, una para cada no terminal de la gramática.

Análisis de abajo hacia arriba

En el análisis ascendente en el diseño del compilador, la construcción del árbol de análisis comienza con la hoja y luego se procesa hacia su raíz. También se denomina análisis de reducción de desplazamiento. Este tipo de análisis en el diseño del compilador se crea con la ayuda del uso de algunos herramientas de software.

Error: métodos de recuperación

Errores comunes que ocurren al analizar el software del sistema

  • Léxico: Nombre de un identificador escrito incorrectamente
  • Sintáctico: paréntesis desequilibrado o falta un punto y coma
  • Semántico: asignación de valor incompatible
  • lógico: Bucle infinito y código no accesible

Un analizador debería poder detectar e informar cualquier error encontrado en el programa. Entonces, cada vez que ocurría un error, el analizador. Debería poder manejarlo y continuar analizando la entrada restante. Un programa puede tener seguimiento.wing tipos de errores en varias etapas del proceso de compilación. Hay cinco métodos comunes de recuperación de errores que se pueden implementar en el analizador.

Recuperación en modo declaración

  • En el caso de que el analizador encuentre un error, le ayudará a tomar medidas correctivas. Esto permite que el resto de entradas y estados se analicen con antelación.
  • Por ejemplo, agregar un punto y coma faltante viene en el método de recuperación del modo declaración. Sin embargo, el diseñador de análisis debe tener cuidado al realizar estos cambios, ya que una corrección incorrecta puede generar un bucle infinito.

Recuperación en modo pánico

  • En el caso de que el analizador encuentre un error, este modo ignora el resto de la declaración y no procesa la entrada del error.neonosotros ingresamos al delimitador, como un punto y coma. Este es un método simple de recuperación de errores.
  • En este tipo de método de recuperación, el analizador rechaza los símbolos de entrada uno por uno hasta que se forma un único grupo designado de syncSe encuentran fichas de cronización. El synccronizar tokens generalmente usando delimitadores como o.

Recuperación a nivel de frase

  • El compilador corrige el programa insertando o eliminando tokens. Esto le permite proceder al análisis desde donde estaba. Realiza corrección en la entrada restante. Puede reemplazar un prefijo de la entrada restante con alguna cadena, lo que ayuda al analizador a continuar el proceso.

Producciones de errores

  • La recuperación de producción de errores amplía la gramática del idioma que genera el error.neonosotros construye. Luego, el analizador realiza un diagnóstico de errores sobre esa construcción.

Corrección Global

  • El compilador debe realizar la menor cantidad de cambios posible mientras procesa una cadena de entrada incorrecta. Dada la cadena de entrada a y la gramática c incorrectas, los algoritmos buscarán un árbol de análisis para una cadena relacionada b. Al igual que algunas inserciones, eliminaciones y modificaciones realizadas con tokens, se necesita transformar an en b en la menor cantidad posible.

Gramática

Una gramática es un conjunto de reglas estructurales que describen una lengua. Las gramáticas asignan estructura a cualquier oración. Este término también se refiere al estudio de estas reglas, y este archivo incluye morfología, fonología y sintaxis. Es capaz de describir muchos, de la sintaxis de lenguajes de programación.

Reglas de gramática formal

  • El símbolo no terminal debe aparecer a la izquierda de al menos una producción
  • El símbolo de objetivo nunca debe mostrarse a la derecha de::= de ninguna producción.
  • Una regla es recursiva si LHS aparece en su RHS

Convenciones de notación

El símbolo de convenciones de notación se puede indicar encerrando el elemento en un cuadrado. brackets. Es una secuencia arbitraria de instancias del elemento que se puede indicar encerrando el elemento entre llaves seguido de un símbolo de asterisco, {...}*.

Es una elección de la alternativa que puede utilizar el símbolo dentro de la regla única. Puede estar entre paréntesis ([,]) cuando sea necesario.

Dos tipos de convenciones de notación: terminales y no terminales.

1.Terminales:

  • Letras minúsculas del alfabeto como a, b, c,
  • Símbolos de operador como +,-, *, etc.
  • Símbolos de puntuación como paréntesis, almohadilla y coma.
  • 0, 1,…, 9 dígitos
  • Cadenas en negrita como id o if, cualquier cosa que represente un símbolo de terminal único

2.No terminales:

  • Letras mayúsculas como A, B, C
  • Nombres en minúscula y cursiva: la expresión o alguna

Gramática libre de contexto

Una CFG es una gramática recursiva por la izquierda que tiene al menos una producción del tipo. Las reglas en una gramática libre de contexto son principalmente recursivas. Un analizador de sintaxis comprueba si un programa específico cumple o no todas las reglas de la gramática libre de contexto. Si se cumple, estos analizadores de sintaxis de reglas pueden crear un árbol de análisis para ese programa.

expression -> expression -+ term
expression -> expression – term 
expression-> term
term  -> term * factor
term -> expression/ factor
term  -> factor factor
factor ->  ( expression )
factor -> id

Derivación de gramática

La derivación gramatical es una secuencia de reglas gramaticales que transforma el símbolo inicial en una cadena. Una derivación prueba que la cadena pertenece al lenguaje de la gramática.

Derivación más a la izquierda

Cuando la forma oracional de entrada se escanea y reemplaza en secuencia de izquierda a derecha, se conoce como derivación más a la izquierda. La forma oracional que se deriva de la derivación más a la izquierda se llama forma oracional por la izquierda.

Derivación más a la derecha

Escanee la derivación más a la derecha y reemplace la entrada con reglas de producción, secuencia de derecha a izquierda. Se conoce como derivación más a la derecha. La forma oracional que se deriva de la derivación más a la derecha se conoce como forma oracional derecha.

Analizador de sintaxis versus analizador léxico

Analizador de sintaxis Analizador léxico
El analizador de sintaxis se ocupa principalmente de construcciones recursivas del lenguaje. El analizador léxico facilita la tarea del analizador de sintaxis.
El analizador de sintaxis trabaja con tokens en un programa fuente para reconocer estructuras significativas en el lenguaje de programación. El analizador léxico reconoce el token en un programa fuente.
Recibe entradas, en forma de tokens, de analizadores léxicos. Es responsable de la validez de un token suministrado por

el analizador de sintaxis

Desventajas de utilizar analizadores de sintaxis

  • Nunca determinará si un token es válido o no.
  • No le ayuda a determinar si una operación realizada en un tipo de token es válida o no
  • No puede decidir que el token se declare e inicialice antes de usarlo

Resumen

  • El análisis de sintaxis es una segunda fase del proceso de diseño del compilador que viene después del análisis léxico.
  • El analizador sintáctico te ayuda a aplicar reglas al código.
  • Oración, lexema, token, palabras clave y palabras reservadas, palabras irrelevantes, comentarios, delimitadores, conjunto de caracteres e identificadores son algunos términos importantes utilizados en el análisis de sintaxis en la construcción del compilador.
  • Parse comprueba que la cadena de entrada esté bien formada y, si no, la rechaza
  • Las técnicas de análisis se dividen en dos grupos diferentes: análisis de arriba hacia abajo y análisis de abajo hacia arriba.
  • Léxico, sintáctico, semántico y lógico son algunos errores comunes que ocurren durante el método de análisis.
  • Una gramática es un conjunto de reglas estructurales que describen una lengua.
  • El símbolo de convenciones de notación se puede indicar encerrando el elemento en un cuadrado. brackets
  • Un CFG es una gramática recursiva por la izquierda que tiene al menos una producción del tipo
  • La derivación gramatical es una secuencia de reglas gramaticales que transforma el símbolo inicial en una cadena.
  • El analizador de sintaxis se ocupa principalmente de construcciones recursivas del lenguaje, mientras que el analizador léxico facilita la tarea del analizador de sintaxis en DBMS
  • El inconveniente del método del analizador de sintaxis es que nunca determinará si un token es válido o no.