Está en la página 1de 70

LENGUAJES Y TRADUCTORES

ASPECTOS
FORMALES

Lenguajes y Gramáticas

Profesor: Carlos A. Ruiz De La Cruz Melo


correo: cruizdelacruzm@unmsm.edu.pe
CALIFICACION: silabo
Concepto Descripción Formula
Examen Parcial (EP) Examen Parcial N1 = EP
Examen Final (EF) Examen Final N2 = EF
Promedio de Practicas Calificadas y practicas en aula y
Proyecto (PC) proyectos de curso
N3 = (PC + PL) / 2
Promedio de Laboratorios (PL) Practicas de
Laboratorio

PC = (lexico + sintactico + semantico) /3

PL = (P1 + P2) /2

PROMEDIO FINAL = (N 1 + N2 + N3) /3


LENGUAJES Y TRADUCTORES

 Contenido: Parte I

 Aspetos Formales
 Arquitectura
 Análisis lexicográfico
 Análisis sintáctico
 Tabla de símbolos

 Contenido: Parte II

 Análisis sintáctico
 Análisis semántico
 Tratamiento de errores
 Generación de código
LENGUAJE

Lenguaje (Grassmann)

Consiste en un conjunto de frases finito o infinito.


Los lenguajes pueden ser especificados
enumerando de manera exhaustiva todas sus
frases. Sin embargo, para lenguajes infinitos dicha
enumeración no es posible. Cualquier instrumento
que especifique un lenguaje debe ser finita.

Lenguaje (Chombsky)

Conjunto finito o infinito de oraciones(frases), cada


una de ellas de longitud finita y construidas por la
concatenación de un conjunto finito de
elementos(vocabulario)
LENGUAJE
Lenguaje de programación (Aho, Lam, Sethi y
Ullman)

Los lenguajes de programación son


notaciones que describen los cálculos a las
personas y las maquinas

Otras definiciones

Un lenguaje de programación es una serie de


comandos que nos permiten codificar
instrucciones de manera que sean entendidas y
ejecutadas por una computadora.

 Conjunto de símbolos y reglas que permiten la


comunicación con un computador.
ESPECIFICACIÓN DE
LENGUAJE

La especificación de un lenguaje de programación


implica la definición de los siguientes elementos:

 El conjunto de símbolos (o alfabeto) que se


pueden usar para construir programas correctos.

 El conjunto de todos los programas correctos.

El significado de todos los programas correctos


LENGUAJE

