Sie sind auf Seite 1von 44

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

Universidad del Per, Decana de Amrica

FACULTAD DE INGENIERIA DE SISTEMAS E INFORMATICA


E.A.P: INGENIERIA DE SISTEMAS

PROYECTO: TRADUCTOR

PARTE 1: ANALIZADOR LEXICOGRAFICO


CURSO : LENCGUAJES Y TRADUCTORES

PROFESOR : CARLOS A. RUIZ DE LA CRUZ MELO

ALUMNOS : ALEJANDRO REYES MARZANO

CIUDAD UNIVERSITARIA, 27 NOVIEMBRE 2009


Introduccin

Vivimos en una poca en donde la informtica es imprescindible para cualquier actividad


humana, especialmente en las reas de las ingenieras y las ciencias. Como informticos
somos responsables de que esta maravilla moderna llegue a todos de manera democrtica
indistinta de la instruccin o cualquier ndole. Para ello necesitamos contar con una
herramienta muy poderosa, es decir un lenguaje de programacin de propsito general muy
cercano a nuestro lenguaje natural, esto nos lleva a desarrollar este proyecto llamado
TURBO FISI un lenguaje de propsito general valga la redundancia.

TURBO FISI es un lenguaje orientado objetos siguiendo el paradigma de programacin


moderno que actualmente est en la boga y por lo menos promete seguir avanzando a pasos
agigantados, la programacin orientada a objetos (POO) es un enfoque moderno que
incluye tcnicas como la herencia, polimorfismo, modularidad y encapsulacin, adems
incluyen conceptos como clase, objetos, mtodos, eventos, mensajes y otros.

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.

Alejandro Reyes Marzano


Lenguaje TURBO FISI

1. Descripcin del Lenguaje

TURBO FISI es un lenguaje orientada a objetos, un paradigma que est de moda


en estos tiempos. Este enfoque usa objetos y sus interacciones para disear
software, est basado en varias tcnicas, incluyendo herencia, modularidad,
polimorfismo y encapsulamiento. Su uso se populariz a principios de la dcada de
1990. Actualmente son muchos los lenguajes de programacin que soportan la
orientacin a objetos.

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).

La programacin orientada a objetos expresa un programa como un conjunto de


estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los
programas y mdulos ms fciles de escribir, mantener, reutilizar y volver a utilizar.

De aquella forma, un objeto contiene toda la informacin que permite definirlo e


identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a
objetos de una misma clase, al poder tener valores bien diferenciados en sus
atributos. A su vez, los objetos disponen de mecanismos de interaccin llamados
mtodos que favorecen la comunicacin entre ellos. Esta comunicacin favorece a
su vez el cambio de estado en los propios objetos. Esta caracterstica lleva a
tratarlos como unidades indivisibles, en las que no se separan ni deben separarse el
estado y el comportamiento

1.1. Conceptos fundamentales de la programacin orientada a objetos (POO)

La programacin orientada a objetos es una nueva forma de programar que trata


de encontrar una solucin a los problemas existentes en la programacin
estructurado. Para ello introduce nuevos conceptos, que superan y amplan
conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:

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

La herencia es una de las caractersticas ms fundamentales de la


programacin orientada a objetos. gracias a esta caracterstica podemos
aprovechar la implementacin de una clase para crear otra a partir de ella
con todos los atributos y mtodos protegidos y pblicos de la clase
anterior a la cual se llama clase padre y la clase que hereda lo llamamos
clase hija. TURBO FISI como todo lenguaje orientado a objetos incluye
esta propiedad.

1.1.3. Objeto

Entidad provista de un conjunto de propiedades o atributos (datos) y de


comportamiento o funcionalidad (mtodos) los mismos que
consecuentemente reaccionan a eventos. Se corresponde con los objetos
reales del mundo que nos rodea, o a objetos internos del sistema (del
programa). Es una instancia a una clase.

1.1.4. Mtodo

Algoritmo asociado a un objeto (o a una clase de objetos), cuya


ejecucin se desencadena tras la recepcin de un "mensaje". Desde el
punto de vista del comportamiento, es lo que el objeto puede hacer. Un
mtodo puede producir un cambio en las propiedades del objeto, o la
generacin de un "evento" con un nuevo mensaje para otro objeto del
sistema.

1.1.5. Evento

Es un suceso en el sistema (tal como una interaccin del usuario con la


mquina, o un mensaje enviado por un objeto). El sistema maneja el
evento enviando el mensaje adecuado al objeto pertinente. Tambin se
puede definir como evento, a la reaccin que puede desencadenar un
objeto, es decir la accin que genera.

1.1.6. Mensaje

Una comunicacin dirigida a un objeto, que le ordena que ejecute uno de


sus mtodos con ciertos parmetros asociados al evento que lo gener.

1.1.7. Atributo

Contenedor de un tipo de datos asociados a un objeto (o a una clase de


objetos), que hace los datos visibles desde fuera del objeto y esto se
define como sus caractersticas predeterminadas, y cuyo valor puede ser
alterado por la ejecucin de algn mtodo.

