Sei sulla pagina 1di 19

Lenguajes y Compiladores FISI 2019-II

GUIA I
ESPECIFICACION DE UN LENGUAJE

Si el error es corregido cada vez que es


reconocido como tal entonces, el camino del error,
es el camino de la verdad

Hans Reichenbach

Alan Mathison Turing (1912-1954)

En 1935, el matemático y lógico ingles Alan Mathison


Turing (1912-1954) se interesó en el problema de Hilberrt,
que preguntaba si podría haber un método general aplicable
a cualquier enunciado para determinar si este era
verdadero. El enfoque de Turing para la solución de este
problema lo llevo a
desarrollar lo que ahora se conoce
como la maquina de Turing. Durante la segunda Guerra
Mundial, Turing trabajo en la oficina para asuntos externos
de Bletchley Park, donde hizo un amplio uso del
criptoanálisis de los mensajes nazis. Sus esfuerzos
produjeron una maquina descifradora mecánica, Enigma,
elemento muy importante que contribuyo a la caída del
Tercer Reich.

Objetivos de aprendizaje

Especificar un lenguaje de formal de programacion

Especificar la sintaxis y gramatica de un lenguaje

Augusto Cortez Vásquez Pag.1/19


Lenguajes y Compiladores FISI 2019-II

Introducción
Sistema de signos que utiliza una comunidad para comunicarse oralmente o por
escrito. También se considera, a la capacidad propia del ser humano para expresar
pensamientos y sentimientos por medio de la palabra.
Un lenguaje de programación de alto nivel define una abstracción de programación.
el programador expresa un algoritmo usando un lenguaje de programación, y el
compilador debe traducir el programa escrito en un lenguaje destino. Es más fácil
programar en un lenguaje de alto nivel, sin embargo son menos eficientes, es decir
los programas destinos se ejecutan con mayor lentitud, debido a que requieren un
proceso de traducción denominado compilación.

LENGUAJES

Un lenguaje es un sistema de comunicación estructurado para el que existe un


contexto de uso y ciertos principios combinatorios formales. Existen contextos tanto
naturales como artificiales.
Desde un punto de vista más amplio, el lenguaje indica una característica común a los
humanos y a otros animales (animales no simbolicos) para expresar sus experiencias y
comunicarlas a otros mediante el uso de símbolos, señales y sonidos registrados por
los órganos de los sentidos. Los seres humanos desarrollan un lenguaje complejo que se
expresa con secuencias sonoras y signos gráficos. Por su parte, los animales desarrollan
una comunicación a través de signos sonoros, olfativos y corporales que en muchos
casos distan de ser sencillos.

 El lenguaje humano se basa en la capacidad de los seres humanos para comunicarse


por medio de signos linguisticos (usualmente secuencias sonoras, pero también
gestos y señas, así como signos graficos). Principalmente, lo hacemos utilizando
el signo linguisticos. Aun así, hay diversos tipos de lenguaje. En cuanto a su
desarrollo, el lenguaje humano puede estudiarse desde dos puntos de vista
complementarios: la ontogenia y la filogenia. La primera analiza el proceso por el
cual el ser humano adquiere el lenguaje, mientras que la segunda se encarga de
estudiar la evolución histórica de una lengua.2
 El lenguaje animal se basa en el uso de señales visuales, sonoras y olfativas, a modo
de signos, para señalar a un referente o un significado diferente de dichas señales.
Primates y otras especies construyen proposiciones simples (sustantivo, verbo y
adjetivo).3 Dentro del lenguaje animal están los gritos de alarma, el lenguaje de las
abejas, etc.
 Los lenguajes formales son construcciones artificiales humanas que se usan
en matemática y otras disciplinas formales, incluyendo lenguajes de programación.
Estas construcciones tienen estructuras internas que comparten con el lenguaje
humano natural, por lo que pueden ser en parte analizados con los mismos
conceptos que éste.

Augusto Cortez Vásquez Pag.2/19


Lenguajes y Compiladores FISI 2019-II

TIPOS DE LENGUAJES

Lenguajes naturales.-

- Se caracterizan porque están cambiando constantemente. Aparecen