Símbolo
• Es una entidad abstracta :
– Ejemplo: A, 7, $, (, etc

Alfabeto (  )
• Cualquier conjunto finito y no
vacio de elementos que
denominaremos símbolos
– Ejemplo:
b ={ 0, 1}
v ={ a, e , i , o , u }
LENGUAJE

Cadena
• Secuencia finita de símbolos del
alfabeto
- Ejemplo:
0, 1, 101, 1100 pertenecen a b

Longitud de una cadena w


• Número de símbolos que contiene
una cadena y se denota por |w|
• Ejemplo:
|1010| = 4
|aeiaa| = 5
LENGUAJE

Potencia de una cadena


• Una cadena de “i” símbolos
“a” se denota por ai
• Ejemplo:
a0 = 
a1 = a
a2 = aa
LENGUAJE
Lenguaje (* )
 Es el conjunto de todas las palabras
sobre un alfabeto.

Ejemplo:
* b ={ , 0, 1, 101, 10,..}

 El conjunto vació ∅ , y el conjunto


formado por la cadena vacía {} son
lenguajes.
¿Como los traductores
entienden programas
escritos en un lenguaje?
La respuesta es que al igual que los
lenguajes humanos, estos se rigen por una
gramática. Chomsky modifico la forma de
comprender el lenguaje en 1957 al
exponer su Gramática Generativa y que
posteriormente fue base para lo que se
conoce como gramática formal usada por
los lenguajes de las computadoras.
GRAMATICA COMO MEDIO
EXPRESIVO DE UN LENGUAJE

Si nos remontamos siglos atrás, el estudio del


lenguaje en occidente se inicia con los griegos
y desde esos tiempos hasta el siglo XX.

Los lingüistas tradicionales trataban las


lenguas de un modo comparativo pero en 1957
el lingüista Noam Chomsky nacido en
Filadelfia en 1928, expone su Gramática
Generativa a través de su obra que denomina
Estructuras Sintácticas con lo cual quiere
abandonar esta forma descriptiva a fin de
concederle a la lingüística un verdadero status
científico al exponer una forma gramatical que
expone un conjunto de reglas que hacen
posible generar o explicar todas y cada una de
las manifestaciones lingüísticas de una lengua.
DEFINICION DE
GRAMATICA

 Sistemas generativos, donde cada


string del lenguaje puede construirse
por pasos bien definidos,
especificados por las reglas de la
gramática.

 Por ejemplo en L = { an bn / n  1 }
queremos indicar que las palabras
que constituyen el lenguaje son
todas las que estan formadas por
símbolos a seguidos de símbolos b
en igual número.
DEFINICION DE
GRAMATICA

Una gramática es una maquinita


que recibe como entrada letras y
genera cadenas con estas letras
siguiendo algún tipo de regla
DEFINICION DE GRAMATICA
Una gramática G es una cuádrupla

G = ( Vn , Vt , P, S )

 Una G impone una estructura a


las frases de un lenguaje

 Es el mecanismo empleado para


establecer la estructura de un
lenguaje, es decir las sentencias
que lo forman.
DEFINICION DE GRAMATICA

G = ( Vn , Vt , P, S )

• Vt : símbolos terminales o símbolos que aparecen


en las frases del lenguaje "
• Vn : símbolos no terminales o auxiliares
• P : Conjunto finito de producciones consistente de
expresiones de la forma  donde  y  son
cadenas de símbolos, de tal modo que   (Vn U
Vt )+ y (Vn U Vt )* y cuyo significado consiste
en que  puede ser sustituido por la parte derecha
ósea .
• S : símbolo inicial que pertenece a Vn
REPRESENTACION DE
GRAMATICAS
 Para la representación de una gramática
utilizaremos la BNF. La BNF (Backus
NormalForm, Backus-Naur Form, en
homenaje a Backus, su creador y a Naur, su
continuador), es un metalenguaje muy
utilizado para definir la estructura sintáctica
de lenguajes de programación (lenguajes
formales).

 La forma de Backus-Naur fue creada para


definir la escritura sintáctica del lenguaje de
programación ALGOL60.

 Las notaciones BNF, reducen el número de


reglas necesarias. Para ello, utilizan
los siguientes metasímbolos:
NOTACION BNF

SIMBOLO SIGNIFICADO
 El esquema de la derecha desarrolla el elemento de la izquierda
| Se puede elegir únicamente uno de los elementos. Las reglas AaA y
AbB se convierten en AaA | bB
{} Los elementos que incluyen las llaves, pueden repetirse cero o más
veces, se usa también * o el +
[] Los elementos que incluyen los corchetes pueden utilizarse o no. Son
expresiones diferentes A | B+ y [A | B]+
() Sirven para agrupar los elementos que incluyen
GRAMATICA EJEMPLO

Análisis para w = a*( a + a )


G= ( Vn, Vt, E, P)
Vn={ E } E
Vt={ +, *, ( , ) , a } ____ | ___
E * E
P{E E+E | |
E E*E a (E)
E (E) ____ | ____
E a E + E
} | |
a a
GRAMATICA CON O SIN EXPRESIONES
REGULARES

Reconocimiento de un identificador:

CON EXPRESION REGULAR SIN EXPRESION REGULAR

G= ( Vn, Vt, A, P) G= ( Vn, Vt, A, P)


Vn={ A, L, D } Vn={ A, L, D, M }
Vt={ a, b, ….z, 0, 1, …,9 } Vt={ a, b, ….z , 0, 1, …,9 }

P={ P={
A  L (L / D)* AL M
L a/b/…/z ML M / DM / 
D0/1/…./9 L a/b/…/z
} D0/1/…./9
}
GRAMATICA CON O SIN EXPRESIONES
REGULARES
P={
P={
AL M
A  L (L / D)*
ML M / DM / 
L a/b/…/z
L a/b/…/z
D0/1/…./9
D0/1/…./9
}
}

AL M
palabra9 pLM
paLM
palLM
palaL M
palab L M
palab r L M
A  L (L / D)* palab r a DM
palab r a 9
GRAMATICA CONFUSA

G= ( Vn, Vt, A, P) Por ejemplo el símbolo A


Vn={ A, L, D, M } se esta utilizando como Vn
Vt={ A, B,…,Z, a, b, ….z , 0, 1, …,9 } y también aparece como
Vt. De igual manera
P={ sucede con los demás Vn
AL M
ML M / DM / 
L A/B/../Z/a/b/…/z
D0/1/…./9
}
GRAMATICA CON Vn CON MAS DE UN
CARACTER

Reconocimiento de un identificador:

CON UN SOLO CARACTER CON VARIOS CARACTERES

G= ( Vn, Vt, A, P) G= ( Vn, Vt, Id, P)


Vn={ A, L, D, B } Vn={ Id , Letra, Digito, MasSimb }
Vt={ A,B,..Z, a, b, ….z , 0, 1, …,9 } Vt={ A,B,..Z, a, b, ….z , 0, 1, …,9 }

P={ P={
AL M <Id><Letra> <MasSimb>
ML M / D M /  <MasSimb>  <Letra> <MasSimb> / 
L A/B/…./Z/a/b/…/z <MasSimb>  <Digito> <MasSimb> / 
D0/1/…./9 <Letra>  A/B/…./Z/a/b/…/z
} <Digito>0/1/…./9
}
GRAMATICA CON Vt CON MAS DE UN
CARACTER

Reconocer una línea de declaración de


variables, Por ejemplo:

int dato, a , cantidad G= ( Vn, Vt, S, P)


Vn={S, Id , Letra, Digito, otro, Mas }
Vt={ A,B,..Z, a, b, ….z, int, , }

P={
<S> int <Id> <otro>
<otro> , <Id> <otro> / 
<Id><Letra> <Mas>
<Mas>  <Letra> <Mas> / 
<Mas>  <Digito> <Mas> / 
<Letra>  A/B/…./Z/a/b/…/z
<Digito>0/1/…./9
}
GRAMATICA HASTA UN NIVEL LEXICO

Reconocer una línea de declaración de


variables, Por ejemplo:

int dato, a , cantidad


Se describen las
G= ( Vn, Vt, S, P)
Vn={S, Id , Letra, Digito, Mas } palabras hasta el
Vt={ A,B,..Z, a, b, ….z, int, , } detalle,..en este
caso G describe
P={ como se forman los
<S> int <Id> <otro> identificadores
<otro> , <Id> <otro> / 
<Id><Letra> <Mas>
<Mas>  <Letra> <Mas> / 
<Mas>  <Digito> <Mas> / 
<Letra>  A/B/…./Z/a/b/…/z
<Digito>0/1/…./9
}
RECONOCIMIENTO
P={
<S> int <Id> <otro>
<otro> , <Id> <otro> / 
int ca8, b <Id><Letra> <Mas>
<Mas>  <Letra> <Mas> / 
<Mas>  <Digito> <Mas> / 
<S> <Letra>  A/B/…./Z/a/b/…/z
<Digito>0/1/…./9
int <id> <otro> }

<Letra> <Mas>
, <id> <otro>
<Letra> <Mas>
<Letra> <Mas> 
<Digito> <Mas>
b 

c a 8 
GRAMATICA HASTA UN NIVEL
SINTACTICO

Reconocer una línea de declaración de


variables, Por ejemplo:

int dato, a , cantidad

• No se describen las
G= ( Vn, Vt, S, P) palabras hasta el
Vn={S, Mas } detalle,..en este caso
Vt={ id, int, , } G describe como es la
estructura de la
P={ instrucción.
<S> int id <Mas>
<Mas> , id <Mas> /  • Por ejemplo id es un
} Vt y no hay que
describirlo como se
forma.
RECONOCIMIENTO

int dato, a, cantidad


G= ( Vn, Vt, S, P)
Vn={S, Mas }
Vt={ id, int }
<S>
P={
<S> int id <Mas>
int id <Mas> <Mas> , id <Mas> / 
}
dato , id <Mas>

a , id <Mas>

cantidad 
FORMA GRAMATICAL CORRECTA
Secuencias a reconocer
L(G)={ an bm / n impar y m par}

G=(Vn, Vt, P, S)
Vn={ S, A, B} Vt={ a, b}
P={ SaAbbB abb aaaaaaabbbb
AaaA /  S S
BbbB/ 
}
aAbbB aAbbB

  aaA bbB

aaA 

aaA


FORMA GRAMATICAL NO CORRECTA

L(G)={ an bm / n impar y m par}


podemos Podemos
reconocer mal reconocer bien
G=(Vn, Vt, P, S)
Vn={ S, A, B} Vt={ a, b}
P={ SaAbbB
AaA / 
BbB/  aabbb aaabbbb
}
S S

aAbbB aAbbB

aA bB aA bB

  aA bB

 
JERARQUIA DE CHOMSKY

 En los 50’s, Chomsky dio a conocer dos


trabajos sobre los Lenguajes Naturales que,
orientados al área de los lenguajes formales,
resultaron en lo que se denomina como
"Jerarquía de Chomsky".

 Esta Jerarquía de Chomsky define una


clasificación de cuatro tipos de gramática
formales que, a su vez, generan cuatro tipos
diferentes de lenguajes formales.
TIPOS DE GRAMATICA
TIPO 3:
Gramatica regular/ racional / Kleene

Las producciones tienen la forma siguiente:

a) Lineales por la derecha