1.1.8. Estado interno

Es una variable que se declara privada, que puede ser nicamente


accedida y alterada por un mtodo del objeto, y que se utiliza para
indicar distintas situaciones posibles para el objeto (o clase de objetos).
No es visible al programador que maneja una instancia de la clase.

1.1.9. Componentes de un objeto

Atributos, identidad, relaciones y mtodos.

1.1.10. Representacin de un objeto

Un objeto se representa por medio de una tabla o entidad que est


compuesta por sus atributos y funciones correspondientes.

En comparacin con un lenguaje imperativo, una "variable", no es ms que un


contenedor interno del atributo del objeto o de un estado interno, as como la
"funcin" es un procedimiento interno del mtodo del objeto.

1.2. Caracterstica de la programacin orientada a objetos (POO)

Hay un cierto acuerdo sobre exactamente qu caractersticas de un mtodo de


programacin o lenguaje le definen como "orientado a objetos", pero hay un
consenso general en que las caractersticas siguientes son las ms importantes:

1.2.1. Abstraccin

Denota las caractersticas esenciales de un objeto, donde se capturan sus


comportamientos. Cada objeto en el sistema sirve como modelo de un
"agente" abstracto que puede realizar trabajo, informar y cambiar su
estado, y "comunicarse" con otros objetos en el sistema sin revelar cmo
se implementan estas caractersticas. Los procesos, las funciones o los
mtodos pueden tambin ser abstrados y cuando lo estn, una variedad
de tcnicas son requeridas para ampliar una abstraccin.

1.2.2. Encapsulacin

Significa reunir a todos los elementos que pueden considerarse


pertenecientes a una misma entidad, al mismo nivel de abstraccin. Esto
permite aumentar la cohesin de los componentes del sistema. Algunos
autores confunden este concepto con el principio de ocultacin,
principalmente porque se suelen emplear conjuntamente.
1.2.3. Principio de ocultacin

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

Comportamientos diferentes, asociados a objetos distintos, pueden


compartir el mismo nombre, al llamarlos por ese nombre se utilizar el
comportamiento correspondiente al objeto que se est usando. O dicho
de otro modo, las referencias y las colecciones de objetos pueden
contener objetos de diferentes tipos, y la invocacin de un
comportamiento en una referencia producir el comportamiento correcto
para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo
de ejecucin", esta ltima caracterstica se llama asignacin tarda o
asignacin dinmica. Algunos lenguajes proporcionan medios ms
estticos (en "tiempo de compilacin") de polimorfismo, tales como las
plantillas y la sobrecarga de operadores de C++.

1.2.5. Herencia

Las clases no estn aisladas, sino que se relacionan entre s, formando


una jerarqua de clasificacin. Los objetos heredan las propiedades y el
comportamiento de todas las clases a las que pertenecen. La herencia
organiza y facilita el polimorfismo y el encapsulamiento permitiendo a
los objetos ser definidos y creados como tipos especializados de objetos
preexistentes. Estos pueden compartir (y extender) su comportamiento
sin tener que volver a implementarlo. Esto suele hacerse habitualmente
agrupando los objetos en clases y estas en rboles o enrejados que
reflejan un comportamiento comn. Cuando un objeto hereda de ms de
una clase se dice que hay herencia mltiple.

1.2.6. Recoleccin de basura

La Recoleccin de basura o Garbage Collection es la tcnica por la cual


el ambiente de Objetos se encarga de destruir automticamente, y por
tanto desasignar de la memoria, los Objetos que hayan quedado sin
ninguna referencia a ellos. Esto significa que el programador no debe
preocuparse por la asignacin o liberacin de memoria, ya que el entorno
la asignar al crear un nuevo Objeto y la liberar cuando nadie lo est
usando. En TURBO FISI trataremos de incluir este importante tema de
la programacin orientada a objetos.

2. Elemento del Lenguaje

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

Existen dos tipos de comentarios: comentarios de una sola lnea, se utilizar la


doble barra inclinada (//); este smbolo servir para ignorar todo lo que aparezca
hasta el final de la lnea. Comentarios mistilnea, podrn ocupar ms de una
lnea utilizando los caracteres /* y */, que indicaran respectivamente el inicio y
el final del comentario. Todos los caracteres incluidos entre estos dos smbolos
sern ignorados.

2.3. Tipos de datos estndar

2.3.1. Datos numricos

a) Enteros.

Se considera entero cualquier valor numrico sin parte decimal


independientemente de su rango. Para declaracin de un tipo de dato
entero se utilizara la palabra reservada entero.

b) Reales.

Se considera real cualquier valor numrico con parte decimal,


independiente de su rango o precisin. Para la declaracin de un tipo de
dato real se utiliza la palabra reservada real.

2.3.2. Datos lgicos

Se utiliza la palabra reservada logico en su declaracin

2.3.3. Datos de tipo carcter

Se utiliza la palabra reservada caracter en su declaracin.


