Está en la página 1de 8

Universidad Nacional Jorge Basadre Grohmann

Facultad de Ingeniería
Escuela Profesional en Informática y Sistemas

“EL PROCESO DE TRADUCCIÓN”

Asignatura: Compiladores y Teoría de Lenguajes

Docente: Ing. Hugo Manuel Barraza Vizcarra

Alumna:

Miriam Marisol Mamani Mamani 2014-119011

Semestre: Sexto ciclo

TACNA – PERÚ

2018
TRABAJO ENCARGADO: “EL PROCESO DE TRADUCCIÓN”
1. Seleccione un compilador conocido que venga empacado con un ambiente de
desarrollo, y haga una lista de todos los programas acompañantes que se
encuentran disponibles con el compilador junto con una breve descripción de
sus funciones.
 Borland C++
Borland Graphics Interface : Es una biblioteca de funciones para hacer gráficos
2D sencillos y de presentación. Los controladores se incluyeron para la capacidad
genérica de CGA , EGA y VGA.

Object Windows Library (OWL) : Es un conjunto de clases que pertenece al


lenguaje C ++ se usan para facilitar el desarrollo de aplicaciones gráficas
profesionales de Windows.

Borland Code Guard : Una vez instalado dentro del IDE, Code Guard puede
insertar el código de instrumentación en el ejecutable final que se puede usar para
monitorear: uso del puntero , llamadas API , cuántas veces se llama a alguna
función y otras características. Si se encuentra algún error, aparece una ventana
emergente, el depurador puede detenerse o un registro se escribe en el disco.
Entregado para aplicaciones de 16 y 32 bits.

2. Dada la asignación en C

Dibuje un árbol de análisis gramatical y un árbol sintáctico para la expresión


utilizando como guía el ejemplo semejante de la sección 1.3.

Entonces tenemos:

a) ANÁLISIS LÉXICO:

 a identificador
 [ corchete izquierdo
 i identificador
 + signo mas
 1 número
 ] corchete derecho
 = asignación
 a identificador
 [ corchete izquierdo
 i identificador
 ] corchete derecho
 + signo mas
 2 número

b) ANÁLISIS SINTÁCTICO Y GRAMATICAL:

-ARBOL DE ANÁLISIS GRAMATICAL

EXPRESIÓN

EXPRESIÓN DE

EXPRESIÓN
=
EXPRESIÓN

EXPRESIÓN

EXPRESIÓN DE SUBINDICE

EXPRESIÓN DE SUBINDICE EXPRESIÓN


+
EXPRESIÓN
[ EXPRESIÓN ]
EXPRESIÓN [ EXPRESIÓN ]

Número
Identificador a 2
EXPRESIÓN ADITIVA Identificador a Identificador i

EXPRESIÓN + EXPRESIÓN

Identificador i Número
1
-ÁRBOL DE ANÁLISIS SINTÁCTICO

Sentencia de asignación

Expresión de subíndice Expresión aditiva

Identificador a Expresión de subíndice


Expresión aditiva
Número 2

Identificador i Número 1 Identificador a Identificador i

3. Los errores de compilación pueden dividirse aproximadamente en dos


categorías: errores sintácticos y errores semánticos.

-Los errores sintácticos son aquellos donde sus expresiones son colocados de
manera incorrecta o si se ha olvidado de alguna expresión necesaria como por
ejemplo algún “;” o una “{}”, etc.

-Los errores semánticos son aquellas expresiones dadas de forma incorrecta o


expresiones que se utilizan pero que no son declaradas correctamente.
Los
a) Proporcione dos ejemplos más de errores de cada clase en un lenguaje
de su elección.

En Borland C++ , tendremos dos ejemplo de errores el sintáctico y el semántico:

 ERRORES SINTÁCTICOS:

Fig 1:“Codigo Fuente en Borland c++”

Fig2: ”Muestra de errores tras ejecutarlo”

En el presente ejemplo se pueden observar ciertos errores tales como:

-error al escribir “incluse” cuando en realidad debería ser “INCLUDE” puesto


que es una librería principal del borland c++.

- como segundo error tenemos a “iostream” en esta parte del código lo correcto
debería ser “IOSTREAM.H”.

- Y como tercer error tenemos que en la primera fila donde se ejecuta la


declaración de variables se observa que hace falta el “;” para terminar la
sentencia; y finalmente como último error tenemos a “coutt” cuando en realidad
debería de estar escrito como “COUT”.

 ERRORES SEMÁNTICOS

Fig 3:“Codigo Fuente en Borland c++”

- En el primer caso podemos ver que lo que se quiere es que se sume, pero
hay un error en vez de sumar hay una multiplicación.
- Y en el segundo caso es similar se quiere que se múltiple por 2 a la
variable x, pero hay un error y este es que se suma en vez de multiplicar

En ambos casos hay un error con los signos, el programa correrá


correctamente pero el problema será que el resultado no es lo que se
deseaba, puesto que existen errores semánticos.

7. Suponga que tiene un traductor Pascal a C escrito en C y un


compilador trabajando para C. Utilice diagramas T para describir los
pasos que tomaría para crear un compilador trabajando para Pascal
8. Utilizaremos una flecha  para indicar la reducción de un patrón de
dos diagramas T a un solo diagrama. Podemos considerar esta flecha
como una “relación de reducción” y formar su cerradura transitiva 
*, en el cual permitimos que tenga una secuencia de reducciones.

Dado el siguiente diagrama, en las letras establecen lenguajes


arbitrarios, determine cuáles lenguajes deben ser iguales para que la
reducción sea válida, y muestre los pasos de la reducción simple que la
hacen válida:

Podemos decir que:

A: Lenguaje Fuente

B: Lenguaje Objetivo

C: Lenguaje Anfitrión
La figura al lado Izquierdo
representa a un compilador escrito
A B en un lenguaje C que tiene la
C función de traducir lo que está
dentro del lenguaje A a un

Desarrollando tenemos:

Resultando:
A B
A B
A B
C
G H
C C H
H

I I

Cambiando los lenguajes


Quedándonos:

A B B E
A B D E

H H
H F

Tal como se muestra en la figura, podemos decir que si se llega a tener dos compiladores
que se ejecutan en el mismo lenguaje máquina que en este caso es H entonces lo que
podríamos hacer es combinar ambos compiladores dejando que la salida del primer sea la
entrada del segundo; al efectuar esto nos dará como resultado:

De  A B B E A E
 *
H H H

Tal resultado podemos interpretarlo de la siguiente manera: se tiene un compilador


desarrollado (escrito) en un lenguaje H, que éste a la vez se encarga de traducir del
lenguaje A a un lenguaje E.

También podría gustarte