Sie sind auf Seite 1von 8

Universidad de San Carlos de Guatemala

Facultad de ingeniería
Escuela de Ciencias y Sistemas
Área de Ciencias de la Comunicación

Unidad 2: Traducción dirigida por


la sintaxis (TDS)
Material de apoyo para sesión 4

Contenido
1. Construcción de AST para un lenguaje derivado de java ................................... 2
1.1. Sentencias de Selección .............................................................................. 2
1.1.1. Sentencia If ............................................................................................ 2
1.1.1.1. Sentencia If, else ................................................................................ 2
1.1.1.2. Sentencia if else if .............................................................................. 3
1.1.2. Sentencia switch .................................................................................... 3
Default: ............................................................................................................... 3
Break: ................................................................................................................. 3
1.2. Sentencias Cíclicas ...................................................................................... 4
1.2.1. Sentencia while ...................................................................................... 4
1.2.2. Sentencia For ........................................................................................ 4
1.3. Sentencias de Transferencia ........................................................................ 5
1.3.1. Break ..................................................................................................... 6
1.3.2. Continue ................................................................................................ 6
1.4. Estructura de Datos Display ......................................................................... 6
1.4.1. Casos en los que se requiere un nodo con más atributos ..................... 8
Universidad de San Carlos de Guatemala
Facultad de ingeniería
Escuela de Ciencias y Sistemas
Área de Ciencias de la Comunicación

1. Construcción de AST para un lenguaje derivado


de java
A continuación, veremos cómo construir un AST con diferentes sentencias de
selección y cíclicas basadas en un lenguaje derivado de java.

1.1. Sentencias de Selección


Las Sentencias de selección, tambien llamadas de control de flujo, permiten decidir
entre distintos cursos de acción en función de ciertos valores, para basarnos en un
lenguaje derivado de java tenemos que tomar en cuenta que existen dos tipos de
sentencias de selección:

1.1.1. Sentencia If
Esta sentencia permite entre ejecutar o no una serie de sentencias, contiene un valor
llamado condición, que debe ser una expresión que devuelva un valor lógico, es decir
un booleano, esta condición debe de ir dentro de paréntesis y el resultado de dicha
condición determinara si se ejecuta la serie de sentencias, siendo verdadera que si
se van a ejecutar y falsa cuando no.

If(condicion){
instrucción 1;
...........
instrucción N;
}

1.1.1.1. Sentencia If, else


Esta sentencia se utiliza cuando se desea ejecutar una serie de
sentencias para el caso en el cual la condición de la sentencia if sea
verdadero y tambien se tiene una serie de condiciones que se ejecuten
cuando la sentencia if de falso.
If(condicion){
//Bloque instrucciones verdadero
}else{
//Bloque instrucciones falso
}
Universidad de San Carlos de Guatemala
Facultad de ingeniería
Escuela de Ciencias y Sistemas
Área de Ciencias de la Comunicación

1.1.1.2. Sentencia if else if


Esta sentencia servira cuando se necesiten diferentes acciones para
diferentes condiciones, consiste en una serie de sentencias if anidadas en
las cuales si no se cumple la condición actual se seguirá evaluando las
diferentes condiciones y ejecutándose hasta que una sea verdadera o bien
hasta llegar al final con una sentencia if else.

If(condicion1){
//Bloque instrucciones condicion1 verdadero
}else If(condicion2){
//Bloque instrucciones condicion2 verdadero
} else If(condición n){
//Bloque instrucciones condición n verdadero
}else{
//Bloque instrucciones falso
}

1.1.2. Sentencia switch


Esta sentencia es una serie de anidamiento de múltiples instrucciones, contenidas
cada una sobre un caso en particular siendo aplicado sobre una expresión, dicha
expresión se evalúa sobre el valor contenido en cada caso, si el valor del caso es
igual a la expresión de la sentencia se ejecuta la serie de instrucciones contenidas
dentro del caso y sigue evaluando los demás casos.
Default:
Puede ponerse una serie de instrucciones dentro de un caso “Default”,
el cual no contiene ningún valor y su serie de instrucciones se ejecutarán
cuando ninguno de los casos sea igual a la expresión.
Break:
Indicará cuando se terminará de ejecutar sentencias dentro del switch,
puede venir en cualquier parte, no necesariamente solo al final. Si no aparece
la sentencia de salida dentro del caso, entonces se deberá seguir comparando
los resultados de los siguientes casos.

