1. PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR SEDE
IBARRA
NOMBRE: MAURICIO PINTO
FECHA: 17/06/2020
Herramientas para la construcción de procesadores de lenguaje
A continuación,se muestranalgunasde las herramientas disponibles que pueden utilizarse
para la realizaciónde laPrácticade Procesadoresde Lenguajes.Estasherramientasfuncionan
bajo Windows, aunque se puede utilizar, si se desea, cualquier otra herramienta.
Aplicación de los lenguajes
Los lenguajesde programación hoy en día tienen una infinidad de aplicaciones, básicamente
cualquierobjetoelectrónicotieneciertogradode programación.Algunos de los más comunes
son C++ y JAVA, también existe HTML, HTTP, XML, XAML y C#, este último actualmente es el
más utilizado en todos los dispositivos y redes basados en MICROSOFT (Xbox 350, Windows
Mobile, Windows Phone, Windows Cloud, Zune, etc.).
Ya que loslenguajesde programaciónsoninformáticamente unpuente entre el Hardware y el
Software estos permiten que las computadoras puedan establecer conexión con un celular,
una cámara o una consola portátil de videojuego.
Otra de las aplicaciones de los lenguajes de programación son las matemáticas como las
calculadoras, cajas registradoras, cajeros automáticos, por solo mencionar algunos ejemplos
sencillos.
Reseña Histórica
Los primeroslenguajesde programaciónsurgieronde la idea de Charles Babagge, la cual se le
ocurrióa este hombre amediadosdel sigloXIX.Era un profesor matemático de la universidad
de Cambridge e inventoringlés,que al principio del siglo XIX predijo muchas de las teorías en
que se basan losactualesordenadores.Consistíaen loque él denominabalamaquinaanalítica,
2. peroque por motivostécnicosnopudoconstruirse hasta mediados delsigloXX.Conélcolaboro
AdaLovedby, lacualesconsideradacomola primera programadora de la historia, pues realizo
programas para aquélla supuesta máquina de Babagge, en tarjetas perforadas. Como la
maquinanollegonuncaa construirse,losprogramasde Ada,lógicamente, tampoco llegaron a
ejecutarse,perosi suponenunpuntode partidade laprogramación,sobre todosi observamos
que encuantose empezóaprogramar, losprogramadores utilizaron lastécnicasdiseñadas por
Charles Babagge, y Ada, que consistían entre otras, en la programación mediante tarjetas
perforadas. A pesarde ello, Adahapermanecido comolaprimeraprogramadora de la historia.
Se dice por tanto que estos dos genios de antaño, se adelantaron un siglo a su época, lo cual
describe la inteligencia de la que se hallaban dotados.
En 1823 el gobierno británico lo apoyo para crear el proyecto de una máquina de diferencias,
un dispositivomecánicoparaefectuarsumasrepetidas.PeroBabagge se dedicó al proyectode
la máquina analítica, abandonando la máquina de diferencias, que se pudiera programar con
tarjetas perforadas, gracias a la creación de Charles Jacquard (francés). Este hombre era un
fabricante de tejidosyhabíacreado un telar que podía reproducir automáticamente patrones
de tejidos,leyendo la información codificada en patrones de agujeros perforados en tarjetas
de papel rígido. Entonces Babagge intento crear la máquina que se pudiera programar con
tarjetas perforadas para efectuar cualquier cálculo con una precisión de 20 dígitos. Pero la
tecnología de la época no bastaba para hacer realidad sus ideas. Si bien las ideas de Babagge
no llegaron a materializarse de forma definitiva, su contribución es decisiva, ya que los
ordenadores actuales responden a un esquema análogo al de la máquina analítica. En su
diseño, la máquina constaba de cinco unidades básicas:
1. Unidad de entrada, para introducir datos e instrucciones;
2. Memoria, donde se almacenaban datosyresultados intermedios;
3. Unidadde control, pararegular lasecuenciade ejecución de lasoperaciones;
4. UnidadAritmético-Lógica, que efectúa las operaciones;
5. Unidadde salida,encargadade comunicaral exteriorlos resultados. Charles Babbage,
conocido como el "padre de la informática" no pudo completar en aquella época la
construccióndel computadorque habíasoñado,dado que faltabaalgofundamental:la
electrónica.El caminoseñaladode Babbage,no fue nunca abandonado y siguiéndolo,
se construyeron los primeros computadores.
Cuando surgió el primer ordenador, el famoso ENIAC (Electronic Numerical Integrator And
Calculator), su programación se basaba en componentes físicos, o sea, que se programaba,
cambiandodirectamenteel Hardware de lamáquina,exactamente loque sé hacia era cambiar
cables de sitio para conseguir así la programación de lamáquina.
La entrada y salida de datos se realizaba mediante tarjetas perforadas.
Diseño y construcción de un compilador
En el procesode construcciónde compiladoresse integranmuchosconceptosdiferentesde las
Ciencias de la Computación:
Algoritmos de búsqueda.
Árboles, Hashing.
Programación modular.
3. Lenguaje Assembly.
Análisis: Se trata de la comprobación de la corrección del programa fuente, e incluye las
fasescorrespondientesal Análisisléxico(queconsiste en la descomposición del programa
fuente en componentes léxicos), Análisis sintáctico (agrupación de los componentes
léxicos en frases gramaticales) y Análisis
semántico(comprobaciónde lavalidezsemánticade lassentenciasaceptadasenlafase de
Análisis Sintáctico).
Síntesis:Suobjetivoesla generación de la salida expresada en el lenguaje objeto y suele
estar formado por una o varias combinaciones de fases de Generación de Código
(normalmente se trata de código intermedio o de código objeto) y de Optimización de
Código (en las que se busca obtener un código lo más eficiente posible).
Que es Flex y Bison
Son dosherramientasútiles para crear programas que reaccionen a una entrada de datos con
una estructura y un lenguaje predeterminado, como, por ejemplo, podemos crear
compiladores, intérpretes y analizadores de línea de comando.
Flex:El Flex definelas reglasde reconocimiento de símbolos (Tokens) a partir de expresiones
regulares. Cuando un Token es reconocido por uno de estos patrones de agrupamiento se le
define una acción, por lo general esta acción es devolver el Tipo y el valor (lexema).
El Flex cuando se utiliza combinado con el Bison, utiliza las definiciones de los Tokens
realizadas en el Bison para la comunicación entre ellos, Bison: GNU bison es un programa
generador de analizadores sintácticos de propósito general perteneciente al proyecto GNU
disponible para prácticamente todos los sistemas operativos, se usa normalmente
acompañado de flex aunque los analizadores léxicos se pueden también obtener de otras
formas.
Bison convierte la descripción formal de un lenguaje, escrita como una gramática libre de
contextoLALR, enunprogramaenC, C++, oJava que realizaanálisissintáctico. Esutilizado para
crear analizadores para muchos lenguajes, desde simples calculadoras hasta lenguajes
complejos. Para utilizar Bison, es necesaria experiencia con la sintaxis usada para describir
gramáticas.
Como se instala Flex y Bison
1. Descarga el software disponible en el sitio de la cátedra.
2. Instalar el software en la unidad C: (para explicar a partir del punto 4 se tendrá como
hipótesis de que flex y bison han sido instalados en la ruta: C:GnuWin32 donde contiene
una subcarpeta llamada bin donde se encuentran los programas respectivos)
3. Flex ybisonsonaplicacionesde consola,porloque se deberáentrar al Símbolo del sistema
y tipearlíneasde comandopara ejecutarFlex.Unaalternativaescrearun archivode proceso
por lotes(*.bat) que contengalaslíneasde comandopara la ejecución de Flex y Bison y/o la
compilación del archivo generado.
4. Si deseas que flex y bison se integren al conjunto de variables del entorno (esto te va a
permitirllamaraflex/bisondesdecualquierubicación en la línea de comandos) debes hacer
4. lo siguiente:
Clic derecho en “Mi PC”.
Selecciona “Propiedades”
Clic en la pestaña “Opciones Avanzadas”
Presiona el botón “Variables de entorno”
En la ventanade variablesde entorno,ubicarse enlasección“Variablesdel sistema”
luego haz clic en PATH y luego en el botón “Modificar” (si no está hacer clic en
“Nueva”yagregarPATH) • En lanuevaventana, escribirlarutacompletaal directorio
“bin” de la aplicación flex/bison. Si existe otro valor, separarlos con comas.
Aceptar los cambios y luego reiniciar el sistema operativo.
5. Si deseasinstalar un compilador de C como MinGwin, deberás integrar la ruta de acceso al
compiladoralas variablesde entornoparafacilitarlallamadaal programa. Por ejemplo si se
instalóMingWinen“C:Mingw”ydentrode lacarpeta “bin”se encuentra“gcc.exe”que esel
ejecutable, entonces de deberá agregar (análogo a los pasos anteriores) lo siguiente:
6. Cuandotengaslistopodrásllamar a flex/bison desde el símbolo del sistema sin necesidad
de ubicarte en la carpeta donde ha sido instalado flex/bison.
Patrones enflex
Los patrones en la entrada se escriben utilizando un conjunto extendido de expresiones
regulares y usando como alfabeto cualquier carácter ASCII. Cualquier símbolo excepto el
espacioenblanco, tabulador,cambiode líneayloscaracteres especialesse escriben tal cual en
las expresiones regulares (patrones) de Flex. Los caracteres especiales son:
“ [ ^ - ? . * + | ( ) $ / { } % < >
Algunosde lospatronesde Flex son:
x
emparejael carácter‘x’
.
cualquiercarácterexceptounalíneanueva
[xyz]
un conjuntode caracteres;eneste caso,el patrón empareja una‘x’,una‘y’,o una ‘z’
[abj-oZ]
un conjuntode caracterescon un rango;emparejauna‘a’,una ‘b’,cualquierletradesde la
‘j’hasta la ‘o’,o una‘Z’
[^A-Z]
4
IntroducciónaFlex y Bison
cualquiercaráctermenoslosque aparecenenel conjunto.En este caso, cualquiercarácter
EXCEPTO unaletramayúscula.
[^A-Zn]
cualquiercarácterEXCEPTO unaletramayúsculao una líneanueva
r*
cero o más r’s,donde r escualquierexpresiónregular
r+
una o más r’s
5. r?
cero o unar (esdecir,"unar opcional")
r{2,5}
entre dosy cinco concatenacionesde r
r{4}
exactamente 4r’s
{nombre}
la expansiónde ladefiniciónde "nombre"(vermásabajo)
"[xyz]"foo"
la cadenaliteral:[xyz]"foo
x
si x esuna ‘a’, ‘b’,‘f’,‘n’,‘r’,‘t’,o ‘v’,entonceslainterpretaciónANSI-Cde x
(porejemplo tseríaun tabulador).Enotro caso,un literal ‘x’(usadoparalaconcordancia
exactade caracteres especiales(.?)
(r)
emparejaunaR; losparéntesisse utilizanparaanularla precedencia(vermásabajo)
rs
la expresión regularrseguidaporlaexpresiónregulars;se denomina"concatenación"
r|s
bienunar o unas
r/s
una r perosólosi va seguidaporunas.
^r
una r, perosóloal comienzode unalínea
r$
una r, perosóloal final de unalínea(esdecir,justoantesde una líneanueva).Equivalente a
"r/n".
<s>r
una r, perosóloenla condiciónde arranque s(vermás adelante).
<s1,s2,s3>r
lomismo,peroencualquierade lascondicionesde arranque s1,s2, o s3
Emparejamientode entrada
Cuandoel escánergeneradoestá funcionando,este analiza su entrada buscando cadenas que
concuerdenconcualquierade suspatrones.Si encuentramásde un emparejamiento, toma el
que empareje el texto más largo. Si encuentra dos o más emparejamientos de la misma
longitud, se escoge la regla listada en primer lugar en el fichero de entrada de Flex.
Una vez que se determina el emparejamiento, el texto correspondiente al emparejamiento
(denominadoel token) estádisponible enel punterode carácterglobal yytext,ysu longituden
la variable global entera yyleng. Entonces la acción correspondiente al patrón emparejado se
ejecuta y luego la entrada restante se analiza para otro emparejamiento.
Si no se encuentraunemparejamiento, entonces se ejecuta la regla por defecto: el siguiente
carácter en la entrada se considera reconocido y se copia a la salida estándar.
Condiciones de arranque
Flex dispone de un mecanismo para activar reglas condicionalmente. Cualquier regla cuyo
6. patrón se prefije con"<sc>" únicamente estaráactiva cuando el analizador se encuentre en la
condición de arranque llamada "sc". Por ejemplo,
<STRING> [^"]* {/* se come el cuerpo de la cadena ... */
...
}
estará activa solamente cuando el analizador esté en la condición de arranque "STRING", y
<INITIAL, STRING, QUOTE>. {/* trata una secuencia de escape ... */
...
}
estaráactiva solamente cuandolacondiciónde arranque actual seao bien"INITIAL", "STRING",
o "QUOTE". Las condicionesde arranque se declaranenla(primera) secciónde definicionesde
la entrada usando líneas sin sangrar comenzando con %s seguida por una lista de nombres.
Una condición de arranque se activa utilizando la acción BEGIN. Hasta que se ejecute la
próximaacción BEGIN,las reglasconla condiciónde arranque dada estarán activas y las reglas
con otras condiciones de arranque estarán inactivas. Las reglas sin condiciones de arranque
también estarán activas.
BEGIN (0) retorna al estado original donde solo las reglas sin condiciones de arranque están
activas. Este estado también puede referirse a la condición de arranque INITIAL, así que
BEGIN(INITIAL) es equivalente a BEGIN (0). (No se requieren los paréntesis alrededor del
nombre de la condición de arranque, pero se considera de buen estilo.)
Como se compila con Flex y Bison
Luegode escribirlasespecificacionesde flexybisonrealizarlo siguiente. Si se desea invocar a
flex:
Si se desea invocar a bison (recordar que bison trabaja en conjunto con flex):
7. Para invocar a Bison en conjunción con flex realizar lo siguiente:
Para compilar los archivos generados. Flex: MinGW
Una alternativa es utilizar un compilador para windows como DevC++ o Borland C++ 4.5
Abriendoel archivolex.yy.cyluegocompilándolose generaráel ejecutable “lex.yy.exe” BISON
y FLEX en conjunción:
Ejemplo de la creación de un compilador utilizando Flex y Bison
Archivo para FLEX
?
1 %{
2 #include<stdio.h>
3 #include<conio.h>4 #include "parser.h"
%}
5 %option noyywrap
6 %option yylineno
7 letra [a-zA-Z]
8 digito [0binario [0-9]-1]
9 ignora " "|t|n 10operarit *|+|-|/ 11operlog &|$
8. 12 comparador <|>|<=|>=|==|!=
13%%{ignora}+ {;}
14"Entero" {printf("Palabra reservadapara tipo de dato
15enteron");return PRENTERO;}
16"Real" {printf("Palabra reservadapara tipo dedato 17
realn");returnPRREAL;}
18"Booleano" {printf("Palabra reservadapara tipo de dato
19booleanon");returnPRBOOLEANO;}
20"Caracter" {printf("Palabra reservadapara tipo de dato
21caractern");returnPRCARACTER;}
22"Si" {printf("Palabra reservadapara 23condicional
n");return PRSI;}
24"Sino"condicional n");return {printf("Palabrareservada para otro PRSINO;}
25"SinoSi" {printf("Palabra reservadapara definir
26condicionales secundariasn");returnPRSINOSI;}
9. 27"Entonces" {printf("Palabra reservadapara definiraccion a
28realizarn");returnPRENTONCES;}
29"FinSi" {printf("Palabra reservada finalizar
30condicionaln");returnPRFINSI;}
31"Para" {printf("Palabra reservadapara buclede tipo
32Paran");returnPRPARA;}
33"FinPara" {printf("Palabra reservadapara fin debucle de
34tipo Paran");returnPRFINPARA;}
35"Mientras" {printf("Palabra reservadapara buclede tipo
36Mientrasn");returnPRMIENTRAS;}
37"Hacer"empieza algo n");return {printf("Palabrareservada paraindicar quese
PRHACER;}
38"FinMientras" {printf("Palabra reservadafin debuclede tipo
39Mientrasn");returnPRFINMIENTRAS;}
40"FinHacerMientras" {printf("Palabra reservadapara indicar fin 41debucleHacer-
Mientrasn");return PRFINHACERMIENTRAS;} 42"Funcion" {printf("Palabra reservadapara declaracion de
43funcionesn");returnPRFUNCION;}
44"Estructura" {printf("Palabra reservadapara declaracion de
45estructurasn");returnPRESTRUCTURA;}
46"FinFuncion" {printf("Palabra reservadapara finalizar
47funcionn");returnPRFINFUNCION;}
48"Retorna" {printf("Palabra reservadapara retorno de
49funcionn");returnPRRETORNA;}
50"SinValor" {printf("Palabra reservadapara funcion sin valor
51de retornon");return PRSINVALOR;}
52"Definir"funciones n");return {printf("Palabrareservada paradefinir
PRDEFINIR;}
53"Constante" {printf("Palabra reservadapara definir
54constantesn");returnPRCONSTANTE;}
55"Entrada" {printf("Palabra reservadapara definir
56entradasn");returnPRENTRADA;}
57"Salida" {printf("Palabra reservadapara definir
58salidasn");returnPRSALIDA;}
59{letra}({letra}|{digito})* {printf("Identificadorn");return
13. 7 PRENTONCES PRFINSI PRPARAPRFINPARA PRMIENTRAS PRHACER PRFINMIENTRAS
PRFINHACERMIENTRAS
8 PRFUNCION PRFINFUNCION PRRETORNA PRSINVALOR PRESTRUCTURA MAS MENOS
9 POR ENTRE OLOG YLOG
10 PRDEFINIR PRCONSTANTE IDENT ENTERO REAL BOOLEANO CARACTER
11 COMPARADOR ASIG PCOMA DIF COMA IGUAL PTOMAIGU MEIGU PARIZ PARDE MAYOR MENOR LLIZ
LLDE PRSALIDA PRENTRADA
12 %start inicio
13 14 %%
15 inicio :
funcion16 |constante
17 | estructura;
18
19 estructura : PRESTRUCTURA IDENT LLIZ n
20 n : declaracion n21 | declaracion nn
22 nno :: estructura LLDE IDENT PCOMA o
23 | constante
24 | funcion
25 ;
26
27 constante : PRDEFINIR PRCONSTANTE e
28 e | PRREAL IDENT f: PRENTERO IDENT f
29 | PRBOOLEANO IDENT f
30 f : ASIG g31 g : ENTERO PCOMA y32 | REAL PCOMA y
| BOOLEANO PCOMA y
33 y :
constante34 |estructura
35 | funcion
36 ;
37
38 funcionj : PRENTERO k : PRFUNCION j
14. 39 | PRREAL k
40 | PRBOOLEANO k
41 | PRCARACTER k
42 | PRSINVALOR k
43 kl :: IDENT PARIZ l kl
44 kl : declaracion l
45 | ll
46 ll : PARDE sentencia m47 m : PRRETORNA IDENT p
48 p | p : PRFINFUNCION funcion
49 | PRFINFUNCION
50 ;
51
52 comparacion :IDENT COMPARADOR b
53 b | REAL: IDENT
54 | ENTERO
55 | BOOLEANO
56 ;
57
58 declaracion :PRENTERO c
59 | PRREAL c| PRBOOLEANO c
60 | PRCARACTER c
61 c : IDENT PCOMA
62 ;
63
64 asignaciona : IDENT PCOMA : IDENT ASIG a
65 | ENTERO PCOMA
66 | REAL PCOMA
67 | BOOLEANO PCOMA
68 | oparitmetica PCOMA
69 ;
70 mientras : PRMIENTRAS PARIZ x
71 x : comparacion y
72 | oplogica y
73 y : PARDE sentencia PRFINMIENTRAS
15. 74 ;
75
76 hacermientras : PRHACER sentencia PRFINHACERMIENTRAS PRMIENTRAS PARIZ cc
77 cc : comparacion PARDE
78 | oplogica PARDE
79 ;
80
81 parasentencia PRFINPARA : PRPARA PARIZ asignacion comparacion PCOMAasignacion
PARIZ
82 ;
83
84 si : PRSI PARIZ sh
85 sh : comparacion shh
| oplogica shh
86 shh : PARDE PRENTONCES sentencia h
87 h | PRSINOSI PARIZ comparacion PARDE PRENTONCES sentencia i: PRFINSI 88 i : h
89 | z90 z : PRSINO PRENTONCES sentencia PRFINSI
91 ;
92
93 sentencia : declaracion sentencia | declaracion
94 | asignacion sentencia
95 | asignacion96 | mientras sentencia 97
| mientras
98 | hacermientras sentencia | hacermientras
99 | para sentencia100 | para
101 | si sentencia
102 | si| entrada sentencia
103 | entrada
104 | salidasentencia
105 | salida
16. 106 ;
107
108salida ; : PRSALIDA ASIG LLIZ LLDE PCOMA
109
110
entrada : PRENTRADA IDENT PCOMA
111
;
112
113 oparitmetica : MAS PARIZ q
114 | POR PARIZ q| suma
115 | producto
116 q : oparitmetica PARDE r
117 suma : MAS rt 118 producto:
POR r t
119tu :: r u t
120 |
121 r : IDENT
122 | REAL
123 | ENTERO
124 ;
125
126 oplogica :OLOG PARIZ qq
127 | YLOG PARIZ qq
128 | yy
129 | oo
130qqoo :: oplogica PARDE rr OLOG rr tt
131
yy : YLOG rr tt
132
tt : rr uu
133
uu : tt
134
|
135rr ; :comparación
Realice un collage con las palabras mas importantes sobre el tema Flexy Bison.
17. Comentario
Para la compilaciónunode losmejoresejemplos por su facilidad de uso para los estudiantes
es Flex y Bison ya que permite generar analizadores léxicos, teniendo en cuenta las
expresionesregularesque existanenel código.También es importante ya que es compatible
con casi el 100% de las herramientas UNIX.