You are on page 1of 4

Se validara em javacc una estructura mientras que teniendo en cuenta con las restricciones

colocadas en el proyecto que son las siguientes

Debe tener la siguiente estructura:


WHILE condicion
sentencia
END
Restricciones:
1. Donde La sentencia es una expresin aritmtica con los operadores (+,-,*,/). Puede llevar
variables y constantes
2. Las variables empiezan en letra y pueden ir seguidos de letras, dgitos y guiones bajos, los
guiones bajos no pueden ir seguidos.
3. La constante puede ser entero o decimal
4. La condicin est conformada por los operadores relacionales: >,>=,<,<=,==,~= y
operadores lgicos & y |. Ejemplo:
Var op_relacional Const
Const op_relacional Var
(Var op_relacional Const) (& o |) (Const op_relacional Var)
Siguiendo la estructura bsica de javacc tenemos lo siguiente:

Se agrega las opciones de javacc para su compilador.


Se crean el Parse_Begin y Parse_END donde creamos nuestra clase, con su mtodo que se va
ejecutar (main), creamos un objeto de nuestra clase con el mismo nombre de la clase, y llamamos
al mtodo principal el cual esta encargado de validar si la estructura es correcta o no, y si esta bien
sale el mensaje Todo ha salido bien

En SKIP tendremos los token o las cadenas que no va a tener en cuenta que son los espacios , las
tabulaciones (\t) o los retorno de carro (\r)

Creamos como tokens privados el entero #ent y el decimal #dec con la siguiente estructura

Aquila estructura primero nos obliga a que si declaramos un entero o decimal con un signo
debemos de encerrarlo con negativo ejemplo: bien (-5) mal -5. Pero si no posee signo no son
necesarios los parntesis.
Esto sucede tambin con los decimales, pero aqui el digito antes de la coma o punto puede o no
estar, por ejemplo, algunas calculadoras acepta el .5 como 0.5 entonces aqu si lo permite.
Creamos la palabra mientras WHILE como un tokens pblico, para utilizar despus en los mtodos
recursivos, tambin hacemos con el finmientras END, el igual = , los operadores relacionales
oprelacional que nos permitirn hacer las condiciones , los operadores lgicos oplogicos, que nos
permitirn concatenar muchas condiciones, y declaramos tambin las variables var, que deben
comenzar con una letra, controlando que no tengan dos guiones seguidos, el cual puede o no
puede estar ejemplo a, a_, aa_.... ; la constante constante, que pueden ser un entero o un
decimal.

Creamos el metodo MD que nos va a retornar el signo de la multiplicacion y la division que son * ,
/.

Creamos el mtodo SR que va a retornar el signo menos y mas - , +

Creamos un mtodo F que nos va retornar una constante, una variable o en su efecto una
expresin E; E a su vez es un metodo que nos va a retornar T , SR que son +-, o las infinitas T que
haya.
T a su vez retornara F, MD */, F; y as se hace recursivo nuestro mtodo.

En el mtodo CB, se encuentra la expresin para el Condicional Bsico que debe estar por
obligacin entre parntesis, en nuestra expresin lo obligamos a esto, pero tambin a que este
tenga una variable o una constante, un operador relacional y luego una variable o constante por
ejemplo, (a>5):

En el metodo R nos va a unir un operalor lgico con cualquier operador bsico por ejemplo:
&(b==1) o |(a>=1).

En el mtodo C nos va a unir un Condicional Basico con muchos R que son como los anteriormente
explicamos, ejemplo de esto es asi: (a>=1)|(b==2) &(c<2)..

Las asignaciones debemos utilizar una variable, un igual y todas las expresiones que queremos
asiganarle, esto lo tenemos en el metodo valoresDevars:

Para valodar la expresin mientras utilizamos el mtodo estructuraMientras, comenzamos con la


la pabra WHILE que la controla <mientras> luego todas las condiciones posibles C() luego con EOL
que es un fin de lnea o Enter, osea que para la estructura luego de escribir WHILE luego la
condicin , por obligacin debe de seguir en la otra lnea o hundir Enter, luego utilizando
(valoresDevars ()<EOL>)* se harn todas las asignaciones posibles pero con fin de lnea o Enter y
por ultimo <finmientras> que es END.

El mtodo resolver llamara a la estruturaMientras() y validar que todo est bien.

You might also like