Criterios ESG: fundamentos, aplicaciones y beneficios
Compiladores analizadores gramática y algo mas
1. Compiladores Analizadores Gramática Y Algo Mas…
LENGUAJS FORMALES
ANDRES FELIPE BEDOYA VALENCIA
CESAR ERNESTO FAJARDO RAMOS
INSTITUCION UNIVERSITARIA COLEGIO MAYOR DEL CAUCA
POPAYAN CAUCA
2. Compiladores Analizadores Gramática Y Algo
Mas…
Compiladores son un conjunto de herramientas que permiten a los usuarios
comunicarse con una maquina, es decir, el usuario escribe su código fuente
escrito en un lenguaje de alto nivel y el compilador se encarga de convertirlo para
que sea comprendido por la maquina.
Los compiladores cuentan con un analizador sintáctico que es aquel que se
encarga de la de convertir un dato de entrada o varias llamados Tokens que son el
resultado de otra parte de los compiladores llamados analizadores léxicos para
luego ser analizados por el analizador léxico y ordenados en un árbol jerárquico.
Existen 2 tipos de analizadores sintácticos o dos maneras de ordenar un árbol.
Ascendente: Construyen árboles de análisis sintáctico comenzando en las hojas y
suben hacia la raíz
Descendente: Construye árboles de análisis sintáctico desde arriba (raíz) hacia
abajo (hojas)
3. El análisis se realiza de lo particular a lo general. En ambos casos, se examina la
entrada al analizador léxico de izquierda a derecha, un símbolo a la vez.
Gramática
La gramática es la formación de la jerarquía de las estructuras en los lenguajes de
programación; la sintaxis de los lenguajes de programación son suficientemente
sencillos o simples para obtener así la eficiencia de los algoritmos de análisis
sintáctico para determinar si una cadena puede generarse partiendo de una
gramática.
La gramática está comprendida por:
Terminales -> Símbolos básicos con que se forman las cadenas. Para un
lenguaje de programación, cada palabra clave/reservada es un terminal.
No terminales -> Son variables sintácticas que denotan conjuntos de cadenas
(identificadores o variables). Los no terminales definen conjuntos de cadenas que
ayudan a definir el lenguaje generado por la gramática. Imponen una estructura
jerárquica sobre el lenguaje que es útil tanto para el análisis sintáctico como para
la traducción.
UN SÍMBOLO INICIAL-> En una gramática, es un no terminal que representa un
conjunto de cadenas.
Gramática ambigua
La gramática ambigua es lo que se genera luego de obtener un árbol
independiente de cómo se obtenga, donde luego de generarlo se obtiene uno o
más arboles iguales.
Una de las razones por las cuales se puede generar la gramática ambigua es el
orden de los operadores según como allá sido definida la procedencia de signos
4. en un árbol, es decir cómo se puede alterar una operación si primero en el orden
del árbol se encuentra un operador de Multiplicación (*) o un operador de
Suma(+), ya que sabemos de ante mano que el operador de Multiplicación (*) en
este caso tiene mas precedencia que el de suma (+)
Siendo más claros la precedencia de operadores especifica cómo se agrupan las
expresiones, por ejemplo
1+5*3, su respuesta es 16 ya que primero de realiza la multiplicación 5*3=15 y
luego se realiza la suma obteniendo como resultado 16 no por el contrario primero
1+5 para posteriormente multiplicarlo por 3 obteniendo como resultado 18.
Este es uno de los casos más denotados de gramática ambigua en los lenguajes
de programación, razón por la cual es importante la sintaxis clara y sencilla
utilizada en los analizadores sintácticos, de tal manera que se puedan obtener los
arboles correctos según su procedencia de símbolos.
Para este problema de ambigüedad se cuenta con dos maneras de reducirla
1. Dar mayor prioridad al producto que a la suma.
2. En caso de igualdad en la prioridad obligar al uso de paréntesis.
La gramática ambigua puede ser utilizada para la implementación de lenguajes
utilizada para el aislamiento de contracciones sintácticas habituales para
optimación en casos especiales, pero esta de manera controlada ya que puede
llegar a no ser reconocida por el analizador del lenguaje.