SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
Yacc

García Vélez María Azucena
Ortega Piña Efraín
UASLP-FI-Área de Computación e Informática-Compiladores e Interpretes A
Generalidades
• Yacc es un programa para generar analizadores
sintácticos LALR. 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).
• Yacc genera el código para el analizador
sintáctico en el Lenguaje de programación C.
• Fue
desarrollado
por
Stephen
C.
Johnson
en
AT&T
para
el
sistema
operativo Unix. Después se escribieron
programas compatibles, por ejemplo Berkeley
Yacc, GNU bison, MKS yacc y Abraxas yacc (una
versión actualizada de la versión original de
AT&T que también es software libre como parte
del proyecto de OpenSolaris de Sun).
• Puesto que el analizador sintáctico generado por
Yacc requiere un analizador léxico, se utiliza a
menudo conjuntamente con un generador de
analizador léxico, en la mayoría de los
casos lex o Flex, alternativa del software libre.
Funcionamiento de Yacc
• Igual que sucedía con lex, yacc no es directamente un
analizador sino un generador de analizadores. A partir
de un fichero fuente en yacc, se genera un fichero fuente
en C que contiene el analizador sintáctico. Sin embargo,
un analizador sintáctico de yacc no puede funcionar por
sí solo, sino que necesita un analizador léxico externo
para funcionar. Dicho de otra manera, el fuente en C que
genera yacc contiene llamadas a una función yylex() que
debe estar definida y debe devolver el tipo de lexema
encontrado. Además, es necesario incorporar también
una función yyerror(), que será invocada cuando el
analizador sintáctico encuentre un símbolo que no
encaja en la gramática.
Estructura de un programa en Yacc
• Declaraciones o Definiciones
%%
• Reglas de Traduccion
%%
• Soporte de las rutinas en C
• De estas tres secciones, sólo la segunda es
obligatoria, y no debe estar vacía (nótese que en
lex, las tres secciones pueden estar vacías). Esto
quiere decir que el mínimo programa en yacc es:
%%
regla gramatical acción en C
Declaraciones o definiciones
• Esta parte se toma por dos secciones en la primera
sección se declaran las primeras secciones
ordinarias en c delimitadas por %{ y %}, la segunda
sección a la declaración de tokens %Token TOKEN
%. En esta seccion se pueden emplear la definicion
de la asociatividad y precedencia de los tokens
empleando, e incluso se pueden definir los tipos de
datos %type es importante en esta seccion definir los
tipos de datos para la pila de Yacc mediante la
definicion YYSTYPE o bien mediante una estructura
de union.
• La sección de declaraciones puede incluir varias
cosas, tal y como ocurría en lex, pero ahora su
función principal no es definir expresiones
regulares, sino declarar los símbolos terminales
de la gramática mediante la directriz %token.
Todo lo que no sea un terminal, será
considerado un símbolo no terminal, y por tanto
debe haber un a regla para él:
• %token IF,ELSE,LLAVE_AB,LLAVE_CE,IDENT
• En algunos de los casos es conveniente indicarle
a yacc cual es el simbolo NT de inicio mediante
el cual se realiza por ejemplo % start SIMBOLO.
Reglas de traducción
• En esta seccion se colocan las reglas de
traduccion empleando el siguiente formato.
• <encabezados>:<cuerpo>1<accion semantica>1}
| <cuerpo>2<accion semantica>2}
:
| <cuerpo>n<accion semantica>n}
• La sección de reglas contiene la gramática en sí.
Componentes es una combinación de terminales
y no terminales que describe al no terminal de la
izquierda de la regla:
• no_terminal: componentes {acciones en C}
Rutinas en C
• En esta sección se incluyen todas las rutinas a
incrustarse en el código final. Es importante
tener un analizador léxico mediante el nombre
yylex, de tal manera que si no se realiza el enlace
entre lex y yacc se deberá de implementar dicha
función en esta parte.
Asociatividad y Precedencia
• Por defecto Yacc es asociativo a la derecha pero
esto puede modificarse en la sección de
definiciones utilizando las siguientes directivas:
▫ %left asocia a la izquierda
▫ %right asocia a la derecha

