# data[].attributes.headline
5.1 Definición y Clasificación de Gramáticas.

# data[].attributes.subject
5.1 Definición y Clasificación de Gramáticas.

# data[].attributes.body
Una gramática es un conjunto de reglas que definen la estructura de un lenguaje.

Clasificación de gramáticas:

Gramáticas de Tipo 0 (Recursivamente Enumerables): Pueden generar cualquier lenguaje reconocible por una máquina de Turing.

Gramáticas de Tipo 1 (Sensibles al Contexto): Generan lenguajes sensibles al contexto y se utilizan para describir la sintaxis de muchos lenguajes de programación.

Gramáticas de Tipo 2 (Libres de Contexto): Generan lenguajes libres de contexto y se utilizan en análisis sintáctico de lenguajes de programación.

Gramáticas de Tipo 3 (Regulares): Generan lenguajes regulares y se utilizan en expresiones regulares y análisis léxico.

# data[].attributes.headline
5.2 Gramáticas Libres de Contexto (GLC).

# data[].attributes.subject
5.2 Gramáticas Libres de Contexto (GLC).

# data[].attributes.body
Son un tipo específico de gramática ampliamente utilizadas en la descripción de la sintaxis de lenguajes de programación.

Se componen de reglas de producción que especifican cómo se pueden formar las estructuras sintácticas.

Un ejemplo de una regla de producción en una GLC sería: S -> if (expr) stmt.

# data[].attributes.body
Son estructuras jerárquicas que representan cómo se deriva una cadena de símbolos a partir de las reglas de una gramática.

Cada nodo en el árbol representa un símbolo no terminal o terminal, y las ramas muestran las reglas de producción utilizadas en la derivación.

Los árboles de derivación son fundamentales para comprender la estructura sintáctica de una sentencia en un lenguaje.

# data[].attributes.body
Son representaciones estandarizadas de gramáticas libres de contexto que simplifican su análisis y procesamiento.

Hay dos formas normales de Chomsky:

Forma Normal de Chomsky (FNC): Cada regla de producción tiene la forma A -> BC o A -> a, donde A, B y C son no terminales y 'a' es un terminal.

Forma Normal de Chomsky Binarizada (FNCB): Similar a FNC, pero permite reglas de producción de la forma A -> aBC.

# data[].attributes.body
Son herramientas que analizan la estructura sintáctica de un programa o cadena de texto.

Tipos de analizadores sintácticos:

Analizadores Sintácticos Descendentes (Top-Down): Comienzan desde el símbolo inicial y se mueven hacia abajo construyendo la derivación.

Analizadores Sintácticos Ascendentes (Bottom-Up): Comienzan desde los símbolos terminales y se mueven hacia arriba construyendo la derivación.

Analizadores Sintácticos LR (Left-to-Right, Rightmost Derivation): Combinan las ventajas de ambos enfoques anteriores y son comunes en la generación de analizadores para lenguajes de programación.

# data[].attributes.body
Nos proporciona mensajes de error claros y útiles cuando el código fuente contiene errores sintácticos.

El manejo de errores incluye la detección temprana de errores, la recuperación de errores y la generación de mensajes de error comprensibles.

Los errores se pueden clasificar en:

Errores de sintaxis: Violaciones de la estructura gramatical.

Errores semánticos: Violaciones de la semántica del programa.