Switch(Expresion){
Case expresión 1:
// Instrucciones expresión 1
Case expresión 2:
// Instrucciones expresión 2
Case expresión n:
// Instrucciones expresión n
Default:
// Instrucciones expresión 1
}
Universidad de San Carlos de Guatemala
Facultad de ingeniería
Escuela de Ciencias y Sistemas
Área de Ciencias de la Comunicación

1.2. Sentencias Cíclicas


Las Sentencias cíclicas, permiten ejecutar de forma repetitiva un ciclo de
instrucciones mientras o hasta que se cumpla una condición, esto quiere decir que la
cantidad de iteraciones del ciclo se ve influido sobre una condición. En esta seccion
veremos 2 principales sentencias cíclicas del lenguaje java:

1.2.1. Sentencia while


Sentencia en la cual el bloque de instrucciones se estará ejecutando repetidamente
mientras que la condición a la que está sujeta ya no sea verdadera. La condición se
comprueba al principio del ciclo, si es verdadera ejecuta el bloque de instrucciones,
esto quiere decir que las instrucciones se pueden ejecutar 0 o más veces.

While(condicion){
instrucción 1;
...........
instrucción N;
}

La ejecución de un bucle while sigue los siguientes pasos:


 Se evalúa la condición.
 Si la condición es cierta se ejecutan las instrucciones. Si es falsa, finaliza la
ejecución del bucle y continúa el programa en la siguiente instrucción
después del while.
 De haber sido verdadera la condición se vuelve al punto 1.

1.2.2. Sentencia For


Sentencia en la cual el bloque de instrucciones se estará ejecutando repetidamente
hasta un número determinado de veces hasta que se cumpla la condición, la
estructura general de una instrucción for en java es la siguiente:

for(inicialización; condición; incremento/decremento){


instrucción 1;
...........
instrucción N;
}
Universidad de San Carlos de Guatemala
Facultad de ingeniería
Escuela de Ciencias y Sistemas
Área de Ciencias de la Comunicación

Seguido de la palabra For y entre paréntesis debe venir siempre tres zonas
separadas por punto y coma:
 Zona de inicialización
 Zona de condición
 Zona de incremento o decremento

Si en alguna ocasión no es necesario escribir alguna de ellas se pueden dejar en


blanco, pero los dos punto y coma deben aparecer.

 Inicialización es la parte en la que la variable o variables de control del bucle


toman su valor inicial. Puede haber una o más instrucciones en la
inicialización, separadas por comas. La inicialización se realiza solo una vez.

 Condición es una expresión booleana que hace que se ejecute la sentencia


o bloque de sentencias mientras que dicha expresión sea cierta.
Generalmente en la condición se compara la variable de control con un valor
límite.

 Incremento/decremento es una expresión que decrementa o incrementa la


variable de control del bucle.

La ejecución de un bucle for sigue los siguientes pasos:


 Se inicializa la variable o variables de control (inicialización)
 Se evalúa la condición.
 Si la condición es cierta se ejecutan las instrucciones. Si es falsa, finaliza la
ejecución del bucle y continúa el programa en la siguiente instrucción
después del for.
 Se actualiza la variable o variables de control (incremento/decremento)
 Se vuelve al punto 2.

1.3. Sentencias de Transferencia


Las Sentencias de transferencia son aquellas que alteran el flujo de las instrucciones
transfiriendo la ejecución a otro punto del programa, para las sentencias de selección
y las sentencias cíclicas existen 2 principales sentencias de transferencia, los cuales
son:
Universidad de San Carlos de Guatemala
Facultad de ingeniería
Escuela de Ciencias y Sistemas
Área de Ciencias de la Comunicación