2.3.4. Datos de tipo cadena
Se utiliza la palabra reservada cadena para su declaracin. A no ser que
se indique lo contrario se consideran cadenas de longitud variable. Las
cadenas de caracteres se consideran como un tipo de dato estndar pero
estructurado (se podr considerar como arreglo de caracteres).

2.4. Constantes de tipos de datos estndar

2.4.1. Numricas enteras

Estn compuestas por los dgitos (0-9) y los signos + y utilizados como
prefijos.

2.4.2. Numricos reales.

Los numero reales en coma fija utilizan el punto como separador


decimal, adems de los dgitos (0-9), y el carcter de signo (+ y -). En
los reales en coma flotante, la mantisa podr utilizar los dgitos (0-9), el
carcter signo (+ y -) y el punto decimal (.). el exponente se separar de
la mantisa mediante la letra E y la mantisa estar por el carcter de signo
y los dgitos.

2.4.3. Lgicas

Solo podrn contener los valores de verdad (verdadero) y falso.

2.4.4. De carcter
Cualquier carcter valido del juego de caracteres utilizados, delimitado
por los separadores .

2.4.5. De cadena

Secuencia de caracteres validos del juego de caracteres utilizados,


delimitados por separadores .

3. Operadores

3.1. Operadores aritmticos

Los operadores aritmticos que usaremos son los siguientes:

Operador Nombre Significado Ejemplo


- Negacin Valor negativo de x -y
- Resta Resta y de x x = -y;
+ Ms unario Valor positivo de x x = + y + 2;
+ Suma Suma x e y z = x + y;
* Multiplicacin Multiplica x por y z = x * y;
/ Divisin Divide x por y z = x / y;
div Divisin entera Divisin entera de x por y z = x div y;
mod Modulo Resto de x dividido por y z = x mod y;
++ Incremento Incrementa x despus de usar x++;
-- Decremento Decrementa x antes de usar --x;
^ Exponencial Se eleva x base a un z = x^y
exponente y

Ejemplos:
a*b/c mod d //multiplicacin, divisin, modulo

Los operadores de incremento y decremento sirven para incrementar y


decrementar en uno los valores almacenados en una variable.

variable++ //pre incremento


++variable //pos incremento
Variable-- //pos decremento
--variable //pre decremento
++var; equivale a var = var + 1;
--var; equivale a var = var - 1;

Los formatos posfijos se conforman de modo diferente segn la expresin que


se le aplique.

var = ++n; equivale a n=n+1; var=n;


var = n++; equivale a var = n; n = n+1;

3.2. Operadores de relacin

Operador Nombre Ejemplo


== Igual a x == y;
< Menor que x <y;
> Mayor que x > y;
<= Menor o igual que x <= y;
>= Mayor o igual que x >= y;
<> Distinto de x <> y;
! Negacin unaria !x

3.3. Operadores de lgicas

Los operadores lgicos nos permiten manipulas valore booleanos verdad falso.

Operador Nombre Ejemplo


& Y lgico Si(x & y)
| O lgico Si(x | y)
! Negacin !y
Ejemplo:

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

3.4. Prioridad bsica de operadores

Mas alta
Operadores Prioridad
Primarios (), [], .
Unarios -, +, !, tipo, nuevo
Multiplicativos *, /, div, mod
Incrementos ++, --
Aditivos +, -
De relacin =, <, <=, >, >=, <>
Baja

3.5. Prioridad avanzada de operadores

4. Clase, objetos constructores mtodos y herencia.

4.1. Clase

Una clase es una coleccin de objetos dato y mtodo especifico. Es la unidad de


construccin fundamental en el lenguaje TURO FISI. Y se define con la
palabra reservada clase. Para tener un estndar de programacin se va ha
establecer para nombrar las clases la utilizacin de una letra mayscula para la
primera letra del nombre de la clase y si se utiliza nombres compuestos por ms
de una palabra se debe escribir en mayscula el primer carcter de cada palabra.
Esta regla es arbitraria, si le gusta y para que tenga un estilo elegante puede
seguir en caso contrario no. Un objeto es una instancia de una clase.

Una definicin de una clase esta compuesto de una declaracin de y un cuerpo.


Donde el cuerpo contiene a los atributos y mtodos. Para declarar una clase se
tiene en cuenta lo siguiente palabras reservadas e identificadores una secuencia
de clases padres opcional.

Sintaxis:

<modificadores> clase <identificador> hereda_de <padre>


implementa <interfaz_1>, <interfaz_2>, ,<interfaz_n>{
//cuerpo de la clase (<atributos> y <mtodos>)
}//fin de la clase

Los modificadores pueden ser pblico, abstracto, final.

Una clase abstracto es aquella que tiene uno o ms mtodos abstractos y no se


puede instanciar. Su fin es la de servir como una super clase, las clases que
heredan de ella deben implementar los mtodos abstractos de la clase padre o
seguirn abstractos.
Una clase final es cuando no puede heredar a otras clases todos sus mtodos son
finales. Mas adelante hablaremos de herencia en ello trataremos mas sobre ste.