A  aB
B a
con A,B  Vn , a  Vt U {  }

Equivalen en cuanto a poder descriptivo, a


los autómatas finitos deterministas y no
deterministas
TIPOS DE GRAMATICA

TIPO 3:
Gramatica regular/ racional / Kleene

b) Lineales por la izquierda

A  Ba
B a
con A,B  Vn , a  Vt U {  }
TIPOS DE GRAMATICA

TIPO 2:
Gramática Libre del Contexto / algebraicas /
incontextuales ( G.L.C)

A  , A  Vn ,   ( Vn  Vt )*

Observación:
 Toda gramática de tipo 3 es tambien de tipo 2
 Equivale en cuanto a potencia descriptiva, al autómata
con pila o Pushdown
TIPOS DE GRAMATICA
TIPO 1:
Gramática Sensible al Contexto / Contextuales Este tipo de producciones,
implica que las sustituciones
aAb  aBb sólo pueden efectuarse en
donde cierto contexto (el símbolo 'A'
A  Vn se podrá sustituir por '
a, b  (Vn Vt)* ' B ' si y sólo si, está precedido
B  (Vn Vt)+ por ’a', y le sigue ‘b'), esto es,
son gramáticas dependientes
Definicion alternativa (sensibles) al contexto


con |  |  |  |
,   ( Vn  Vt ) +
TIPOS DE GRAMATICA
TIPO 0:
Gramática sin restriccion / Estructura de frase