1.3.1. Break
La sentencia break se puede utilizar en una sentencia switch o en cualquier tipo de
sentencia de bucles. Cuando se ejecuta la sentencia break el bucle que lo contiene
o la sentencia switch terminan y el resto del cuerpo del bucle ya no se ejecuta.

While(true){
instrucción 1;
...........
instrucción N;
break;

1.3.2. Continue
La sentencia continue se puede utilizar en cualquier tipo de sentencia de bucles.
Cuando se ejecuta la sentencia continue el bucle que lo contiene sigue a su siguiente
iteración y el resto del cuerpo del bucle ya no se ejecuta.

While(true){
instrucción 1;
...........
instrucción N;
continue;

1.4. Estructura de Datos Display


En muchas ocasiones en un bloque de instrucciones internos se necesita consultar
información de bloques más externos, como conocer dentro de qué tipo de sentencia
se encuentra, para ello se necesita mantener una estructura de datos interna con
toda la información necesaria, servirá para las sentencias de transferencia y diversas
validaciones de las sentencias.

Los atributos del Display varían en cuanto a las validaciones necesarias del lenguaje,
sin embargo, uno de los usos más comunes es para la validación en las sentencias
de transferencia, se tiene que conocer si en el bloque actual es válido que venga un
break o un continue, recordando que unicamente son válidos en ciertas sentencias,
se tiene que conocer en todos los bloques de instrucciones internos que se
encuentran dentro de un bloque de alguna sentencia valida.
Universidad de San Carlos de Guatemala
Facultad de ingeniería
Escuela de Ciencias y Sistemas
Área de Ciencias de la Comunicación

While(condicion){
Break; // valido
Continue; // valido
}

While(condicion){

If(condicion){
If(condicion){
If(condicion){
Break; // valido
Continue; // valido
}
}
}
}

Break; // Invalido
Continue; // Invalido

Para definir si es válido o no dichas sentencias se siguen los siguientes pasos:


 Cuando viene una sentencia insertarla en el display

Posición Tipo de Sentencia


N-1 Distintas sentencias
N While

 Al momento de encontrar una sentencia break o continue consultar en el


Display si se encuentra una sentencia valida, en caso sé que no encuentre una
sentencia valida marcar error.
 Al momento de terminar el análisis de la sentencia, sacar la sentencia del
display.

Posición Tipo de Sentencia


N-1 Distintas sentencias
Universidad de San Carlos de Guatemala
Facultad de ingeniería
Escuela de Ciencias y Sistemas
Área de Ciencias de la Comunicación

1.4.1. Casos en los que se requiere un nodo con más atributos


Como fue mencionado anteriormente los atributos del display depende mucho del
lenguaje y de las distintas validaciones que se desean realizar, a continuación, damos
diferentes ejemplos de los casos más comunes en los que se requiere un nodo con
más atributos:

 Las sentencias break y continue unicamente pueden ir dentro de una


sentencia if que se encuentra dentro del bloque de instrucciones de una
sentencia cíclica.

Posición Tipo de Sentencia Ifs anidados


1 While 2

Tomando en cuenta que el contador de ifs anidados incrementa cada vez que se
analiza la lista de instrucciones de un if y decrementa cada vez que se termina de
analizar su lista de instrucciones.

 En las sentencias cíclicas o sentencia switch tiene que venir obligatoriamente


un break.

Posición Tipo de Sentencia Break encontrado


1 While True

Tomando en cuenta que al momento de comenzar la sentencia cíclica o switch el


atributo break encontrado es false y se vuelve true hasta en el momento que se
encuentra una sentencia break.

 En las sentencias cíclicas pueden tener una sentencia break o una sentencia
continuar, nunca ambas.

Posición Tipo de Sentencia Break encontrado Continue encontrado
1 While True False

Tomando en cuenta que al momento de comenzar la sentencia cíclica el atributo


break encontrado y el continue encontrado son false y se vuelve true hasta en el
momento que se encuentra una sentencia break o continue respectivamente.

Das könnte Ihnen auch gefallen