Una clase publica puede ser accedido de otros paquetes y debe tener su propio
archivo.

Ejemplos:

//una clase incluido mtodos que mas adelante se explicar


publico clase HolaMundo{
publico cadena cad;//declaracin de variable de tipo
cadena
publico HolaMundo(){
cad=Hola Mundo;/*inicializa la variable cad */
}
estatico publico nada principal(){
HolaMundo hm=nuevo HolaMundo();
escribir(hm.cad);
}
}

publico clase Punto {


privado entero x,y;
publico Punto (){
x=0;
y=0;
}
publico guardarX(entero x){
esta.x=x;
}
publico obtenerX(){
retornar x;
}
publico guardarY(entero y){
esta.y=y;
}
publico obtenerY(){
retornar y;
}
}

4.2. Objetos
Los objetos nos otra cosa que variables cuyo tipo de dato es una clase. Cuya
sintaxis es:

<modificador> <nombreDeClase> <nombreDelObjeto>

Ejemplo:

Vamos declarar objetos de la clase del ejemplo anterior clase Punto


Punto punto1, punto2;

Tambin puede ser as:

privado Punto punto1, punto2;

Hay que tener en cuenta de que al declarar un variable no se est creando un


objeto. Solo se creara una referencia.

Los objetos realmente se crean con el operador nuevo

Nombredelobjeto =nuevo nombreclase();

Ejemplo:

punto1=nuevo Punto();
punto2=nuevo Punto(5,6);

Los objetos pueden utilizar los mtodos de su clase correspondiente.

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:

publico clase Alumno{


privado cadena nombre= Alejandro;
privado entero cdigo= 10121230;

}
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.

El constructor de una clase se define como un mtodo con el mismo nombre de


la clase y que no devuelve valor alguno, sin necesidad de la palabra reservada
nada. Un constructor puede tener parmetros, en una clase puede haber varios
constructores con diferentes parmetros. La nica forma como se puede llamar
al constructor es con el operador nuevo, as:
nuevo llamadaalconstructor

Ejemplo:

publico clase Punto {


privado entero x,y;
//constructor por defecto
publico Punto (){
x=0;
y=0;
}
Constructor con dos parmetros
publico Punto (entero x1,entero y1){
x=x1;
y=y1;
}
publico guardarX(entero x){
esta.x=x;
}
publico obtenerX(){
retornar x;
}
publico guardarY(entero y){
esta.y=y;
}
publico obtenerY(){
retornar y;
}
}
Luego llamamos al constructor de la siguiente forma:

Punto punto1;
punto1=nuevo Punto(5,9);
Si no se declara un constructor TURBO FISI crea automticamente por defecto.

4.4. Niveles de acceso

En TURBO FISI los niveles de acceso a los componentes de una clase se


dividen de la siguiente manera: publico, privado, protegido, estatico.
publico indica que el elemento se puede utilizar dentro de la clase, dentro de
las clase descendientes y tambin desde cualquier objeto de la clase.
privado Indica que el elemento solo puede ser utilizado dentro de la clase. No
dentro de las clases descendientes. No desde un objeto de la clase.

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.

estatico no necesita de un objeto para ser usado, sino se puede utilizar


directamente a travs de la clase. Puede ser modificado y conserva su ltimo
valor para que pueda ser utilizado desde otras clases. Es decir permite compartir
su valor a diferentes clases independientemente de los objetos.
Final. Indica que el elemento no podr ser modificado por nada, solo podr ser
utilizada.

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:

<modificadorNivelAcceso> <tipoDeDato> <identifidacorMetodo>


(<listaParametros>)

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:

cadena leerNombre() //devuelve un dato de tipo cadena


void mostrarDatos(cadena datos) //muestra los datos
entero edad(Alumno alumno) //devuelve la edad de alumno

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:

publico abstracto clase Padre{


//campo de atributos y metodos
}
Publico clase Hijo hereda_de Padre{
//campo de atributos y metodos
}

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()

La clase Figura declara las caractersticas comunes a dichas figuras concretas,


por tanto no tiene forma, ni rea, ni permetro esto lo expresamos declarando la
clase Figura como clase abstracto declarando los mtodos miembros
calcularArea() y clacularPerimetro() como abstracto la clase Figura es como
sigue:

