Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TAMAZUNCHALE
ALUMNA:
VICTORIA SANCHEZ ORTIZ 19ISC075
6° SEMESTRE – M2
CARRERA: ING EN SISTEMAS COMPUTACIONALES
PERIODO ESCOLAR: FEBRERO - JUNIO 2023
0
INDICE
Contenido
INTRODUCCIÓN.................................................................................................................................................1
5.1 DEFINICIÓN Y CLASIFICACIÓN DE GRAMATICAS............................................................................2
5.2 GRAMATICAS LIBRES DE CONTEXTO (GLC).....................................................................................6
5.3 ÁRBOLES DE DERIVACIÓN.....................................................................................................................7
5.4 FORMAS NORMALES DE CHOMSKY.....................................................................................................9
5.5 DIAGRAMAS DE SINTAXIS.....................................................................................................................10
5.6 ELIMINACIÓN DE LA AMBIGUEDAD....................................................................................................11
5.7 TIPOS DE ANALIZADORES SINTACTICOS.........................................................................................12
5.8 GENERACIÓN DE MATRIZ PREDICTIVA (CALCULO FIRST Y FOLLOW)...................................13
5.9 MANEJO DE ERRORES...........................................................................................................................14
5.10 GENERADORES DE ANALIZADORES SINTACTICOS...................................................................15
CONCLUSIONES..............................................................................................................................................17
INTRODUCCIÓN
Durante el estudio de esta unidad, se ha comprendido que existen diferentes técnicas para
realizar el análisis sintáctico, como el análisis descendente y el análisis ascendente. Además,
se ha explorado los generadores de analizadores sintácticos, herramientas que automatizan
la generación de analizadores sintácticos a partir de una descripción formal de la gramática.
1
5.1 DEFINICIÓN Y CLASIFICACIÓN DE GRAMATICAS
SÍMBOLO
Es una entidad abstracta, que no se va a definir. Normalmente los símbolos son letras (a, b,
c, z), dígitos (0,1,2…9) y otros caracteres (+, *, /, -,?...).
Un símbolo también puede estar formado por varias letras o caracteres, como las palabras
reservadas de un lenguaje de programación son símbolos de dicho lenguaje. Ejemplo:
VOCABULARIO O ALFABETO
Los alfabetos se definen por enumeración de los símbolos que contienen, podemos ver los
siguientes ejemplos:
· V1={A,B,C,D,E,F,…..,X,Y,Z}
· V2={a,b,c,d,0,1,2,3,4,*,#,+}
· V3={0,1}
· También se pueden definir las tablas ASCII y EBCDIC como los alfabetos de distintos
ordenadores.
2
CADENA
LONGITUD DE CADENA
· |abcb| es de longitud 4
· |a + 2*b| es de longitud 5
· |000111| es de longitud 6
CADENA VACÍA
Se denomina cadena vacía, que no tiene símbolos y se denota con l, por lo que su longitud
es:
|l|®0
CONCATENACIÓN DE CADENAS
3
El elemento neutro de la concatenación es l:
A l = lA = A
El conjunto de todas las cadenas que se pueden formar con los símbolos de un alfabeto, se
denomina universo del discurso V y se representa por W(V). Evidentemente W(V) es un
conjunto infinito. La cadena vacía pertenece a W(V).Ejm:
Sea un alfabeto con una sola letra V={a}, entonces el universo del discurso es:
GRAMÁTICA
(Del lat. gramática, y este del gr. γραμματική). f. Ciencia que estudia los elementos de una
lengua y sus combinaciones. Arte de hablar y escribir correctamente una lengua. Estudio de
una lengua regido por el principio de que todos sus elementos mantienen entre sí relaciones
sistemáticas. La que trata de formular una serie de reglas capaces de generar o producir
todas las oraciones posibles y aceptables de un idioma o lenguaje
Una definición un tanto técnica: " La gramática es un ente formal para especificar, de una
manera finita, el conjunto de cadenas de símbolos que constituyen un lenguaje" . La
gramática genera o describe un lenguaje.
AUTÓMATA
(Del latín. autómata, t. f. de -tus, y este del gr. αὐτόματος, espontáneo). m.Instrumento o
aparato que encierra dentro de sí el mecanismo que le imprime determinados movimientos o
respuestas. Máquina que imita la figura y los movimientos de un ser animado. Microsoft®
Encarta® 2007. © 1993-2006 Microsoft Corporation. Reservados todos los derechos.
4
En el caso de los Procesadores de Lenguaje un autómata es una construcción lógica que
recibe como entrada una cadena de símbolos y produce una salida indicando si dicha
cadena pertenece o no a un determinado lenguaje.
LENGUAJE
Conjunto de sonidos articulados con que el hombre manifiesta lo que piensa o siente.
Sistema de comunicación verbal. Manera de expresarse. Conjunto de señales que dan a
entender algo. El lenguaje de los ojos, el de las flores. En Informática Conjunto de signos y
reglas que permite la comunicación con un ordenador.
LENGUAJE VACÍO
Existe un lenguaje denominado lenguaje vacío, que es un conjunto vacío y que se denota por
{Ø}. El lenguaje vacío no debe confundirse con un lenguaje que contenga una sola cadena, y
que ésta sea la cadena vacía, es decir {l}, ya que el número de elementos (cardinalidad) de
estos dos conjuntos es diferente.
Cardinal ({ Ø }) = 0
Cardinal ({ l }) = 1
5
Los símbolos no terminales, por otro lado, son variables que representan un conjunto de
posibles símbolos terminales.
Gramáticas Libres de Contexto (GLC), o de tipo 2: las reglas son de la forma X → α, donde X
es una variable y α es una cadena que puede contener variables y constantes. Estas
gramáticas producen los lenguajes Libres de Contexto (abreviado “LLC”)
Herramienta formal que puede ser vista tanto desde un punto de vista generador como
estructurador.
G = (V, T, P, S)
S Є V, símbolo inicial
6
componentes principales: un conjunto finito de símbolos terminales, un conjunto finito de
símbolos no terminales, un símbolo inicial y un conjunto finito de reglas de producción. Los
símbolos terminales representan las unidades básicas del lenguaje, como las palabras en un
idioma. Los símbolos no terminales, por otro lado, son variables que se pueden reemplazar
por cadenas de símbolos.
los nodo interiores del árbol están etiquetados por los símbolos no terminales
si un nodo interior etiquetado por A, posee como hijos los nodos etiquetados por X1,X2, …Xn
, entonces A→ X1,X2, …Xn es una producción de la gramática, en donde Xi , representa
símbolo terminal o no terminal.
G=( Σ={a, b}, N={S,A,B},S P ) P: S→aABAa , A→ε |aA , B→ε|bB la construcción de un árbol
de derivación en el proceso de la generación de la palabra aa es el siguiente:
7
Propiedades de un árbol de derivación.
Sea G = (N, T, S, P) una gramática libre de contexto, sea A Є N una variable. Diremos que
un árbol TA= (N, E) etiquetado es un árbol de derivación asociado a G si verifica las
propiedades siguientes:
Para cada cadena del lenguaje generado por una gramática es posible construir (al menos)
un árbol de derivación, en el cual cada hoja tiene como rótulo uno de los símbolos de la
cadena.
Los árboles de derivación son una representación gráfica que nos permite visualizar cómo se
generan las cadenas de un lenguaje a partir de una gramática libre de contexto (GLC). Son
una herramienta fundamental en el análisis sintáctico y nos ayudan a comprender la
estructura de una cadena y cómo se aplica el conjunto de reglas de producción de la GLC
para llegar a esa cadena específica.
8
5.4 FORMAS NORMALES DE CHOMSKY
Una gramática formal está en Forma normal de Chomsky si todas sus reglas de producción son de
alguna de las siguientes formas:
A → BC o
A→ao
Todo lenguaje independiente del contexto que no posee a la cadena vacía, es expresable por medio
de una gramática en forma normal de Chomsky (GFNCH) y recíprocamente. Además, dada una
gramática independiente del contexto, es posible algorítmicamente producir una GFNCH equivalente,
es decir, que genera el mismo lenguaje.
Variables accesibles:
Si existe una derivación desde el símbolo inicial que contiene X, es decir, existe $ → * α Xβ donde α,
β Є∑*
Variables generativas:
Si existe una derivación desde el la variable que produce una sentencia , es decir, existe X →* ω
donde ω Є *T.
Variables útiles:
Si existe una derivación desde el símbolo inicial usando que produce una sentencia ω, es decir,
existe $ →* α X β →*ω donde α, β Є ∑* y ω Є ∑*T.
Las formas normales de Chomsky son una manera estandarizada de representar gramáticas libres de
contexto (GLC) con reglas de producción específicas, estas formas normales son importantes porque
simplifican el análisis y la manipulación de las gramáticas lo que facilita su implementación en
algoritmos y autómatas.
9
Todas las reglas deben tener una forma específica: el lado izquierdo de la regla debe contener
exactamente un símbolo no terminal, y el lado derecho debe contener dos símbolos, ya sean no
terminales o terminales. En otras palabras, las reglas deben ser de la forma A → BC, donde A, B y C
son símbolos no terminales.
Los diagramas sintácticos, de sintaxis o diagramas del ferrocarril son una forma de
representar una gramática libre de contexto. Representan una alternativa gráfica para la
Forma de Backus-Naur (BNF, por sus siglas en inglés) o la Forma Extendida de Backus-Naur
(EBNF, por sus siglas en ingles).
Los diagramas de ferrocarril son más comprensibles para la mayoría de la gente. Alguna
parte de la popularidad del formato de intercambio de datos JSON se debe a su
representación en los diagramas de ferrocarril.
El nodo raíz del árbol representa el símbolo inicial de la gramática y los nodos hoja
representan los símbolos terminales que forman la cadena que se está analizando. A medida
10
que se desciende por el árbol, se aplican las reglas de producción correspondientes para
expandir los símbolos no terminales y generar nuevos nodos.
Una GLC es ambigua si existe una cadena w Є L(G) que tiene más de una derivación por la
izquierda o más de una derivación por la derecha o si tiene dos o más arboles de derivación .
En casi de y que toda cadena w Є L (G) tenga un único árbol de derivación no es ambigua.
Ambigüedad Inherente:
Las gramáticas que presentan este tipo de ambigüedad no pueden utilizarse para lenguajes
de programación, ya que por más transformaciones que se realicen sobre ellas, nunca se
podrá eliminar completamente la ambigüedad que presentan:
La ambigüedad en las gramáticas libres de contexto (GLC) ocurre cuando una cadena de
símbolos puede tener múltiples interpretaciones o derivaciones posibles. En otras palabras,
existen diferentes árboles de derivación que pueden generar la misma cadena. La
11
eliminación de ambigüedad es un proceso mediante el cual se modifica una gramática
ambigua para que solo tenga una interpretación unívoca.
Analizador Descendente:
Se construye el árbol de análisis sintético partiendo del símbolo inicial y aplicando las
producciones mediante derivaciones por la izquierda, el símbolo a expandir es el que está
más a la izquierda.
Analizador Ascendente:
Ejemplo:
G= ({+,*, ID, (,)}, {E, T, P},E, P)P={E:=E+T | T; T:=T*P | P; P:= ID | (E) }FraseID + ( ID * ID )
Ejemplo:
G= ({+,*, ID, (,)}, {E, T, P},E, P)P={E:=E+T | T; T:=T*P | P; P:= ID | (E) }FraseID + ( ID * ID )
Los analizadores sintácticos, también conocidos como parsers, son componentes esenciales
en el proceso de análisis de la estructura sintáctica de un lenguaje. Son responsables de
verificar si una cadena de símbolos sigue las reglas gramaticales de un lenguaje dado. Los
analizadores sintácticos son componentes cruciales en el análisis de la estructura sintáctica
de un lenguaje. Los analizadores sintácticos descendentes, ascendentes y otros tipos, como
LL y GLR, ofrecen diferentes enfoques y técnicas para realizar esta tarea. Cada tipo tiene
sus propias características y se utiliza en diferentes situaciones según los requisitos y las
características del lenguaje.
12
5.8 GENERACIÓN DE MATRIZ PREDICTIVA (CALCULO FIRST Y FOLLOW)
FIRST: Sea G := (V; ∑; Q0; P) una gramática libre de contexto. Para cada forma sentencial α
Є (V U ∑)* y para cada k Є N definiremos la función.
En otras palabras, el operador F IRST k asocia a cada forma sentencial los primeros k
símbolos de cualquier forma terminal alcanzable desde α mediante derivaciones “masa la
izquierda".
FOLLOW: Con las mismas notaciones anteriores, para cada forma sentencial α Є (V U ∑)*
definiremos la función FOLLOWG GK (α) del modo siguiente.
La generación de una matriz predictiva es una técnica utilizada en el análisis sintáctico para
construir una tabla que ayuda a determinar qué regla de producción aplicar en cada paso del
análisis. Esta tabla se basa en los conjuntos First y Follow, que se calculan a partir de una
gramática libre de contexto (GLC). El conjunto First de un símbolo no terminal o terminal en
una gramática es el conjunto de terminales que pueden aparecer como el primer símbolo en
alguna derivación de ese símbolo. Ademas representa los posibles símbolos iniciales de las
cadenas que pueden ser generadas por ese símbolo.
13
5.9 MANEJO DE ERRORES
Un compilador es un sistema que en la mayoría de los casos tiene que manejar una entrada
incorrecta. Sobre todo, en las primeras etapas de la creación de un programa, es probable
que el compilador se utiliza para efectuar las características que debería proporcionar un
buen sistema de edición dirigido por la sintaxis, es decir, para determinar si las variables han
sido declaradas antes de usarla, o si faltan corchetes o algo así.
Y sobre todo, el compilador debe producir un mensaje de error que permita al programador
encontrar y corregir fácilmente los elementos (sintácticamente) incorrectos de su programa.
Errores Sintácticos.
14
Cuando se escribe un programa, es común cometer errores, ya sea por errores de sintaxis
(errores en la estructura del código) o errores lógicos (errores en la lógica o el razonamiento
del programa). Estos errores pueden provocar que el programa se comporte de manera
inesperada o incluso se bloquee por completo. El manejo de errores es una técnica que se
utiliza para detectar, informar y responder adecuadamente a los errores en un programa.
ANTLR:
(ANother Tool for Language Recognition; en español "otra herramienta para reconocimiento
de lenguajes") es una herramienta creada principalmente por Terence Parr, que opera sobre
lenguajes, proporcionando un marco para construir reconocedores (parsers), intérpretes,
compiladores y traductores de lenguajes a partir de las descripciones gramaticales de los
mismos (conteniendo acciones semánticas a realizarse en varios lenguajes de
programación).
GNU bison:
Gramática:
15
JavaCC:
Yacc:
Es un programa para generar analizadores sintácticos. Las siglas del nombre significan Yet
Another Compiler-Compiler, es decir, "Otro generador de compiladores más". Genera un
analizador sintáctico (la parte de un compilador que comprueba que la estructura del código
fuente se ajusta a la especificación sintáctica del lenguaje) basado en una gramática analítica
escrita en una notación similar a la BNF. Yacc genera el código para el analizador sintáctico
en el Lenguaje de programación C.
16
CONCLUSIONES
17