martes, 19 de noviembre de 2024

Diagramas de sintaxis

Tipos de analizadores sintácticos 

Diagramas de sintaxis

5.5 Diagramas de sintaxis

Los diagramas de sintaxis son representaciones gráficas que muestran la estructura sintáctica de una expresión en un lenguaje formal. Cada nodo representa un símbolo terminal o no terminal, y las conexiones entre nodos muestran cómo se combinan los símbolos según las reglas de la gramática.

5.6 Eliminación de la ambigüedad

La eliminación de la ambigüedad es el proceso de modificar una gramática para que cada cadena en el lenguaje tenga una única interpretación. Esto se logra reescribiendo las reglas de producción, introduciendo reglas de precedencia y asociatividad, y factoring las producciones comunes.

5.7 Tipos de analizadores sintácticos

Existen varios tipos de analizadores sintácticos, incluyendo:

  • Analizadores descendentes: Construyen la derivación de la cadena de entrada desde el símbolo inicial hasta los símbolos terminales.

  • Analizadores ascendentes: Construyen la derivación de la cadena de entrada desde los símbolos terminales hasta el símbolo inicial.

  • Analizadores de tabla: Utilizan una tabla de análisis para determinar la estructura sintáctica de la entrada.




5.8 Generación de matriz predictiva (cálculo first y follow)

La matriz predictiva se genera utilizando los cálculos de first y follow. El cálculo first determina el conjunto de símbolos terminales que pueden aparecer al inicio de una cadena derivada de un símbolo no terminal. El cálculo follow determina el conjunto de símbolos terminales que pueden aparecer después de un símbolo no terminal en una derivación.

5.8 Generación de matriz predictiva (cálculo first y follow)

La generación de la matriz predictiva se basa en los conjuntos first y follow para ayudar en el análisis sintáctico:

  • Conjunto First: Para un no terminal AA, el conjunto First(A) es el conjunto de terminales que pueden aparecer al inicio de alguna derivación de AA.

  • Conjunto Follow: Para un no terminal AA, el conjunto Follow(A) es el conjunto de terminales que pueden aparecer inmediatamente a la derecha de AA en alguna derivación.

Cálculo de First

  1. Si XX es un terminal, entonces First(X) es {X}\{X\}.

  2. Si XX es un no terminal y XY1Y2...YnX \rightarrow Y1Y2...Yn es una regla de producción, se agrega First(Y1) a First(X).

  3. Si XεX \rightarrow \varepsilon (producción vacía), se agrega ε\varepsilon a First(X).

Cálculo de Follow

  1. Follow(S) (donde S es el símbolo inicial) contiene el símbolo de fin de cadena (\$).

  2. Si hay una producción AαBβA \rightarrow \alpha B \beta, entonces se agrega First(\beta) - {ε}\{\varepsilon\} a Follow(B).

  3. Si hay una producción AαBA \rightarrow \alpha B o AαBβA \rightarrow \alpha B \beta donde First(\beta) contiene ε\varepsilon, se agrega Follow(A) a Follow(B).

Matriz Predictiva

Una vez calculados los conjuntos First y Follow, se puede construir una matriz predictiva que guía el análisis sintáctico. Cada entrada en la matriz corresponde a una regla de producción y se utiliza para decidir qué producción aplicar basándose en el símbolo actual de entrada y el estado del análisis





martes, 5 de noviembre de 2024

Cuestionario sobre el analizador léxico

 4.1 Funciones del analizador léxico

1. ¿Cómo puede definir la entrada del analizador léxico? R Como una secuencia de caracteres.

2. ¿Cuál posición de fase es el analizador léxico de un compilador? R= Es la primera fase

3. ¿En qué ejemplos podrian utilizar los analizadores léxicos? R= Buscando operadores, delimitadores, números y variables, por medio de algún lenguaje de programación

4. ¿Cuál es la principal función del analizador léxico? R= Consiste en leer los caracteres de entrada v elaborar como salida una secuencia de componentes léxicos que utiliza el analizador sintáctico para hacer el análisis

 4.2 Componentes léxicos, patrones y lexemas