publico abstracto clase Figura{


protegido entero x,y;
publico Figura(entero x1, entero y1){
x=x1;
y=y1;
}
publico abstracto real calcularArea();
publico abstracto real calcularPerimetro();
publico cadena mostrarAreaPerimetro(){
retornar calcularArea()+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.

publico clase Rectangulo hereda_de Figura{


protegido real ancho, alto;
publico Rectangulo(entero x, entero y,real ancho1, real alto1){
super(x=y);
ancho=ancho1;
alto=alto1;
}
publico real calcularArea(){
retornar ancho*alto;
}
publico abstracto real calcularPerimetro(){
retornar 2*(ancho+alto);
}
}

La primera sentencia en el constructor de la clase derivada es una llamada al


constructor de la clase base, para ello se emplea la palabra reservada super. El
constructor de la clase derivada le llama al constructor de la clase base y le pasa
las coordenadas del punto x, y despus inicializa sus datos ancho y alto.

En la definicin del mtodo calcularArea(), se calcula el rea del rectngulo


como producto de ancho por alto y se devuelve el resultado. En la definicin del
mtodo calcularPerimetro(), se calcula el permetro del rectngulo como dos
veces la suma de ancho mas alto y se devuelve el resultado con la sentencia
retornar.

La clase Circulo tiene el siguiente desarrollo.

publico clase Circulo{


protegido real radio;
publico Circulo(entero x, entero y, real radio1){
super(x,y)
radio=radio1;
}
publico real calcularArea(){
retornar Math.PI*radio*radio;
}
publico abstracto real calcularPerimetro(){
retornar 2*Math.PI*radio;
}
}
Ahora podemos declarar los objetos correspondientes a cada figura y mostrar su
rea y permetro, as:

Circulo circulo=nuevo Circulo(50,50,10);


Rectangulo rectan=nuevo Rectangulo(20,20,50,50);
real area1=circulo.calcularArea();
real area2=rectan.calcularArea();

A la declaracin de diferentes mtodos con el mismo nombre se llama


polimorfismo es decir un solo mtodo con diferente forma o implementacin del
cuerpo del mtodo.

5. Estructura de u programa en TURBO FISI

5.1. Programa en TURBO FISI

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.

5.2. Declaracin de constantes

Para declarar constante solo antepondremos la palabra constante al identificador


declarado.

Sintaxis:

<modificador> <tipo> constante <identifidacor> = <expresion>


Ejemplo:
cadema constante cad= hola numdo

5.3. Declaracin de variables

Se realiza de la siguiente manera

Sintaxis:

<modificador> <tipo> <identificador_1>;


<modificador> <tipo> <identificador_1>,
<identificador_2,<identificador_n>;
Ejemplo:
privado entero num, id;

5.4. Biblioteca de funciones

TURBO FISI incluye diferentes funciones utilitarios todos se encuentran en el


paquete fMath, fUtil, fArchivos
Funcin Significado
abs() Devuelve el valor absoluto de la expresin numerica
aleatorio(inic,fin) Devuelve un numero aleatorio entre los parmetros
arctan(x) Devuelve el arco cuya tangente es la expresin numrica x
exp(x) Devuelve el valor de e^x
ln(x) Devuelve el logaritmo natural de x
poten(x,y) Devuelve el valor de x elevado a la potencia y x^y

5.5. Mtodos de entrada y salida de datos

Los flujos bsicos de manejo de datos nos permiten realizar las operaciones
bsicas, a travs de la pantalla o otros terminales.

5.5.1. Mtodo escribir(cadena)

Este mtodo sirve para mostrar por pantalla el contenido de la variable


cadena pasado como parmetro

Ejemplo:

escribir(Hola Mundo) //Esta instruccin mostrara por


pantalla Hola Mundo

5.5.2. Mtodo leer()

Este mtodo sirve para leer los datos de entrada por teclado como una
cadena y luego se ara el tratamiento respectivo.

Ejemplo:

cadena cad=leer(); //lee los datos y le asigna a la


variable cad

5.6. Instruccin de asignacin

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.

5.7. Sentencia de retorno

La sentencia retornar proporciona una salida de un mtodo con un valor de


retorno los mtodos deben no deben ser de tipo nada pues en ese caso producir
un error ya que los mtodos de este tipo no retornan nada. Las sentencias
retorno pueden aparecer en cualquier parte de una estructura de control; produce
un retorno inmediato del mtodo. El valor de la expresin a continuacin del
retorno debe coincidir con el tipo de retorno del mtodo.
Ejemplo:

Publico entero calcularProducto(entero a, entero r){


entero m;
m=a+r;
retornar m;
}

5.8. Declaracin de tipos de datos estructurados

Un arreglo es un grupo de variables (objetos) de tipos similares que se conoce


con un identificador comn. Los diferentes elementos contenidos en un arreglo
se definen por un ndice y se accede a ellos utilizando su ndice; los ndices
arrancan desde 0. Los arreglos pueden ser multidimensionales y al igual que los
objeto se instancian utilizando la palabra reservada nuevo.

5.8.1. Arreglos unidimensionales

Para crear un arreglo de un tipo determinado primero debe existir la


clase de la cual se va ha declarar una instancia.

Sintaxis:

<modificador> <tipo> <identificador> []; //declaracin

El operador nuevo sirve para asignar memoria y crear un arreglo de una


dimensin:

Sintaxis:

<identificador> = nuevo <tipo> [<longitud>];


//instanciacin

Tambin se puede hacer esto:

<modificador> <tipo> <identificador> []= nuevo <tipo>


[<longitud>];
Ejemplos:

privado entero datos[];


datos=nuevo entero[10];
privado entero digitos[]=nuevo entero[10];

5.8.2. Arreglos multidimensionales

Los arreglos multidimensionales son arreglos de arreglos, es una


estructura muy importante .la declaracin es similar a la declaracin de
arreglos unidimensionales.

Sintaxis para arreglos de dos dimensiones:

<modificador> <tipo> <identificador> [][]; //declaracin

La instanciacin es como sigue:

<identificador> = nuevo <tipo> [<longitud1>]


[longitud2]; //instanciacin

<modificador> <tipo> <identificador> [][]= nuevo <tipo>


[<longitud1>][<longitud2>];

Similar para dimensiones mayores a dos.

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.

El termino flujo de control se refiere al orden en se ejecutan las instrucciones del


programa. El flujo normal de un programa es el secuencial. Este termino significa
que las sentencias se ejecutan en secuencia una despus de otra, en el orden en que
se sita dentro del programa.

6.1. Estructuras secuenciales.

Es una estructura cuando una instruccin sigue a continuacin de otra


instruccin dentro del programa. Las tareas se suceden de tal modo que la salida
de una es la entrada de la siguiente y as sucesivamente hasta finalizar el
programa.

Sintaxis:
<instruccin_1>
<instruccin_2>
<instruccin_3>

<instruccin_n>

Ejemplo:

publico clase Operaciones{

publico estatico nada principal(){


entero a,b,c,d,e; //declaracin de variables
a=b+c; //instruccion1
d=a*b; //instruccion2
e=d-b; //instruccion3
}
}

6.2. Estructuras selectivas

Las estructuras selectivas pueden ser simple dobles y mltiples.

6.2.1. Estructuras selectivas simple

Las estructuras de seleccin simples si ejecuta una determinada accin


cuando se cumple una determinada condicin, evala la condicin y:

Si la condicin es verdadera (verdad) entonces ejecuta la instruccin o


instrucciones.

Si la condicin es falsa (falso) entonces no hace nada.

Sintaxis:

Si(expresionLogica) { //si existe una sola accin no


es necesario {}
Bloquesentenia_1
Bloque desentecias_2

Bloquedesentencias_n
}

6.2.2. Estructuras selectivas dobles

la extensin de la estructura anterior para incluir una alternativa de


ejecucin si es que no se cumple la condicin.

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:

publico entero mayor(entero a, entero b){


entero mayor;
si(a>b)
mayor=a;
si_no
mayor=b;
retornar mayor;
}

6.2.3. Estructuras selectivas mltiples

Como sabemos en la prctica es necesario que existan mas de elecciones


posibles, es en este caso que la estructura de seleccin mltiple nos sirve.
Esta estructura evaluara la expresin que podr tomar n valores distintos:
Sintaxis:

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:

publico cadena estado(entero x){


cadena est;
segn_sea(x){
caso 1: est= soltero;
romper;
caso 2:est= casado;
romper;
caso 3:est= divorciado;
romper;
caso 4:est= vuido;
romper;
diferente: est= abandonado;
romper;
}
retornar est;
}
Las estructuras se pueden anidar es decir pueden existir estructuras
dentro de otra estructura.

Si(expresionLogica){ //si la expresin lgica es


verdad
Si(expresionLogica){ //un si anidado
Bloquesentenia_1
Bloque desentecias_2

Bloquedesentencias_n
}
Si_no{ //si la expresionLogica es falso
Bloquesentenia_1
Bloque desentecias_2

Bloquedesentencias_n
}
}
Si_no{ //si la expresionLogica es falso
Bloquesentenia_1
Bloque desentecias_2

Bloquedesentencias_n
}

6.3. Estructuras repetitivas

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.

6.3.1. Estructuras repetitivas mientras

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;
}

6.3.2. Estructuras repetitivas hacer mientras

El bucle hace mientras es muy parecido al bucle mientras, sin embargo


existe una gran diferencia y es que el cuerpo del bucle esta encerrado
entre las palabras reservadas hacer y mientras, de modo que las
sentencias de dicho cuerpo se ejecutan al menos una vez, antes de que se
evalan la expresin lgica. Dicho de otro modo el cuerpo del bule
siempre se ejecuta al menos una vez, incluso aunque la expresin lgica
sea falsa.

Sintaxis:

hacer {
<conjunto de instrucciones>
}mientra(<expresin_logica>);

Ejemplo:
entero suma=10;
hacer{
suma=suma+10;
Suma=suma-5;
} mientras(suma<100);

Nota: estos dos bucles finalizan cuando la condicin a evaluar es


(falso). El programador seleccionara de a cuerdo al problema a resolver
cualquiera de estos bucles.

6.3.3. Estructuras repetitivas para


Cuando se conoce de antemano el nmero de veces a repetir una
instruccin de un bucle. En estos casos se debe usar las estructuras para.
Esta estructura nos permite ejecutar las sentencias un nmero especfico
de veces.

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;
}