Las gramáticas de tipo 0, son gramáticas sin restricciones,


es decir, no hay restricciones ni para el lado izquierdo, ni
para el lado derecho de las producciones. Su potencia es
la de una máquina de Turing, y sus reglas son del tipo:



Donde  y   (Vn Vt)*


LENGUAJE GENERADO POR
UNA GRAMATICA

• Al lenguaje L generado por una


gramática tipo X, se le conoce
como "lenguaje de tipo X".

• El lenguaje recibe el nombre del


tipo de gramática más restringida
capaz de generarlo.
LENGUAJE GENERADO POR
UNA GRAMATICA
El lenguaje formado por todas las
cadenas de longitud par sobre el
alfabeto ={a} se puede formar con las
gramáticas G :

G1
S  aSa | que es de tipo 2 y también por
G2
S aA |
A aS que es de tipo 3

Por lo tanto concluimos que el lenguaje es de tipo 3


G.L.C

• La mayor parte de los lenguajes de


programación se representan mediante
una gramática de este tipo.

• Estas gramáticas suponen una


ampliación sobre las gramáticas
regulares. Se caracterizan porque sus
reglas son de la forma:

r : Vn  ( Vn  Vt )*
G.L.C
Dada G=( Vn, Vt, P, E)
Vn={ E } Vt = { +, *, a, ( , ) }
P={ E  E+E
E  E*E
E  (E)
Ea }

La secuencia:

E E*E  E*E+E  E*E+ a  E* a + a  a*a+ a

FORMA SENTENCIAL
G.L.C
Arbol de derivación

E*E

E+E

a a a
G.L.C. AMBIGUA
Una gramática G es
ambigua si hay al menos
una cadena en L(G) que
tenga dos o mas árboles de
derivación distintos.

Ejemplo de gramática ambigua:

E  E+E | E*E | (E) | a


G.L.C. AMBIGUA
Observemos que la cadena
a*a+a puede ser generada por
dos árboles de derivación

E E

E*E E + E

E +E E*E

a a a a a a
G.L.C. AMBIGUA
Recomendación
Para algunos tipos de
analizadores sintácticos es
preferible que la gramática no
sea ambigua pues si lo fuera, no
se podría determinar de manera
exclusiva que árbol de análisis
sintáctico seleccionar para una
frase
G.L.C. AMBIGUA
Eliminar la
ambiguedad