• Supongamos el siguiente fragmento de
programa Yacc para una gramática que reconoce
expresiones de sumas de números:
• La sección de rutinas tiene la misma función que
la de lex, pero yacc (dependiendo de su variante)
no define por defecto las funciones main(),
yylex() e yyerror(), así que hay que incluirlas
aquí, o bien en otro fichero que se enlazará en la
fase final de la compilación.
• Yacc genera una función llamada yyparse() que
contiene el analizador sintáctico. Esta función se
comporta como una máquina de estados cuya
misión es intentar reducir todo el fichero de
entrada al símbolo inicial de la gramática (el
primero que se haya definido). Si yacc lo
consigue, el analizador sintáctico volverá sin
error, y en caso contrario, se invocará a la
función yyerror(), que debe estar definida
también en algún sitio.
• Si la entrada fuese 5+6+8 por defecto se
resolvería como 5+(6+8) (asociación por la
derecha),pero al haber definido %left al símbolo
‘+’ en la sección de definiciones el resultado es
(5+6)+8 (asociación por la izquierda).
• %left, %right y %nonassoc Además de indicar
asociatividad se utilizan en la sección de
definiciones para indicar precedencia de los
operadores teniendo mayor precedencia cuanto más
alejados estén del principio del fichero. La última de
las tres directivas no indica asociatividad solo
precedencia.
• %pred Se utiliza en una regla para dar distinta
prioridad al primer símbolo de esa regla, solo para la
aplicación de esa regla. Se usa cuando un mismo
símbolo puede tener significados distintos con
prioridades diferentes. Por ejemplo el símbolo ‘-‘
puede ser unario y binario, cuando es binario tiene
la misma prioridad que ‘+’, pero cuando es unario
tiene mayor prioridad. En este caso se le puede
asignar la misma prioridad que a ‘*’, tal y como se
muestra en el ejemplo siguiente.
Conflictos y Ambigüedad
• Cuando la gramática de entrada no es LALR(1),
Yacc informará de que ha encontrado
“conflictos”. Los conflictos se producen cuando
el algoritmo de construcción de las tablas no ha
permitido, en un momento dado, que se sepa si
la acción adecuada es desplazar o reducir
(conflicto shift/reduce), o bien cuando haya
varias posibilidades de reducción (conflicto
reduce/reduce). Se podrá encontrar cuales son
los conflictos aparecidos examinando el
contenido de y.output.
• Aveces es conveniente conocer cuales son los
conflictos que provoca nuestra gramática y
tratar de evitarlos, para ello puede ser útil
utilizar la opción –v de Yacc para examinar el
autómata descrito en el fichero y.output.
Independientemente de la información
mostrada Yacc continua el proceso, generando
un programa que resuelve sistemáticamente los
conflictos aplicando las siguientes normas:
▫ Entre desplazar y reducir, elige desplazar.
▫ Entre dos reducciones distintas, elige la
correspondiente a la regla que aparezca en primer
lugar.

Más contenido relacionado

La actualidad más candente

Unidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionUnidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionIrving Che
 
Tipos de gramatica y arboles de derivacion
Tipos de gramatica y arboles de derivacionTipos de gramatica y arboles de derivacion
Tipos de gramatica y arboles de derivacionjorge severino
 
Automatas Finitos Deterministicos y No Deterministicos
Automatas Finitos Deterministicos y No DeterministicosAutomatas Finitos Deterministicos y No Deterministicos
Automatas Finitos Deterministicos y No DeterministicosRosviannis Barreiro
 
Modelos de arquitecturas de computadoras
Modelos de arquitecturas de computadorasModelos de arquitecturas de computadoras
Modelos de arquitecturas de computadorasYESENIA CETINA
 
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesPortafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesHumano Terricola
 
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS Infomania pro
 
Clasificación de los requerimientos
Clasificación de los requerimientosClasificación de los requerimientos
Clasificación de los requerimientosFSILSCA
 
Conceptos Unidad 1 Lenguajes Automatas Introducción a la Teoría de Lenguaje...
Conceptos Unidad 1 Lenguajes Automatas Introducción  a  la Teoría de Lenguaje...Conceptos Unidad 1 Lenguajes Automatas Introducción  a  la Teoría de Lenguaje...
Conceptos Unidad 1 Lenguajes Automatas Introducción a la Teoría de Lenguaje...Hugo Alberto Rivera Diaz
 
