Beruflich Dokumente
Kultur Dokumente
PROYECTO: TRADUCTOR
Segn los gurs informticos un lenguaje que no implementa estas tcnicas es cualquier
cosa menos un lenguaje orientado a objetos. Por tanto TURBO FISI debe incluir tcnicas
como: herencia, polimorfismo, modularidad y encapsulacin. Adems el soporte a usar ser
un lenguaje orientado a objetos como es el cado del lenguaje Java.
Los objetos son entidades que representan cualquier cosa de la realidad y/o
entidades abstractas que combina estado comportamiento e identidad. El estado est
compuesto de datos, ser uno o varios atributos a los que se habrn asignado unos
valores concretos (datos) y que mas adelante pueden ser modificados. El
comportamiento est definido por los procedimientos o Mtodo (informtica) con
que puede operar dicho objeto, es decir, qu operaciones se pueden realizar con l y
ellos nos permiten manipular sus atributos. La identidad es una propiedad de un
objeto que lo diferencia del resto, dicho con otras palabras, es su identificador
(concepto anlogo al de identificador de una variable o una constante).
1.1.1. Clase
Definiciones de las propiedades y comportamiento de un tipo de objeto
concreto. La instanciacin es la lectura de estas definiciones y la
creacin de un objeto a partir de ellas. La clase es un conjunto de
objetos.
1.1.2. Herencia
1.1.3. Objeto
1.1.4. Mtodo
1.1.5. Evento
1.1.6. Mensaje
1.1.7. Atributo
1.2.1. Abstraccin
1.2.2. Encapsulacin
Cada objeto est aislado del exterior, es un mdulo natural, y cada tipo
de objeto expone una interfaz a otros objetos que especfica cmo
pueden interactuar con los objetos de la clase. El aislamiento protege a
las propiedades de un objeto contra su modificacin por quien no tenga
derecho a acceder a ellas, solamente los propios mtodos internos del
objeto pueden acceder a su estado. Esto asegura que otros objetos no
pueden cambiar el estado interno de un objeto de maneras inesperadas,
eliminando efectos secundarios e interacciones inesperadas. Algunos
lenguajes relajan esto, permitiendo un acceso directo a los datos internos
del objeto de una manera controlada y limitando el grado de abstraccin.
La aplicacin entera se reduce a un agregado o rompecabezas de objetos.
1.2.4. Polimorfismo
1.2.5. Herencia
2.1. Identificadores
Se puede formar con cualquier carcter alfa numrico: dgitos (0-9) y smbolo
de subrayado (_), debiendo empezar siempre por un carcter alfabtico. Los
identificadores son sensibles a las maysculas y no deben pasar de 50
caracteres.
2.2. Comentarios
a) Enteros.
b) Reales.
Estn compuestas por los dgitos (0-9) y los signos + y utilizados como
prefijos.
2.4.3. Lgicas
2.4.4. De carcter
Cualquier carcter valido del juego de caracteres utilizados, delimitado
por los separadores .
2.4.5. De cadena
3. Operadores
Ejemplos:
a*b/c mod d //multiplicacin, divisin, modulo
Los operadores lgicos nos permiten manipulas valore booleanos verdad falso.
A B A|B !A A&B
falso falso falso verdad falso
falso verdad verdad verdad falso
verdad falso verdad falso falso
verdad verdad verdad falso verdad
Mas alta
Operadores Prioridad
Primarios (), [], .
Unarios -, +, !, tipo, nuevo
Multiplicativos *, /, div, mod
Incrementos ++, --
Aditivos +, -
De relacin =, <, <=, >, >=, <>
Baja
4.1. Clase
Sintaxis:
Una clase publica puede ser accedido de otros paquetes y debe tener su propio
archivo.
Ejemplos:
4.2. Objetos
Los objetos nos otra cosa que variables cuyo tipo de dato es una clase. Cuya
sintaxis es:
Ejemplo:
Ejemplo:
punto1=nuevo Punto();
punto2=nuevo Punto(5,6);
Ejemplo:
entero x=punto1.obtenerX();
punto1.guardarX(x);
4.3. Constructores
En TURBO FISI los tipos de objetos son muy diferentes a los tipos primitivos,
simple hecho de declarar una variable cuyo tipo se define como clase, no crea
automticamente un objeto de esa clase. Los objetos se deben construirse de
forma explicita.
Hay dos maneras de hacerlo. Primero es proporcionar el valor inicial en la
definicin de clase al momento de declarar los datos.
Ejemplo:
}
Otra forma de llenar los valores iniciales de una clase es declarando uno o ms
constructores por clase. De hecho los constructores pueden hacer ms cosas que
inicializar los valores de los datos de la clase para un objeto en particular.
Ejemplo:
Punto punto1;
punto1=nuevo Punto(5,9);
Si no se declara un constructor TURBO FISI crea automticamente por defecto.
Protegido. Indica que los elementos pueden ser utilizados dentro de la clase,
tambin dentro de las clases descendientes. Ms no desde el objeto de la clase.
4.5. Mtodos
Los mtodos son herramientas que permiten modificar los atributos, es decir los
mtodos son los que hacen como se va a comportar un objeto.
Sintaxis:
Tipo de dato de un mtodo depende del resultado que devolver, as: ser tipo
nada si el mtodo no retorna ningn valor, pero ser de tipo entero, real, cadena,
lgico, etc., si es que retornara algn valor.
Ejemplo:
4.6. Herencia
La herencia es una de las caractersticas fundamentales de los lenguajes de
programacin orientado a objetos. Gracias a esta propiedad podemos aprovechar
lo que hace una clase para crear otra a partir de ella agregndole y/o
cambindole su funcionalidad.
La clase de quien se hereda se le conoce como clase padre, mientras que la clase
que hereda se conoce como clase hija.
Ejemplo:
4.7. Polimorfismo
Sean las figuras planas cerradas como el rectngulo y el crculo. Tales figuras
comparten caractersticas comunes como es la posicin de la figura, de su
centro, el rea de la figura y el permetro de la figura, aunque el procedimiento
para calcular dicha rea y dicho permetro sea completamente distinto. Podemos
por tanto disear una jerarqua de clases, tal que la clase base denominada
Figura tenga las caractersticas comunes y cada clase derivada tenga las
caractersticas especficas. La relacin jerrquica se muestra en la figura.
Figura
<<entero>> x
<<entero>> y
calcularArea()
calcularPerimetro()
mostrarAreaPerimetro()
Rectangulo Circulo
<<real>> ancho <<real>> radio
<<real>> alto
calcularArea()
calcularArea() calcularPerimetro()
calcularPerimetro()
Las clase derivadas heredan los datos miembros x, y de la clase base y definen
los mtodos calcularArea() y calcularPerimetro() declarados como abstracto en
la clase base Figura, ya que cada figura particular tiene una forma distinta para
calcular su rea y permetro.
Por ejemplo la clase derivada Rectangulo, tiene como datos, aparte de su
posicin (x,y) en el plano, sus dimensiones, es decir, su ancho y alto.
Los programas son una coleccin de clases, es decir cualquier programa por ms
pequea o compleja que sea debe estar dentro de una clase. Como sabemos en
programacin orientado a objetos se encapsula mtodos y atributos en una sola
llamada clase que es una plantilla para definir objetos.
Sintaxis:
Sintaxis:
Los flujos bsicos de manejo de datos nos permiten realizar las operaciones
bsicas, a travs de la pantalla o otros terminales.
Ejemplo:
Este mtodo sirve para leer los datos de entrada por teclado como una
cadena y luego se ara el tratamiento respectivo.
Ejemplo:
Para asignar una expresin a una variable, primero debe declararse la variable a
la cual se asignar, adems deben ser del mismo tipo. Una sentencia de
asignacin asigna el valor de la expresin del lado derecho a la variable del lado
izquierdo.
Sintaxis:
<variable> = <expresin>
Ejemplo:
suma=x+y; // realiza la operacin suma, el resultado se
asigna en suma.
Sintaxis:
Sintaxis:
6. Estructura de control.
Son flujos de control que nos permite escribir cualquier tipo de programa por ms
complejo que sea utilizando la combinacin de tres estructuras de control:
(secuencial, seleccin, iterativa) y una cuarta denominada de salto. Las sentencias
de seleccin son: si y segun_sea; las sentencias iterativas son: para, mientras,
hacer-mientras, y las sentencias de salto u bifurcacin son: romper (break)
continuar (continue), retornar y lanzar.
Sintaxis:
<instruccin_1>
<instruccin_2>
<instruccin_3>
<instruccin_n>
Ejemplo:
Sintaxis:
Sintaxis:
Si(expresionLogica){ //si la expresin lgica es verdad
Bloquesentenia_1
Bloque desentecias_2
Bloquedesentencias_n
}
Si_no{ //si la expresionLogica es falso
Bloquesentenia_1
Bloque desentecias_2
Bloquedesentencias_n
}
Ejemplo:
Segun_sea(<expresin >){
caso valor_1 : <conjunto_instrucciones_1>;
romper;
caso valor_2 : <conjunto_instrucciones_2> ;
romper
ropmer;
caso valor_n : <conjunto_instrucciones_n>;
romper;
diferente <conjunto_instrucciones_x>;
romper;
}
Ejemplo:
Muchas tareas resultan repetitivas y para ayudarnos en esas tareas estn las
computadoras que trabajan a gran velocidad, como sabemos las computadoras
no piensan y es necesario implementar programas, que pueden hacer una tarea
especfica de manera iterativa y en este caso es que nos servirn bastante las
estructuras repetitivas y entre ellas tenemos: mientras, hacer-minetras y para.
Esta estructura permite que el cuerpo del bucle se repita tantas veces
como la condicin se cumple. En la ejecucin del mientras la primera
cosa que sucede es que se evala la condicin (expresin lgica). Si la
expresin a evaluar es falsa (falso), no se ejecuta ninguna instruccin y
el programa prosigue en la siguiente instruccin despus del bucle. Si la
expresin lgica es verdadera (verdad), entonces se ejecuta el cuerpo
del bucle, despus de la cual se vuelve a evaluar la expresin lgica. Este
proceso se repite una y otra vez mientras la expresin lgica es
verdadera.
Sintaxis:
mientras (<expresin_logica>){
<conjunto de instrucciones>
}
Ejemplo:
entero suma=10;
mientras(suma<100){
suma=suma+10;
Suma=suma-5;
}
Sintaxis:
hacer {
<conjunto de instrucciones>
}mientra(<expresin_logica>);
Ejemplo:
entero suma=10;
hacer{
suma=suma+10;
Suma=suma-5;
} mientras(suma<100);
Sintaxis:
para(<valor_inicial>;<condicin>;<actualizacin>){
<conjunto de sentencias>
}
Ejemplo:
para(entero i=0;i<100;i=i+10){
i=i+2;
i=i-1;
}
Introduccin
En este primer informe del proyecto comenzaremos con la parte ms sencilla del
compilador: el analizador lxico. Habitualmente el trmino anlisis lxico se refiere al
tratamiento de la entrada que produce como salida una lista de tokens.
Un token hace alusin a la unidad mnima que tiene significado. Habitualmente un token o
lexema queda descrito por una expresin regular. Lxico viene del griego lexis, que
significa palabra. En el anlisis lxico, el problema es encontrar la subcadena a partir de
la ltima posicin en la que se produjo un emparejamiento y que es aceptada por una de las
expresiones regulares que definen los lexemas del lenguaje dado.
Definicin del lxico y los tokens asociados a cada uno de los componentes lxicos
b) Expresiones regulares
0L1/_1/d2/>4/<6/=8/!10/&11/|12/+16/-18/*20/^21//22/%23/{24/(26/[28/,30
1L1/d1/_1/
2d2/.3/
3d3/
4=5/
5
6=7/
7
8= 9/
9
10=11/
11
12&13/
13
14|15
15
16+17/
17
18-19/
19
20
21
22
23
24}25/
25
26)27/
27
28]29/
30;31/
31
El escner
int analiza(){
buffer="";
int i=0;
int e=0;
char a;
for(;;){
a = codigo.charAt(ind);
if(a=='#' && i==0)
return 0;
else
if(a=='#'){
switch(e){
case 1: return palabras.buscarPalabra(buffer)!=null ?
palabras.buscarPalabra(buffer).getToken():701; // identificador o reservada
case 2: return 601; //numeros enteros
case 3: return 602; //numeros reales
case 4: if(a=='=')return 405; else return 403; //operador >
case 6: if(a=='=')return 404; else return 406;
case 8: if(a=='=')return 401;else return 501;
case 10:if(a=='=')return 402;else return 407;
case 12:if(a=='&') return 408; else return 502; //operador &
case 14:if(a=='|') return 409; else return 410;
case 16:if(a=='+') return 310; else return 301;
case 18: if(a=='-')return 311;else return 302;
case 20: return 303;//estado 20 *
case 21: return 304;//estado 21 ^
case 22: return 305;//estado 22 /
case 23: return 306;//estado 23 %
case 24: return 201;//estado 20 {
case 25: return 202;//estado 21 }
case 26: return 203;//estado 22 (
case 27: return 204;//estado 23 )
case 28: return 205;//estado 20 [
case 29: return 206;//estado 21 ]
case 30: return 207;//estado 22 ,
case 31: return 207;//estado 22 ;
case 32: return 210;//estado 23 ""
//default :return 999;
}
}
else {
buffer=buffer.trim();
switch(e){
case 0:
/*if(ind==0 &&a!=' '&& a!='\n'&&a!='/'&&!Character.isLetter(a)&&a!
='_'&&a!='\t')
return 888;*/
buffer=buffer+a;
if(Character.isLetter(a) || a=='_') {
e=1; //pasa al estado 1 de identificadores o pal res
i++;
}
else
if(Character.isDigit(a)){
e=2; //pasa al estado 2 para numeros enteros y reales
i++;
}
else
if(a=='>') {
e=4; //pasaal estado 4 para simbolo logico >
i++;
}
else
if(a=='<'){
e=6; //pasaal estado 6 para simbolo logico <
i++;
}
else
if(a=='='){
e=8; //pasaal estado 8 para simbolo logico =
i++;
}
else
if(a=='!'){
e=10; //pasaal estado 10 para simbolo logico !
i++;
}
else
if(a=='&'){
e=12; //pasaal estado 12 para simbolo logico &
i++;
}
else
if(a=='|'){
e=14; //pasaal estado 14 para simbolo logico |
i++;
}
else
if(a=='+'){
e=16; //pasaal estado 16 para operador aritmetico
+
i++;
}
else
if(a=='-'){
e=18; //pasaal estado 18 para operador
aritmetico -
i++;
}
else
if(a=='*'){
e=20; //pasaal estado 20 para operador
aritmetico *
i++;
}
else
if(a=='^'){
e=21; //pasaal estado 21 para operador
aritmetico ^
i++;
}
else
if(a=='/'){
e=22; //pasaal estado 22 para operador
aritmetico /
i++;
}
else
if(a=='%'){
e=23; //pasaal estado 23 para operador
aritmetico %
i++;
}
else
if(a=='{'){
e=24; //pasaal estado 24 para parentesis
i++;
}
else
if(a=='}'){
e=25; //pasaal estado 24 para
parentesis
i++;
}
else
if(a=='('){
e=26; //pasaal estado 24 para
parentesis
i++;
}
else
if(a==')'){
e=27; //pasaal estado 26 para
parentesis
i++;
}
else
if(a=='['){
e=28; //pasaal estado 28 para
[
i++;
}
else
if(a==']'){
e=29; //pasaal estado 24
para parentesis
i++;
}
else
if(a==','){
e=30; //pasaal estado 4
para ,
i++;
}
else
if(a==';'){
e=31; //pasaal estado
4 para ;
i++;
}
else
if(a=='"'){
e=32; //pasaal
estado 24 para parentesis
i++;
}
else
if(a=='.'){
e=33; //pasaal
estado 24 para parentesis
i++;
}
else
if(a!=' '&&a!
='\r'&& a!='\n'&&a!='\t')
return 999;
else
e=0;
break;
case 2:
if(Character.isDigit(a)){
buffer=buffer+a;
e=2;
}
else
if(a=='.'){
buffer=buffer+a;
e=3;
}
else
return 601; //numeros enteros
i++;
case 3:
if(Character.isDigit(a)){
buffer=buffer+a;
e=3;
}
else {
return 602; //numeros reales
}
i++;
break;
case 4: //estador 4 y 5
if(a=='='){
buffer=buffer+a;
//e=5;
ind++;
return 405; //operador >=
}
else {
return 403; //operador >
}
case 6: //estados 6 y7
if(a=='='){
buffer=buffer+a;
//e=7;
ind++;
return 404; //operador <=
}
else {
return 406; //operador <
}
case 8: //estados 8 y 9
if(a=='='){
buffer=buffer+a;
//e=5;
ind++;
return 401; //operador == igualdad
}
else {
return 501; //operador = de asignacion
}
case 10: //estados 10 y 11
if(a=='='){
buffer=buffer+a;
//e=11;
ind++;
return 402; //operador !=
}
else {
return 407; //operador !
}