Академический Документы
Профессиональный Документы
Культура Документы
GUIA I
ESPECIFICACION DE UN LENGUAJE
Hans Reichenbach
Objetivos de aprendizaje
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
TIPOS DE LENGUAJES
Lenguajes naturales.-
Ejemplo 1
Español, inglés, lenguajes 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
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:
3 Apoyo a la abstracción
5 Entorno de programación
6 Costo de Uso
- 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.
LENGUAJE DE
MAQUINA PROGRAMA
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:
Descripción algebraica
Descripción gramatical
Sea G una gramática,
G =( VT , VN, P, S) donde :
Ejemplo 4
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
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.
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
Formas sentenciales.
Si ai (VN U VT) y ai VT Entonces, decimos que ai es forma sentencial.
* *
FACTOR
( EXPRESION )
VARIABLE
CONSTANTE
La regla de producción E D D*
Se puede representar
ENTERO DIGITO
ENTERO FACTOR
div
Ejemplo 5
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
CNE
CN
CNE DIGITO
DIGITO CNE
CNR
CNE . CNE
DIGITO
0 1 2 3 4 5 6 7 8 9
Ejemplo 6
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)
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
Ejemplo 8
La siguiente gramática genera todas las expresiones booleanas
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.
Para cada frase reconocida por la gramática G, podemos construir un árbol de derivación, donde :
Ejemplo 9
P: { S NOMBRE VERBO
NOMBRE ADJ NOMBRE
NOMBRE ADJ NOMB-SING
VERBO VERB-SING ADVERBIO
ADJ El /La /Los /Las
NOMBRE VERBO
Pequeño niño
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.
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
Ejemplo 11
G (VN, VT, S, P)
donde VN = {S, A, B} , VT={a, b}
P: { 1 S aBa / aSa,
2 B bb/bBb
}
a B a
bb
S
S aSa aaBaa
aabbaa a S a
a B a
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
3 Datos
a. Enteros
b. Reales
c. Caracteres
d. Cadenas
4 Sentencias
a. Asignación
b. Entrada
c. Salida
d. Condicional
e. Iterativa
…
5 Sentencias
a. Asignación
b. Entrada
6 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
Sección declaración
SD: D. / D. 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
REFERENCIAS BIBLIOGRAFICAS