Estructura de lenguaje ensamblador
Estructura de lenguaje ensambladorEstructura de lenguaje ensamblador
Estructura de lenguaje ensambladorEustakiu Padilla
 
Programación del lado del cliente
Programación del lado del clienteProgramación del lado del cliente
Programación del lado del clienteGabriel Mondragón
 
maquinas de turing
maquinas de turingmaquinas de turing
maquinas de turingAnel Sosa
 
Portafolio lenguajes y automatas unidad 3 - Autómatas finitos
Portafolio lenguajes y automatas unidad 3 - Autómatas finitosPortafolio lenguajes y automatas unidad 3 - Autómatas finitos
Portafolio lenguajes y automatas unidad 3 - Autómatas finitosHumano Terricola
 

La actualidad más candente (20)

Jerarquia de chomsky
Jerarquia de chomskyJerarquia de chomsky
Jerarquia de chomsky
 
Unidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionUnidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacion
 
Tipos de gramatica y arboles de derivacion
Tipos de gramatica y arboles de derivacionTipos de gramatica y arboles de derivacion
Tipos de gramatica y arboles de derivacion
 
Ensamblador y lenguaje c
Ensamblador y lenguaje cEnsamblador y lenguaje c
Ensamblador y lenguaje c
 
Expresiones regulares
Expresiones regularesExpresiones regulares
Expresiones regulares
 
Analisis Semantico
Analisis Semantico Analisis Semantico
Analisis Semantico
 
Automatas Finitos Deterministicos y No Deterministicos
Automatas Finitos Deterministicos y No DeterministicosAutomatas Finitos Deterministicos y No Deterministicos
Automatas Finitos Deterministicos y No Deterministicos
 
Estándares para el Modelado de Procesos de Negocios
Estándares para el Modelado de Procesos de NegociosEstándares para el Modelado de Procesos de Negocios
Estándares para el Modelado de Procesos de Negocios
 
Modelos de arquitecturas de computadoras
Modelos de arquitecturas de computadorasModelos de arquitecturas de computadoras
Modelos de arquitecturas de computadoras
 
Ieee 830
Ieee 830Ieee 830
Ieee 830
 
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesPortafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
 
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
 
Clasificación de los requerimientos
Clasificación de los requerimientosClasificación de los requerimientos
Clasificación de los requerimientos
 
Conceptos Unidad 1 Lenguajes Automatas Introducción a la Teoría de Lenguaje...
Conceptos Unidad 1 Lenguajes Automatas Introducción  a  la Teoría de Lenguaje...Conceptos Unidad 1 Lenguajes Automatas Introducción  a  la Teoría de Lenguaje...
Conceptos Unidad 1 Lenguajes Automatas Introducción a la Teoría de Lenguaje...
 
Estructura de lenguaje ensamblador
Estructura de lenguaje ensambladorEstructura de lenguaje ensamblador
Estructura de lenguaje ensamblador
 
Programación del lado del cliente
Programación del lado del clienteProgramación del lado del cliente
Programación del lado del cliente
 
maquinas de turing
maquinas de turingmaquinas de turing
maquinas de turing
 
Portafolio lenguajes y automatas unidad 3 - Autómatas finitos
Portafolio lenguajes y automatas unidad 3 - Autómatas finitosPortafolio lenguajes y automatas unidad 3 - Autómatas finitos
Portafolio lenguajes y automatas unidad 3 - Autómatas finitos
 
Compiladores, Analisis Lexico
Compiladores, Analisis LexicoCompiladores, Analisis Lexico
Compiladores, Analisis Lexico
 
Código intermedio
Código intermedioCódigo intermedio
Código intermedio
 

Destacado (20)

Yacc
YaccYacc
Yacc
 
Yacc lex
Yacc lexYacc lex
Yacc lex
 
Lexical analyzer
Lexical analyzerLexical analyzer
Lexical analyzer
 
apego en las parejas
apego en las parejas apego en las parejas
apego en las parejas
 
Antesdequejarte
AntesdequejarteAntesdequejarte
Antesdequejarte
 