7. Palabras reservados y smbolos reservados.

Palabra y/o Smbolo Significado


escribir Escribe una o ms expresiones en un dispositivo de salida
leer Lee una o ms variables desde un dispositivos de
entrada(consola, archivo, etc)
clase Inicio de la declaracin de una clase
importar Importa una clase o metodo
paquete Contenedor que agrupa clases
interface Inicio de la declaracin de una interface
abstracto Declaracin de mtodos abstractos(sin implementacin)
estatico Declaracin de atributo o mtodo de una clase o estaticos
privado Modificador de acceso privado a un atributo o mtodo
protegido Modificador de acceso a un atributo o mtodos que
permiten el acceso a los miembros de una clase y de las
clases hijas
publico Modoficador de acceso publico a un atributo o clase
final Modificador de clase
caracter Dato de tipo carcter
logico Variable de tipo booleano
entero Dato de tipo entero (int, long short)
real Tipo de dato real (float, double,
cadena Cadena de caracteres o palabras
constante Declaracin de variables o atributos constantes
verdad Variable lgico verdad true
falso Valor lgico false
hereda_de Indica que una clase deriva de otra superclase
super Permite acceso a miembros de la superclase
implementa Indica que una clase implementa una interface
nuevo Reserva espacio en memoria para un objeto de una clase y
devuelve una referencia a dicho objeto
este Puntero que referencia as mismo(this)
nada Tipo de retorno de mtodos que no devuelven valore (void)
nulo Constante de puntero nulo
retornar Indica el valor de retorno de una funcin
hacer do, inicio
mientras While, inicio de la estructura repetitiva mientras
para Inicio de una estructura repetitiva for o para
si Inicia la estructura selectiva simple if
Si_no Else alternativa si no se cumple la condicin
segun_sea Inicia la estructura selectiva multiple switch
caso Seleccin de alternativas del switch (case)
defecto Alternativa por defecto de la estructura segn_sea
salto Interrumpe una sentencia y sale de ejecucin (break)
- Menos unario
- Resta
= Operador de asignacin
* Multiplicacin
. para accesar a miembro de una clase
. Separador de decimales
/ Divisin real
// Comentario de una sola lnea
[] ndice de arreglo
^ Exponenciacin
{} Se utiliza para definir bloques de cdigo, definir mbitos y
contener los valores iniciales de vectores.
() Contiene lista de parmetros tanto en la definicin de un
mtodo como en la llamada de la misma.
, Separa identificadores consecutivos en la declaracin de
las variables y en la lista de parmetros
; Separa sentencias
Comilla simple delimitador de datos de tipo carcter
Delimitador de datos de tipo cadena
+ Mas unario
+ Suma
& Concatenacin
< Menor que
<= Menor o igual que
<> Diferente de
== Igual a
> Mayor que
>= Mayor o igual que
&& Operador lgico and
|| Operacin lgica or
Analizador Lxico

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.

La estructura general del analizador lxico consiste en un bucle en el que se va recorriendo


la entrada, buscando por un emparejamiento con uno de los patrones/lexemas especificados
y, cuando se encuentra, se retorna esa informacin al analizador sintctico. Como an no
tenemos el analizador sintctico simplemente iremos aadiendo los terminales al final de
una lista.

1. Lxico del lenguaje

Definicin del lxico y los tokens asociados a cada uno de los componentes lxicos

No COMPONENTE LEXICO TOKEN


1 Palabra reservada(escribir) 101
2 Palabra reservada(leer) 102
3 Palabra reservada(clase) 103
4 Palabra reservada(importar) 104
5 Palabra reservada(paquete) 105
6 Palabra reservada(interface) 106
7 Palabra reservada(abstracto) 107
8 Palabra reservada(estatico) 108
9 Palabra reservada(privado) 109
10 Palabra reservada(protegido) 110
11 Palabra reservada(publico) 111
12 Palabra reservada(final) 112
13 Palabra reservada(caracter) 113
14 Palabra reservada(logico) 114
15 Palabra reservada(entero) 115
16 Palabra reservada(real) 116
17 Palabra reservada(cadena) 117
18 Palabra reservada(constante) 118
19 Palabra reservada(verdad) 119
20 Palabra reservada(falso) 120
21 Palabra reservada(hereda_de) 121
22 Palabra reservada(super) 122
23 Palabra reservada(implementa) 123
24 Palabra reservada(nuevo) 124
25 Palabra reservada(este) 125
26 Palabra reservada(nada) 126
27 Palabra reservada(nulo) 127
28 Palabra reservada(retornar) 128
29 Palabra reservada(hacer) 129
30 Palabra reservada(mientras) 130
31 Palabra reservada(para) 131
32 Palabra reservada(si) 132
33 Palabra reservada(si_no) 133
34 Palabra reservada(segn_sea) 134
35 Palabra reservada(caso) 135
36 Palabra reservada(defecto) 136
37 Palabra reservada(salto) 137
38 OperadorAritmetico (+) 201
39 OperadorAritmetico (-) 202
40 OperadorAritmetico (*)
41 OperadorAritmetico (^) 203
42 OperadorAritmetico (/) 204
43 OperadorAritmetico (%) 205
44 OperadorLogicosComparacion(==) 301
45 OperadorLogicosComparacion(<>) 302
46 OperadorLogicosComparacion(>) 303
47 OperadorLogicosComparacion(>=) 304
48 OperadorLogicosComparacion(<) 305
49 OperadorLogicosComparacion(<=) 306
50 OperadorLogicosComparacion(!) 307
51 OperadorLogicosComparacion(&&) 308
52 OperadorLogicosComparacion(||) 308
53 OperadoresEspeciales({) 401
54 OperadoresEspeciales(}) 402
55 OperadoresEspeciales(() 403
56 OperadoresEspeciales()) 404
57 OperadoresEspeciales(,) 405
58 OperadoresEspeciales(;) 406
59 OperadoresEspeciales([) 407
60 OperadoresEspeciales(]) 408
61 OperadoresEspeciales(.) 409
62 OperadorAsignacion(=) 501
63 OperadorConcatenacion(&) 502
64 Identificadores 601
65 nmeros 701
66 error 999
Observacin:
En caso entra un carcter que no este contemplado se enva el cdigo 999 lo cual indica que
hay un error

2. Especificacin formal del lxico


a) Autmata
Autmata para el analizador lxico
Reconoce Identificadores, nmeros y operadores lgicos