Se elimina la ambigüedad G=(Vn, Vt, P, E)


atendiendo a la precedencia
Vn= { E, T, F }
deseada para los
Vt = { + , * , a, ( ,) }
operadores. Una gramática
equivalente a la gramática P={
anterior que no es ambigua EE+T|T
es: TT*F|F
F a|(E)
}
G.L.C. AMBIGUA
Otra forma de
ambiguedad G=(Vn, Vt, P, A)
Vn= { A, B, C, D }
Vt = { a, b, c, d}
Sucede cuando dos o mas
P={ A abBC
reglas de producción
A abcD
coinciden en un mismo Vn
A abC
izquierdo pero los lados
Bb
derechos comienzan igual.
Cc
D d }
A  αβ /αθ / αΩ
A  Vn,
α, β, θ, Ω  (Vn U Vt)
G.L.C. AMBIGUA
G=(Vn, Vt, P, A)
Vn= { A, B, C, D } Forma correcta para un
Vt = { a, b, c, d} analizador sintactico
descendente después de
P={ A abBC haberse factorizado
A abcD
A abC
Bb
Cc
D d } G=(Vn, Vt, P, A)
G=(Vn, Vt, P, A)
Vn= { A, B, C, D, K, R }
Vn= { A, B, C, D, K }
Vt = { a, b, c, d}
Vt = { a, b, c, d}
P={ A abK
P={ A abK
Este tipo de reglas de K BC /cR
K BC /cD /c
producción no es R  D /
Bb
correcto para un Bb
Cc
analizador sintáctico Cc
D d }
descendente. D d }
G.L.C. RECURSIVA
Una gramática es recursiva por la izquierda si
tiene un no terminal A tal que existe una
derivación para alguna cadena  de la forma:

A  A  ,   ( Vn  Vt ) * , A  Vn
+

• La recursión izquierda es un
problema que debe ser resuelto G=(Vn, Vt, P, E)
antes que se quiera trabajar con Vn= { E, T, F }
una gramática para construir un
analizador descendente, ya que Vt = { + , * , a, ( ,) }
éste no funcionará si la gramática P={
la posee.
EE+T|T
• Por ejemplo esta gramática es no TT*F|F
ambigua pero si es recursiva.
F a|(E)
}
SOLUCION PARA LA
RECURSIVAD

Se sustituye AA| por las producciones


no recursivas por la izquierda

A  A’ A , A’  Vn
A’  A’ |  a ,   ( Vn  Vt ) *
ELIMINANDO LA RECURSIVIDAD
Eliminando la
recursividad de AA|
las producciones
del ejemplo A  A’ A , A’  Vn
anterior A’  A’ |  a ,   ( Vn  Vt ) *

G recursiva G no recursiva
G=(Vn, Vt, P, E)
Vn= { E, E’, T, T’, F }
G=(Vn, Vt, P, E)
Vt = { + , * , a, ( ,) }
Vn= { E, T, F }
Vt = { + , * , a, ( ,) }
P={ E TE’
E’  +TE’/ 
P={ E  E + T | T
TT*F|F T  FT’
F a|(E)} T’*FT’/ 

F a|(E) }
RECURSIVIDAD ESCONDIDA

B1 YAB|XZ
B2 XYZ

• En apariencia, esta gramática no tiene


recursión izquierda (ninguna producción
empieza con el no terminal que se está
definiendo.
REEMPLAZAMOS
Reemplazando B1 en B2:

B1 YAB|XZ
B2 XYZ

Tenemos
X  A B Z |X Z Z

Hay
recursividad
GRAMATICA
SIN RECURSION
AA|
A  A’ A , A’  Vn
A’  A’ |  a ,   ( Vn  Vt ) *

Después de eliminar la recursividad:

X ABZX'
X  A B Z |X Z Z
X´  Z Z X ' | 
EJERCICIOS
Genere una gramática para los siguientes casos:

1. L= { aN c bMb / N, M ≥0} genere una G lineal por la derecha


2. L= { aaN cM bd / N, M ≥0} genere una G lineal por la izquierda

3. L = { aN c bN / N ≥0}

4. L= { aN bN / N >0}
5. L= { aN bN cN / N >0}
6. L= { aN bM cN+M / N,M >0}
EJERCICIOS

7. L= { aN bN cN / N >0}

8. Escriba una G para reconocer una zona de declaracion de


variables. Por ejemplo

dato, a, b: integer;
cant, x: real;
Total: real;
EJERCICIOS

10. Para G=(Vn, Vt, P, S) Vn={S, A, B} Vt={a,b,c}


Indique los lenguajes que generan cada P

a) S abB b) SAb c) S aB
B cb ABc Bb BaB
B B