Ricardo presentacion
Ricardo presentacionRicardo presentacion
Ricardo presentacion
 
Armonicas en redes (1)
Armonicas en redes (1)Armonicas en redes (1)
Armonicas en redes (1)
 
El inventario de mis sueños (1)
El inventario  de mis sueños (1)El inventario  de mis sueños (1)
El inventario de mis sueños (1)
 
Conceptos
ConceptosConceptos
Conceptos
 
La educación
La  educaciónLa  educación
La educación
 
mundo dentro de tortuga
mundo dentro de tortugamundo dentro de tortuga
mundo dentro de tortuga
 
Finanzas internacionales
Finanzas internacionalesFinanzas internacionales
Finanzas internacionales
 
Proyecto isabel lopez
Proyecto isabel lopezProyecto isabel lopez
Proyecto isabel lopez
 
Informática
InformáticaInformática
Informática
 
Alca
AlcaAlca
Alca
 
1.lacreacion
1.lacreacion1.lacreacion
1.lacreacion
 
1bgu
1bgu1bgu
1bgu
 
1
11
1
 
Fernando merchan asignacion_sist_inf_educativa2
Fernando merchan asignacion_sist_inf_educativa2Fernando merchan asignacion_sist_inf_educativa2
Fernando merchan asignacion_sist_inf_educativa2
 
La salud
La saludLa salud
La salud
 

Similar a Yacc: generador de analizadores sintácticos LALR

Analizador lexico.pdf
Analizador lexico.pdfAnalizador lexico.pdf
Analizador lexico.pdfShadowArt2
 
Funcion del lex
Funcion del lexFuncion del lex
Funcion del lexPaul MG
 
Analizador Léxico, Analizador Sintáctico
Analizador Léxico, Analizador SintácticoAnalizador Léxico, Analizador Sintáctico
Analizador Léxico, Analizador SintácticoRaul Gomez
 
Procedimiento Para Utilizar Flex Y Bison
Procedimiento Para Utilizar Flex Y Bison Procedimiento Para Utilizar Flex Y Bison
Procedimiento Para Utilizar Flex Y Bison Raul Hernandez Mayo
 
Analisis Semantico Taller 1 Parcial 2
Analisis Semantico Taller 1 Parcial 2Analisis Semantico Taller 1 Parcial 2
Analisis Semantico Taller 1 Parcial 2GLORIABELEN3
 
Analisis semantico 06 06-2019 galarraga
Analisis semantico  06 06-2019 galarragaAnalisis semantico  06 06-2019 galarraga
Analisis semantico 06 06-2019 galarragaFabricio Galárraga
 
Taller analisis semantico
Taller analisis semanticoTaller analisis semantico
Taller analisis semanticoAlvaro Cedeño
 
Gramatica de atributos para el analisis semantica
Gramatica de atributos para el analisis semanticaGramatica de atributos para el analisis semantica
Gramatica de atributos para el analisis semanticaAlbhert Castillo Boza
 
Presentación 2014 profe gabriel
Presentación 2014 profe gabrielPresentación 2014 profe gabriel
Presentación 2014 profe gabrielEnrique Morales
 
Introduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdfIntroduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdfcursosrams
 

Similar a Yacc: generador de analizadores sintácticos LALR (20)

Analizador lexico.pdf
Analizador lexico.pdfAnalizador lexico.pdf
Analizador lexico.pdf
 
Funcion del lex
Funcion del lexFuncion del lex
Funcion del lex
 
Lex
LexLex
Lex
 
Lex
LexLex
Lex
 
Lex
LexLex
Lex
 
Articulo
ArticuloArticulo
Articulo
 
Analizador Léxico, Analizador Sintáctico
Analizador Léxico, Analizador SintácticoAnalizador Léxico, Analizador Sintáctico
Analizador Léxico, Analizador Sintáctico
 
Procedimiento Para Utilizar Flex Y Bison
Procedimiento Para Utilizar Flex Y Bison Procedimiento Para Utilizar Flex Y Bison
Procedimiento Para Utilizar Flex Y Bison
 
Analisis Semantico Taller 1 Parcial 2
Analisis Semantico Taller 1 Parcial 2Analisis Semantico Taller 1 Parcial 2
Analisis Semantico Taller 1 Parcial 2
 