construcciones que luego integraran al conjunto del lenguaje
- Las reglas se definen o se ajustan después de definir el lenguaje.
- Son más rigurosos pues están definidos por reglas gramaticales
preestablecidas.

Ejemplo 1
Español, inglés, lenguajes de señas

Ejemplo 2 Lenguaje de señas

Lenguajes formales. -
- Se caracteriza porque el lenguaje se define estrictamente por reglas
gramaticales preestablecidas que no pueden cambiar posteriormente.

Ejemplo 3
Lenguajes de programación (Java, C#, C++ etc.)
Lenguajes matemáticos
Calculo proposicional

Cálculo de predicados

Augusto Cortez Vásquez Pag.3/19


Lenguajes y Compiladores FISI 2019-II

Lenguaje de programación
Aunque es probable que poca gente se dedicara a diseñar un lenguaje de
programación y menos aún a construir su compilador, existen poderosas
razones que motiven a los alumnos a estudiar un curso de esta naturaleza,
puesto que muchas de las ideas y técnicas que se estudian en la teoría de
lenguajes pueden aplicarse a áreas afines como editores de textos, o programas
de reconocimiento de patrones. Se presentan a continuación algunas de estas
razones:

Razones para estudiar los lenguajes de programación

1 Mejorar la habilidad para desarrollar algoritmos eficaces.

2 Mejorar el uso del lenguaje de programación disponible

3 Hacer posible una mejor elección del lenguaje de programación a


utilizar

4 Facilitar el diseño de un nuevo lenguaje

5 Acrecentar el propio vocabulario con construcciones útiles sobre


programación

6 Facilitar el aprendizaje de un nuevo lenguaje

Atributos de un buen lenguaje

1 Claridad sencillez y unidad

2 Naturalidad para la aplicación

3 Apoyo a la abstracción

4 Facilidad para verificar programas


La sencillez de la estructura semántica y sintáctica es un aspecto

5 Entorno de programación

6 Costo de Uso

Augusto Cortez Vásquez Pag.4/19


Lenguajes y Compiladores FISI 2019-II

Consideramos los siguientes tipos de costo


Costo de ejecución del programa
Costo de creación, prueba y uso de programa
Costo de traducción
Costo de mantenimiento de programas

Lenguaje de alto nivel

Beneficios de los lenguajes de programación

- Usuario y programas nuevos


- Transportabilidad
- Legibilidad
Recursos de un lenguaje de programación

- Modelo de computación
El lenguaje debe mostrar las capacidades de la maquina que la sustenta o
proporcionar una aproximación totalmente diferente a la computación de la
maquina. Por ejemplo: los lenguajes concurrentes pueden hacer parecer que
un programa se esta ejecutando en varias maquinas, aun cuando solo exista
una.

- Tipo de datos y operaciones


Una máquina provee elementos básicos como caracteres y números reales o
enteros. Un lenguaje debe proporcionar constructores para estructurar los
valores básicos que posee la maquina. El lenguaje proporciona mecanismos
para definir valores estructurados como arreglos, registros y listas. Cada tipo
de dato estructurado necesita operaciones para manipular sus componentes.

LENGUAJE DE

MAQUINA PROGRAMA

Augusto Cortez Vásquez Pag.5/19


Lenguajes y Compiladores FISI 2019-II

PROGRAMACION

- Recursos de abstracción
A partir de los datos básicos y los definidos por el usuario a través de los
constructores, pueden definirse funciones o procedimientos que simulan
acciones o funciones las cuales pueden ser referenciados libremente como
cualquier operación, por ejemplo pueden definirse la función RAIZ(N) o
POTENCIA(a,b) . También pueden definirse tipos de datos abstractos
como pilas y colas y luego definir variables de estos tipos tan igual como
se emplean los arreglos o las listas.

- Verificación y validación
Cuando se compila un programa pueden detectarse errores léxicos o
sintácticos antes que se ejecute el programa. Puede detectarse por ejemplo
si se quiere sumar una variable tipo carácter con un vector.
- Descripción axiomática de un lenguaje

Elementos básicos:

Diccionario.- que indica el significado de cada palabra del lenguaje,


Conjunto de reglas, para describir las sentencias validas.

A partir de elementos básicos es posible construir proposiciones o frases teniendo


en cuenta las reglas de formación (gramática del lenguaje)

Formas de describir un lenguaje

Un lenguaje es un conjunto de frases definidas por un conjunto de reglas...


Estas reglas se pueden expresar de muchas formas. Cuando esto ocurre se dice
que el lenguaje esta descrito por comprensión. Otra forma de describir el
lenguaje es describiendo uno a uno las frases que la componen, en este caso
estamos frente a una definición del lenguaje por extensión. En el contexto de
definición por comprensión, existen varias formas de describir un lenguaje:
descripción algebraica, por expresión regular, en forma recursiva etc.

Descripción por enumeración

Enumerando cada uno de sus elementos, sobre todo cuando el lenguaje es


finito, en otro caso no se podría.

L= {a, aa, aaa ...}

Augusto Cortez Vásquez Pag.6/19


Lenguajes y Compiladores FISI 2019-II

Descripción algebraica

Algunos lenguajes sobretodo los infinitos pueden describirse mediante una


propiedad de sus elementos.
L ={anb / n >0 } = {ab, aab, aaab, ...}

Descripción por propiedades

Se utiliza una propiedad para describir L


L = { w / w  VT* y w  < 3 }

Descripción gramatical
Sea G una gramática,

Una gramática se define formalmente de siguiente forma:

G =( VT , VN, P, S) donde :

VT : conjunto finito de símbolos terminales del lenguaje


VN : conjunto finito de símbolos no terminales
P : conjunto finito de reglas de producción
S : Símbolo distinguido o axioma inicial a partir del cual se reconocerán las
secuencias de L aplicando sucesivamente las reglas de producción.

definimos el lenguaje definido por una gramática y la denotamos L(G) de la


siguiente forma:
L(G) ={w / S *
w, y además w  Vt* } ,

L contiene secuencias de terminales que son generadas a partir del axioma de G.

Ejemplo 4

L = {amb , m  0} descripción algebraica

Podemos hallar G tal que L=L(G)


G (VN, VT, S, P) donde
S b
VN = {S} S aS ab
VT ={a, b} S aS aaS aab
P:{ S aS / b} S aS aaS aaaS aaab

luego b,ab, aab, aaab  L(G).

Descripción mediante expresiones regulares

Augusto Cortez Vásquez Pag.7/19


Lenguajes y Compiladores FISI 2019-II

Si r es expresión regular, el conjunto de secuencias generadas por r es


denominado Lenguaje regular y lo denotamos L(r).
Para r = a*b , se tiene L(r) = {b, ab, aab, aaab,...}
Esto denota el conjunto de frases de cero o mas letras a, que terminan con una
b.
r = a b* , se tiene L(r) = {a, ab, abb, abbb,...}
Esto denota el conjunto de frases de cero o mas letras b, que comienzan con
una a.

Descripción mediante un autómata

Si M es un autómata finito, al conjunto de secuencias que reconoce M lo denotamos


como L(M).

Gramática y Máquinas

Para cada clase de gramática existe una dualidad entre esa clase de gramática y una clase de
maquina abstracta

1. Un autómata de estados finitos, se compone de una representación grafica de estados finitos y


una memoria secuencial de un solo sentido. Para cada operación., el autómata lee el símbolo
siguiente de la memoria y entra a un nuevo estado.
2. Un autómata de desplazamiento descendente agrega una pila al autómata finito. Para cada
operación, el autómata lee el siguiente símbolo de la memoria de la pila y el símbolo de la pila,
escribe un nuevo símbolo en la pila y entra a un nuevo estado.
3. Un autómata linealmente acotado, es similar al autómata finito, con el agregado de que puede
leer y escribir en la cinta para cada símbolo de entrada y puede mover la cinta en un sentido u
otro.
4. Una maquina de Turing, es similar a un autómata linealmente acotado, excepto que la cinta es
infinita en ambos sentidos.

El autómata linealmente acotado (LBA- linear-bounded automaton) como una maquina de turing
que puede usar solo la cantidad de cinta que contiene datos de entrada. Por tanto, su almacenamiento
crece con el tamaño de la entrada y puede reconocer cadenas más complejas. Sin embargo su
capacidad de almacenamiento de datos es limitada en comparación con la maquina de turing, puesto
que no puede extender su memoria indefinidamente.

Lenguajes definidos por una gramática


*
Si G es una gramática, genera un lenguaje L(G) VT
w , y además w  VT } ,
* *
L ={w / S

es decir son todas las secuencias que están en la cerradura de VT, que pueden obtenerse
a partir del axioma de la gramática aplicando las reglas de producción.
Si a1, a2, ...an w  (VN U VT)*
tal que a1 a2, a2 a3, ...an-1 an
entonces decimos que a1 * an

Augusto Cortez Vásquez Pag.8/19


Lenguajes y Compiladores FISI 2019-II

Formas sentenciales.
Si ai (VN U VT) y ai  VT Entonces, decimos que ai es forma sentencial.
* *

Si ai  VT Entonces, decimos que ai es una sentencia


*

Diagramas sintácticos de gramáticas


Aunque no existe una regla rígida para la construcción de los diagramas de
transiciones se recomienda un diagrama de conway por cada regla de producción. El
diagrama de conway muestra la sintaxis del lenguaje, y para una mejor lectura de los
diagramas debe haber una congruencia entre cada diagrama de conway y cada regla de
producción

La regla de producción F (E) / V/ C


Se puede representar

FACTOR
( EXPRESION )

VARIABLE

CONSTANTE

La regla de producción E D D*
Se puede representar

ENTERO DIGITO

La regla de producción T F ((* / div ) F ) *


Se puede representar

ENTERO FACTOR

div

Ejemplo 5

Augusto Cortez Vásquez Pag.9/19


Lenguajes y Compiladores FISI 2019-II

Supongamos L ={w talque w es una proposición de asignación}

G= P Id = E
E E Op E / Id / CN
OP + / - / */ div
CN CNE / CNR
CNE D / D CNE
CNR CNE . CNE
D 0/1/2/3/4/5/6/7/8/9

VT={Id,+,-,*,div, .}

P Id = E

Id y el operador = son terminales


E es no terminal (cuadrado), por tanto deberá construirse un diagrama para E

CNE
CN

CNE DIGITO

DIGITO CNE
CNR
CNE . CNE

DIGITO

0 1 2 3 4 5 6 7 8 9

Ejemplo 6

Augusto Cortez Vásquez Pag.10/19


Lenguajes y Compiladores FISI 2019-II

Consideremos la gramática de lenguaje JAVA


P public class N_Prog { L_Decl L_Fun Fun_Princ}

N_Prog Id
L_Decl Decl; / L_Decl ; Decl
Decl TIPO L_Id;
TIPO int / char / String
L_Id id / L_Id ,Id
L_Fun Fun / L_Fun ; Fun
Fun public static TIPO N_Fun(){ Cuerpo_Fun}
Fun_Princ public static void main(String arg[ ] ){L_Decl L_Prop }
L_Prop Prop / L_Prop ; Prop
Prop Asig / Lectura / Escritura
Cuerpo_Fun L_Decl L_Prop
Asig Id = Expr
Expr Termino /Termino * Factor /Termino DIV Factor
Factor Id / entero / ( Expr)
Escritura System.out.println( L_Id)

Se deja como ejercicio construir los demas diagramas de CONWAY

Ejemplo 7
G (VN, VT, S, P)
donde VN = {S, A, B} , VT={a,b,c,d}

P: { S AB
A aAb/ab
B cBd/cd
}

S AB abcd
S AB aAbB aabbcd

en general : L(G) = {ambmcndn ,donde m,n  1 }

Ejemplo 8
La siguiente gramática genera todas las expresiones booleanas

G22 (VN, VT, EXPR, P)

Augusto Cortez Vásquez Pag.11/19


Lenguajes y Compiladores FISI 2019-II

donde VN ={ EXPR, TERM, FACT}

VT ={verdad, falso, y, o, no, (, )}


P: { EXPR EXPR o TERM / TERM
TERM TERM y FACT / FACT
FACT no FACT / (EXPR) / verdad / falso
}

Árboles sintácticos y derivaciones


Anteriormente habíamos definido el lenguaje definido por la gramática de la siguiente
forma

L ={w / S *
w , y además w  VT* } ,

es decir son todas las secuencias que están en la cerradura de V T, que pueden obtenerse a partir del
axioma de la gramática aplicando las reglas de producción.

w  L(G) si y solo si existe un árbol de derivación para w

Para cada frase reconocida por la gramática G, podemos construir un árbol de derivación, donde :

1 Todo nodo tiene una etiqueta E  VTU VN


2 La etiqueta de la raíz es S
3 La etiqueta E de un nodo n que no es hoja debe ser el lado izquierdo de alguna
producción p
4 Si los nodos n1, n2, ... nk son descendientes directos del nodo n(de izquierda a
derecha), con etiquetas A1 ,A2 ,A3.. ,Ak
entonces existe una producción:
A A1A2A3.. Ak  P
Podemos afirmar que w  L(G) si existe un árbol de derivación para w.

Ejemplo 9

Consideremos la siguiente gramática

G (VN, VT, S, P) donde


VN = {S,NOMBRE,VERBO,ADJ, NOMB-SING, VERBO-SING,ADVERBIO}
VT {El, La, Los, Las, Pequeño, traviesa, niño, niña, estudia, corre, juega, salta}

P: { S NOMBRE VERBO
NOMBRE ADJ NOMBRE
NOMBRE ADJ NOMB-SING
VERBO VERB-SING ADVERBIO
ADJ El /La /Los /Las

Augusto Cortez Vásquez Pag.12/19


Lenguajes y Compiladores FISI 2019-II

ADJ Pequeño /traviesa


NOMB-SING niño / niña
VERB-SING estudia / corre / juega /salta
ADVERVIO rápidamente / despacio / mucho
}

NOMBRE VERBO

ADJ NOMBRE VERB-SING ADVERBIO

El ADJ NOMB-SING corre rápidamente

Pequeño niño

luego w='El Pequeño niño corre rápidamente'  L(G)

DERIVACIÓN POR LA EXTREMA IZQUIERDA Y POR LA EXTREMA


DERECHA

Derivación es extrema izquierda.


Si en cada paso de una derivación se aplica una producción a la variable no terminal que se
encuentra mas a la izquierda.

Derivación es extrema derecha.


Si en cada paso de una derivación se aplica una producción a la variable no Terminal que
se encuentra mas a la derecha.

Si w  L(G) para G GLC entonces existe un árbol de análisis gramatical o sintáctico para
w.
Este árbol tiene una derivación por la izquierda y otro árbol de derivación por la derecha.
W puede tener varias derivaciones por la izquierda y por la derecha.
Existe mas de un árbol de derivación para w,
Para cada árbol de derivación solo puede obtenerse una derivación extrema izquierda y una
derivación extrema derecha.

Augusto Cortez Vásquez Pag.13/19


Lenguajes y Compiladores FISI 2019-II

Ejemplo 10
Sea la gramática libre del contexto
G34 (VN, VT, S, P) donde VN = {S, A, B} VT = {a, b}
P: { 1 S aB/bA
3 A a/aS/ bAA
6 B b/bS/ aBB
}
S aB ab
S aB abS abbA abba
S aB abS abaB abab
S bA baS baaB baab

en general L(G34) = {w  {a,b}* , donde #as = #bs}

Ejemplo 11

G (VN, VT, S, P)
donde VN = {S, A, B} , VT={a, b}
P: { 1 S aBa / aSa,
2 B bb/bBb
}

L(G) = {anbman / n > 1 , |m| par }


S
S aBa abba

a B a

bb
S
S aSa aaBaa

aabbaa a S a

a B a

Augusto Cortez Vásquez Pag.14/19


Lenguajes y Compiladores FISI 2019-II

bb

Especificación de un lenguaje
Consideremos un lenguaje hipotético L

Ejemplo 12
Ejemplos de programas en L
Fun Verifica()
Fun Verifica()
Fun Hallar_Area() Inicio
Inicio
Inicio Real num, suma
Real num
Entero base, altura, area Entero N
Leer num
Leer base Leer N
SI(num mod 2 = 0)
Para i desde 1 hasta N
Leer altura Escribir num + “es par”
area = base * altura/2 Leer num
SINO
Suma = suma + num
Escribir área Escribir num + “es par”
Fin FinPara
FINSI
Escribir Suma
Fin
Fin

Elementos del lenguaje

1 Conjunto de caracteres validos


Letras: A,B..Z, a, b,..z
Digitos 0 ,1, …9
Caracteres especiales : #, +, -, /
2 Conjunto de componentes léxicos
a. Identificadores
b. Constantes numéricas
c. Operadores aritméticos
d. Operadores lógicos

3 Datos
a. Enteros
b. Reales
c. Caracteres
d. Cadenas

4 Sentencias
a. Asignación

Augusto Cortez Vásquez Pag.15/19


Lenguajes y Compiladores FISI 2019-II

b. Entrada
c. Salida
d. Condicional
e. Iterativa

5 Sentencias
a. Asignación
b. Entrada

6 Sintaxis

La sintaxis consiste en una abstracción de la forma de un


programa en lenguaje L. Tomado como referencia ejemplo 12
construimos la sintaxis

Sea P un programa en L
La sintaxis de P:

Programa

P: Fun Id()
Inicio
SD
SS
Fin
Un programa consta de una secuencia de declaraciones SD, seguida de una secuencia de
sentencias SS

Diagrama de Conwai

Fun Id ( ) Inicio SD SS Fin

Augusto Cortez Vásquez Pag.16/19


Lenguajes y Compiladores FISI 2019-II

Sección declaración

SD: D. / D. SD

Un sección de declaración SD consta de una declaración D seguida de un punto o una


declaración D seguida de sección declaración SD

Diagrama de Conwai

D .

D . SD

SD: D. / D. SD

EJERCICIOS PROPUESTOS
CUESTIONES BREVES

I Describa formalmente
a. Algoritmo
b) Gramática
c) Lenguaje definido por la gramática
d) Sintaxis
e) Interprete
f) Compilador
g) Expresión regular