d) S aBbB e) SA f) S aB
BcBA AB B bA
BAaab Bab A 
A a
g) SSa h) SBbA i) SaBb
SbS BbabA B
S AabBA BbB
SOLUCION

L= { aN bN cN / N >0} S
2
S
1
Vn={ S, R, Q} ↓ ↓
Vt={ a, b, c } aRQ aSRQ 2
↓ 4 ↓
P={ 1. SaSRQ
abQ aaRQRQ
2. S aRQ 4
↓ 6 ↓
3. QR RQ abc aabQRQ
4. aRab ↓ 3
5. bR bb aabRQQ
6. bQbc ↓ 5
7. cQcc } aabbQQ
↓ 6
aabbcQ
↓ 7
aabbcc
PROYECTO

Condiciones del proyecto

 Proponer de manera original un lenguaje


orientado a objetos.
 Construir un traductor para el lenguaje que
usted describirá, y que reconocerá
programas escritos en ese lenguaje.
 El proyecto se podrá trabajar en grupos,
máximo de 4 alumnos o también de
manera individual.
 Puede usar java o C++ u otro lenguaje
para el proyecto.
PROYECTO

LENGUAJE ORIENTADO A OBJETOS

El lenguaje que se propondrá para el proyecto, será un


lenguaje orientado a objetos y que tiene una manera
especifica al programar, lo cual significa que en el
lenguaje aparte de contar con instrucciones vistas en un
lenguaje estructurado también incluirá instrucciones
como las siguientes:

• Clases para crear tipos abstractos de datos


• Atributos y métodos.
• En un programa de su lenguaje podrá crear objetos y
estos objetos podrán llamar solamente a sus métodos
especificados en la clase relacionada.
PROYECTO

ELEMENTOS DEL LENGUAJE


declaraciones globales
main(){
declaraciones locales
El lenguaje para el proyecto debe considerar los
secuencia de sentencias
siguiente elementos:
}
f1(){
declaraciones locales
1. Estructura de un programa
secuencia de sentencias
La estructura es la manera como se }
organizan las instrucciones en un :
programa y pueden haber infinitas fn(){
formas de disponer las diferentes declaraciones locales
instrucciones como declaraciones de
secuencia de sentencias
variables, funciones y programa o
funcion principal. }
PROYECTO

2. IDENTIFICADORES

• Todo lo que se cree en el programa se


conoce como identificador, de tal
manera que hay identificadores de
distinto tipo. Tipos de identificadores
• La regla general es que los
identificadores pueden ser de uno mas • constantes
caracteres, pero comienzan con un • Variables
caracter alfabetico. Despues del primer • Vectores de una dimension
caracter alfabetico pueden venir mas • Estructurados (clases, atributos
digitos u otros caracteres alfabeticos. y metodos)
• Para el caso de su lenguaje, se deja
libertad para que la forma del
identificador la pueda definer usted
mismo.
PROYECTO
3. OPERADORES Ejemplos de algunos tipos de
operadores unarios y binarios
• Los operadores pueden ser vistos en C o en java:
unarios, binarios o hasta
 Unarios
ternarios(como en C++) y  Incremento
pueden cumplir distintos o decremento : ++, --
propositos.  Relacional : >, <, ==

• Como en los identificadores,  Binarios


usted es libre de definer la forma  Aritmeticos : +, *, /, -
que tengan sus operadores.  Relacional :!

• Para el proyecto los operadores


deben ser a lo mas binarios.
PROYECTO
4. EXPRESIONES Ejemplo de expresiones

• Una expresión es una combinación


de operadores y operandos de cuya
evaluación se obtiene un valor. • a + 5*b
• (a >= 0) and ((b+5) > 10)
• Los operandos pueden ser nombres • A
que denoten variables o • -a * 2 + b
constantes, funciones, literales de • -b + sqrt(b**2 - 4*a*c)
cualquier tipo adecuado de • length(s) > 0
acuerdo con los operadores u otras
expresiones más simples.
PROYECTO
5. INSTRUCCIONES
int a, b;
• Una instrucción es lo que le ordenamos a la
maquina para que ejecute, por eso se dice
que un programa es un conjunto de a=b;
instrucciones.