1. ¿Cómo funciona un analizador léxico? R= Algunas funcionalidades relevantes son que se ocupa de la supresión de los espacios en blanco de cualquier cadena que examina, reconoce los identificadores y palabras claves

2. ¿Qué es un lexema? R= Es una cadena de caracteres que concuerda con un patrón que describe un componente léxico (valor de cadena)

3. ¿Cómo debemos de organizar componentes léxicos y patrones? R Organizarla por medio de una secuencia de caracteres

4. Es una descripción ce la forma que puederi tomar los lexemas de un token R- Un patrón

4.3 Creación de Tabla de tokens

1. ¿Cómo podríamos definir una tabla de tokens? R= Estructura de datos que contiene un registro por cada identificador utilizado en el código fuente, con los campos para los atributos del identificador

2 ¿Cuál es alguna de las principales funciones de una tabla de tokens? R Tiene 2 funciones principales que son el de efectuar chequabs semánticos y generación de código I

3. Menciona un Ejemplo de una Cadena Especifica. R=Palabras reservadas de algún lenguaje de programación (if, while, for. int. etc)

4. Menciona un ejemplo de una Cadena NO especifica:

R
//CODIGO C# const 
int dato = 0 
Su valor será dato y su token sera "identificador"

miércoles, 30 de octubre de 2024

Funciones del analizador léxico, Componentes léxicos, patrones y lexemas

 Lectura del Código Fuente:

El analizador léxico toma el código fuente como entrada y lo escanea carácter por carácter.

Se asegura de leer el archivo línea por línea y mueve un puntero a través del texto para identificar las cadenas de caracteres que forman los tokens.

Generación de Tokens:

Agrupa los caracteres en unidades significativas llamadas tokens. Cada token representa una categoría específica (como una palabra clave, identificador, operador, etc.).

Por ejemplo, en la expresión int x = 5;, los tokens serían int, x, =, 5, y ;.

Los tokens generados se pasan luego a la siguiente fase del compilador, generalmente el analizador sintáctico.

Manejo de Errores Léxicos:

Identifica y reporta errores léxicos, como caracteres no válidos o malformaciones.

Proporciona mensajes de error descriptivos para ayudar a los desarrolladores a corregir los problemas en el código fuente.

Por ejemplo, un error léxico ocurriría si hay un símbolo no reconocido en el código, como @int x = 5;.

Eliminación de Espacios en Blanco y Comentarios:

Ignora espacios en blanco, tabulaciones, saltos de línea y comentarios, ya que no son significativos para el análisis sintáctico.

Esta limpieza permite al analizador léxico centrarse únicamente en los elementos importantes del código.

Optimización del Flujo de Entrada:

Implementa técnicas de buffering para manejar la entrada de manera eficiente.

Utiliza un buffer para leer grandes bloques de texto en lugar de carácter por carácter, lo que mejora el rendimiento.


Componentes Léxicos (Tokens):

Son las unidades mínimas del código fuente con significado léxico. Cada token pertenece a una clase específica, como palabras clave, identificadores, literales, operadores, etc.

Ejemplo: En int x = 5;, int es un token de tipo palabra clave, x es un identificador, = es un operador de asignación, 5 es un literal entero y ; es un delimitador.

Patrones:

Son las descripciones formales que definen cómo se forman los tokens. Los patrones se describen usualmente mediante expresiones regulares.

Ejemplo: El patrón para un identificador puede ser [a-zA-Z][a-zA-Z0-9]*, lo que significa que un identificador empieza con una letra y puede ser seguido por cualquier número de letras o dígitos.

Lexemas:

Son las instancias reales de los patrones en el código fuente, es decir, las secuencias específicas de caracteres que coinciden con un patrón.

Ejemplo: En int x = 5;, int, x, =, 5 y ; son lexemas que se ajustan a los patrones definidos para palabras clave, identificadores, operadores, literales y delimitadores, respectivamente

Automata