II Descríbase en forma recursiva el siguiente lenguaje


a) Los números enteros múltiplos de 6
b) La secuencia 5,7, 17, 31

Augusto Cortez Vásquez Pag.17/19


Lenguajes y Compiladores FISI 2019-II

III Sea L = {w / w es una expresión aritmética}

Especifique sus elementos ( ver ejemplo 12)

IV construya la expresión regular para reconocer los lenguajes


a) Secuencia de ceros y unos que inician con uno y nunca hay dos
ceros consecutivos
b) Números reales con/sin signo (ejem.32.54, -1.56, +12.58)

V Construya el árbol para verificar si las frases aabbcccddd , aabbcd


pertenecen al lenguaje definido por la gramática del ejemplo 7

REFERENCIAS BIBLIOGRAFICAS

[1] [AHO 1990] Aho A.,Sethi,Ullman ”Compiladores, principios, técnicas y


herramientas”; Addison-Wesley1990, Wilmington-Delaware EUA.

[2] [BECK 1988] BBECK Leland “Software de Sistemas”


Addisson Wesley iberoamericana Wilmington Delaware 1988

[3] [BROOKSHEAR 1993] BROOKSHEAR J. Glean


Teoría de la computación
Addisson Wesley iberoamericana Wilmington Delaware 1993

[4] [CORTEZ 1999] Cortez Vásquez, Augusto. ” Matemáticas Discretas”, UNMSM


EAPIS 1999.

[5] [CORTEZ 2013] Cortez Vásquez, Augusto. ” Lenguajes y traductores”, Editorial


UCSS.

[6] [HOPCROFT 1993] Hopcroft Jhon, Ullman Jeffrey


Introducción a la teoría de autómatas Edit. CECSA 1993

[7] [PEñA 1998] PEñA MARI, Ricardo


Diseño de programas, Formalismo y abstracción
Prentice Hall Madrid 1998

[8] [SETHI 1992] SETHI, Ravi ”LENGUAJES DE PROGRAMACION, Conceptos y


Constructores”; Addison-Wesley, 1992 .

[9] [TEUFEL 1990] Teufel-Smithd-Teufel. ”Compiladores, Conceptos fundamentales”;


Addison-Wesley, 1990 .

Augusto Cortez Vásquez Pag.18/19


Lenguajes y Compiladores FISI 2019-II

Augusto Cortez Vásquez Pag.19/19

Potrebbero piacerti anche