Reconoce operadores aritmticos


Reconoce operadores especiales

b) Expresiones regulares

Identificador: (L/_ )(L/d/_)*


Entero: dd*
Real : dd*.d*
Operadores Lgicos de Comparacin: >,>=,<,<=,==,!,!=,&,&&,||
Operadores Aritmticos: +,-,*, ^, /, %
Operadores Especiales: { , } , ( , ) , . , ;,[,]
Operador de Asignacin: =
Operador de Concatenacin: &
c) Gramtica Regular

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

3. Interface del analizador lxico

El interface con las palabras reservadas


Analizando un programa fuente
Luego el mensaje de error o xito del anlisis
El cdigo del programa
El escner y el bucle de anlisis

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 1: //para identificador o palabra reservada


if((Character.isDigit(a)) || a=='_'||(Character.isLetter(a))){
buffer=buffer+a;
e=1;
}
else
return palabras.buscarPalabra(buffer)!=null ?
palabras.buscarPalabra(buffer).getToken():701; // identificador o reservada
i++;
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 !
}

case 12: //estados 10 y 11


if(a=='&'){
buffer=buffer+a;
//e=11;
ind++;
return 408; //operador &&
}
else {
return 502; //operador &
}
case 14: //estados 14 y 15
if(a=='|'){
buffer=buffer+a;
//e=15;
ind++;
return 409; //operador ||
}
else {
return 410; //operador |
}
case 16: //estados 16 y 17
if(a=='+'){
buffer=buffer+a;
//e=17;
ind++;
return 310; //operador incremento ++
}
else {
return 301; //operador suma +
}
case 18: //estados 18 y 19
if(a=='-'){
buffer=buffer+a;
//e=19;
ind++;
return 311; //operador decremento
}
else {
return 302; //operador resta -
}
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 ""
case 33: return 209;//estado 23 ""
//default :return 999;
}
if(a=='\n'){
numLinea++;
}
ind++;
}
} }
El bucle donde se analiza