Lex yacc
Lex yaccLex yacc
Lex yacc
 
cap8.pdf
cap8.pdfcap8.pdf
cap8.pdf
 
Analisis semantico 06 06-2019 galarraga
Analisis semantico  06 06-2019 galarragaAnalisis semantico  06 06-2019 galarraga
Analisis semantico 06 06-2019 galarraga
 
Analisis semantico
Analisis semanticoAnalisis semantico
Analisis semantico
 
Taller analisis semantico
Taller analisis semanticoTaller analisis semantico
Taller analisis semantico
 
Gramatica de atributos para el analisis semantica
Gramatica de atributos para el analisis semanticaGramatica de atributos para el analisis semantica
Gramatica de atributos para el analisis semantica
 
Presentación 2014 profe gabriel
Presentación 2014 profe gabrielPresentación 2014 profe gabriel
Presentación 2014 profe gabriel
 
Introduccion a haskell
Introduccion a haskellIntroduccion a haskell
Introduccion a haskell
 
Apuntes scilab
Apuntes scilabApuntes scilab
Apuntes scilab
 
Apuntes scilab
Apuntes scilabApuntes scilab
Apuntes scilab
 
Introduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdfIntroduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdf
 

Último

Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 

Último (13)

Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 

Yacc: generador de analizadores sintácticos LALR

  • 1. Yacc García Vélez María Azucena Ortega Piña Efraín UASLP-FI-Área de Computación e Informática-Compiladores e Interpretes A
  • 2. Generalidades • Yacc es un programa para generar analizadores sintácticos LALR. 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). • Yacc genera el código para el analizador sintáctico en el Lenguaje de programación C.
  • 3. • Fue desarrollado por Stephen C. Johnson en AT&T para el sistema operativo Unix. Después se escribieron programas compatibles, por ejemplo Berkeley Yacc, GNU bison, MKS yacc y Abraxas yacc (una versión actualizada de la versión original de AT&T que también es software libre como parte del proyecto de OpenSolaris de Sun). • Puesto que el analizador sintáctico generado por Yacc requiere un analizador léxico, se utiliza a menudo conjuntamente con un generador de analizador léxico, en la mayoría de los casos lex o Flex, alternativa del software libre.
  • 4. Funcionamiento de Yacc • Igual que sucedía con lex, yacc no es directamente un analizador sino un generador de analizadores. A partir de un fichero fuente en yacc, se genera un fichero fuente en C que contiene el analizador sintáctico. Sin embargo, un analizador sintáctico de yacc no puede funcionar por sí solo, sino que necesita un analizador léxico externo para funcionar. Dicho de otra manera, el fuente en C que genera yacc contiene llamadas a una función yylex() que debe estar definida y debe devolver el tipo de lexema encontrado. Además, es necesario incorporar también una función yyerror(), que será invocada cuando el analizador sintáctico encuentre un símbolo que no encaja en la gramática.
  • 5.
  • 6. Estructura de un programa en Yacc • Declaraciones o Definiciones %% • Reglas de Traduccion %% • Soporte de las rutinas en C
  • 7. • De estas tres secciones, sólo la segunda es obligatoria, y no debe estar vacía (nótese que en lex, las tres secciones pueden estar vacías). Esto quiere decir que el mínimo programa en yacc es: %% regla gramatical acción en C
  • 8. Declaraciones o definiciones • Esta parte se toma por dos secciones en la primera sección se declaran las primeras secciones ordinarias en c delimitadas por %{ y %}, la segunda sección a la declaración de tokens %Token TOKEN %. En esta seccion se pueden emplear la definicion de la asociatividad y precedencia de los tokens empleando, e incluso se pueden definir los tipos de datos %type es importante en esta seccion definir los tipos de datos para la pila de Yacc mediante la definicion YYSTYPE o bien mediante una estructura de union.
  • 9. • La sección de declaraciones puede incluir varias cosas, tal y como ocurría en lex, pero ahora su función principal no es definir expresiones regulares, sino declarar los símbolos terminales de la gramática mediante la directriz %token. Todo lo que no sea un terminal, será considerado un símbolo no terminal, y por tanto debe haber un a regla para él: • %token IF,ELSE,LLAVE_AB,LLAVE_CE,IDENT
  • 10. • En algunos de los casos es conveniente indicarle a yacc cual es el simbolo NT de inicio mediante el cual se realiza por ejemplo % start SIMBOLO.
  • 11. Reglas de traducción • En esta seccion se colocan las reglas de traduccion empleando el siguiente formato. • <encabezados>:<cuerpo>1<accion semantica>1} | <cuerpo>2<accion semantica>2} : | <cuerpo>n<accion semantica>n}
  • 12. • La sección de reglas contiene la gramática en sí. Componentes es una combinación de terminales y no terminales que describe al no terminal de la izquierda de la regla: • no_terminal: componentes {acciones en C}
  • 13. Rutinas en C • En esta sección se incluyen todas las rutinas a incrustarse en el código final. Es importante tener un analizador léxico mediante el nombre yylex, de tal manera que si no se realiza el enlace entre lex y yacc se deberá de implementar dicha función en esta parte.
  • 14. Asociatividad y Precedencia • Por defecto Yacc es asociativo a la derecha pero esto puede modificarse en la sección de definiciones utilizando las siguientes directivas: ▫ %left asocia a la izquierda ▫ %right asocia a la derecha • Supongamos el siguiente fragmento de programa Yacc para una gramática que reconoce expresiones de sumas de números:
  • 15. • La sección de rutinas tiene la misma función que la de lex, pero yacc (dependiendo de su variante) no define por defecto las funciones main(), yylex() e yyerror(), así que hay que incluirlas aquí, o bien en otro fichero que se enlazará en la fase final de la compilación.
  • 16. • Yacc genera una función llamada yyparse() que contiene el analizador sintáctico. Esta función se comporta como una máquina de estados cuya misión es intentar reducir todo el fichero de entrada al símbolo inicial de la gramática (el primero que se haya definido). Si yacc lo consigue, el analizador sintáctico volverá sin error, y en caso contrario, se invocará a la función yyerror(), que debe estar definida también en algún sitio.
  • 17.
  • 18. • Si la entrada fuese 5+6+8 por defecto se resolvería como 5+(6+8) (asociación por la derecha),pero al haber definido %left al símbolo ‘+’ en la sección de definiciones el resultado es (5+6)+8 (asociación por la izquierda).
  • 19.
  • 20. • %left, %right y %nonassoc Además de indicar asociatividad se utilizan en la sección de definiciones para indicar precedencia de los operadores teniendo mayor precedencia cuanto más alejados estén del principio del fichero. La última de las tres directivas no indica asociatividad solo precedencia. • %pred Se utiliza en una regla para dar distinta prioridad al primer símbolo de esa regla, solo para la aplicación de esa regla. Se usa cuando un mismo símbolo puede tener significados distintos con prioridades diferentes. Por ejemplo el símbolo ‘-‘ puede ser unario y binario, cuando es binario tiene la misma prioridad que ‘+’, pero cuando es unario tiene mayor prioridad. En este caso se le puede asignar la misma prioridad que a ‘*’, tal y como se muestra en el ejemplo siguiente.
  • 21.
  • 22. Conflictos y Ambigüedad • Cuando la gramática de entrada no es LALR(1), Yacc informará de que ha encontrado “conflictos”. Los conflictos se producen cuando el algoritmo de construcción de las tablas no ha permitido, en un momento dado, que se sepa si la acción adecuada es desplazar o reducir (conflicto shift/reduce), o bien cuando haya varias posibilidades de reducción (conflicto reduce/reduce). Se podrá encontrar cuales son los conflictos aparecidos examinando el contenido de y.output.
  • 23. • Aveces es conveniente conocer cuales son los conflictos que provoca nuestra gramática y tratar de evitarlos, para ello puede ser útil utilizar la opción –v de Yacc para examinar el autómata descrito en el fichero y.output. Independientemente de la información mostrada Yacc continua el proceso, generando un programa que resuelve sistemáticamente los conflictos aplicando las siguientes normas: ▫ Entre desplazar y reducir, elige desplazar. ▫ Entre dos reducciones distintas, elige la correspondiente a la regla que aparezca en primer lugar.