• Estos son los tipos de instrucciones:


If(a<b) a=5;
a. instrucciones declarativas
b. instrucciones de asignación
instrucciones selectivas while(a>3){ a--; }
c. instrucciones repetitivas
d. instrucciones de entrada y salida de
cin>>a; cout<<b;
datos
e. instrucciones de bifurcación
x:
a. Para el proyecto proponga una forma If(a==b) goto x;
diferente para sus instrucciones.
PROYECTO
• Las funciones son un conjunto de
procedimiento encapsulados en un Por ejemplo una función en C++:
bloque, usualmente reciben parámetros,
int sumar(int x, int y){
cuyos valores utilizan para efectuar
return .x+y5;
operaciones y adicionalmente retornan }
un valor.
Por ejemplo un procedimiento en
• Los procedimientos a diferencia de las C++:
funciones no retornan ningún valor.
void imprimir(float a){
• Las funciones y procedimientos de su cout<<“a=”<<a;
proyecto también deben tener las }
mismas capacidades indicadas arriba y
cualquier programa de su lenguaje debe Usted proponga en su lenguaje
tener una función principal de modo una forma distinta para cada caso.
similar a como trabaja cualquier
programa en C++.
PROYECTO: resumen
 Estructura de un programa
 Identificadores
 constantes
 Variables
 Vectores de una dimension
 Estructurados (clases, atributos y metodos)
 Operadores
 Expresiones
 Instrucciones
 Asignacion
 Lectura/ escritura por pantalla
 Sentencias de control de flujo
 Si –sino
 Mientras
 para
 Subprogramas
LABORATORIO: Especificación del Lenguaje
 Describa en prosa sin usar gramáticas su lenguaje
que propondrá para el proyecto, el cual debe
tener todas las características indicadas
anteriormente.

 La descripción puede hacerla en Word, El trabajo se envíera al correo:


documentando lo mas detalladamente con
ejemplos cada característica del lenguaje como
cruizdelacruzm@unmsm.edu.pe
tipos de datos, identificadores, declaraciones de
variables, etc.

 El lenguaje que especifique es para el cual se


construirá el traductor y una vez especificado no
podrá modificarlo.

 El lenguaje que especificara debe ser original y no


parecerse a ningún otro lenguaje que especifique
otro grupo, en tal caso ambos se anularan.
BIBLIOGRAFIA
KENNETH C.
AHO-ULLMAN(2008). LOUDEN (2004).
Compiladores, Principios, Construcción de
técnicas y herramientas Compiladores,
principios y práctica

TEUFEL. SCHMIDT. JACINTO RUIZ


TEUFEL (1995). CATALAN (2010)
Compiladores, Compiladores Teoria
Conceptos e Implementacion
Fundamentales

Compiladores:
principios, técnicas y
herramientas, (2010),
Alfred V. Aho, Monica S.
Lam, Ravi Sethi &
Jeffrey D. Ullman
BIBLIOGRAFIA
FÉLIX GARCÍA RAFAEL CABALLERO ROLDAN,
MERAYO (2005), TERESA HORTALA GONZALES,
NARCISO MARTI OLIET, SUSANA
Matemáticas Discretas,
NIEVA SOTO, ANTONIO PAREJA
3ra. Edición, Thomson LARA Y MARIO RODRÍGUEZ
ARTALEJO (2007), Matemáticas
Discretas para Informáticos

RICHARD T. VEERARAJAN (2008),


JOHNSONBAUGH Matemáticas Discretas en
(2005), Matemáticas Teoría de Graficas y
Discretas, 6ta. Edición, Combinatoria
Pearson Prentice Hall.

SEYMOUR RAMON ESPINOZA


LIPSCHUTZ, MARC ARMENTA (2010),
LIPSON (2009), Matemáticas Discretas
Matemáticas Discretas,
3ra. Edición, Mc Graw
Hill.
BIBLIOGRAFIA
SUSANNA S. EPP (2012), GRASSMANN-TREMBLAY
Matemáticas Discretas con (1998). Matemática
Aplicaciones Discreta y Lógica.

COLMAN-BUSBY-ROSS RALPH P. GRIMALDI


(1997). Estructura de (2006). Matemáticas
Matemáticas Discretas Discretas y Combinatoria.
para la Computación

También podría gustarte