private void analisisLexico(){


Token tok;
String s="";
boolean fin=true;
int op;
mh.clear();
do{
op=this.analiza();
tok=new Token();
switch(op/100){
case 0: s+="\n\nEl programa termino con exito!!!\n\nNumero de lineas del
programa : "+(numLinea+1);
fin=false;
break;
case 1: tok.setId(op);
tok.setN(buffer);
tok.setTipo("Palabra Reservada");
mh.put(buffer, tok);
break;
case 2: tok.setId(op);
tok.setN(buffer);
tok.setTipo("Simbolos Especiales");
mh.put(buffer, tok);
break;
case 3: tok.setId(op);
tok.setN(buffer);
tok.setTipo("Operadores Aritmeticos");
mh.put(buffer, tok);
break;
case 4: tok.setId(op);
tok.setN(buffer);
tok.setTipo("Logicos y Relacionales");
mh.put(buffer, tok);
break;
case 5: tok.setId(op);
tok.setN(buffer);
tok.setTipo("De Asignacion");
mh.put(buffer, tok);
break;
case 6: tok.setId(op);
tok.setN(buffer);
tok.setTipo("Numericos");
mh.put(buffer, tok);
break;
case 7: tok.setId(op);
tok.setN(buffer);
tok.setTipo("Identificador");
mh.put(buffer, tok);
break;
case 8: s+="\n\nInicio del programa con letra o / o _ para inicio de comentarios o
identificadores y otros : "+(numLinea+1);
fin=false;
break;
default:s+="El programa finalizado por un error en la linea :"+(numLinea+1);fin
=false;
}
}while(fin);
pm.reset();
addDatos(mh);
matriz.removeAll();
matriz.add(pm, java.awt.BorderLayout.CENTER);
pm.setVisible(true);
this.listaToken(s);
}

Das könnte Ihnen auch gefallen