expresiones regulares javascript
hola chicos necesito hacer un programa que al escribir una funcion por ejemplo a = 2 - 4 esto se pueden separa de forma [0] = a , [1] = = [2] = 2 asi en secuncia pero que tambien me indique el tipo de dato que es por ejemplo [0] = a constante , [1] = = operador [2] = 2 numerico no se si me explique pero tambien que yo ponga if / else en una expresion cualquiera me diga el nombre no se como poder hacer que me salga el nombre de cada operador , constante , comprarador etc.. no se si me puedan dar una idea de como hacerlo...
- Inicie sesión o regístrese para enviar comentarios
Tienes que hacer un
Tienes que hacer un analizador léxico y un parser para ese analizador.
Esto se puede hacer en cualquier lenguaje, Javascript por ejemplo, para en este foro encontrarás más ayuda sobre Java (que es un lenguaje diferente)
Suerte
y como se hace un analizador
y como se hace un analizador lexico .... en general ....u otro metodo mas facil ..
Tomando cada carácter y
Tomando cada carácter y formando tokens, un token es un "algo" que tiene algún significado en tu lenguaje. Por ejemplo, los números podrían ser un tipo de token, las letras otro y los símbolos otro.
En tu ejemplo quieres formar los tokens:
Entonces tienes que ir caracter por caracter y viendo si el caracter en turno forma parte o no de un tipo de token.
Luego tienes que recorrer el arreglo, y ver si el elemento en turno es o no parte de tu token
parece una letra, podrías formar el token "VARIABLE"
por ejemplo el primer elemento de tu arreglo:
Y eso es todo, ese es el analizador léxico. Luego tienes que revisar si lo que está en el analizador es válido o no ( analizador semántico ) por ejemplo
la siguiente entrada podría no ser válida en tu lenguaje:
Por que la variable esta del lado derecho en vez del izquierdo, pero puede también ser que en tu lenguaje eso sea una sintaxis válida, por ejemplo si aceptaras notación prefija.
bueno aqui el punto es que
bueno aqui el punto es que solo reconosca el tipo de operador, letra etc de cualquier funcion que pongasmos entonces...
este es mi codigo donde hace es funcion de separar cada variable...
entonces pienso yo que solo es poner algo asi como tu me das el ejemplo y no importa si es al reves osea que quede 4-2 = a solo es identificar la funcion..
function reconocer(){
var expresion = document.getElementById('expresion');
var resultado = document.getElementById('resultado');
var r= expresion.value.split(" ");
resultado.innerHTML="";
for (var i=0; i";
}
}
no se si el codigo o la explicacion anterior se pueda adaptar en este codigo... ??
Re: expresiones regulares
Tal vez quieras utilizar algunas otras expresiones regulares:
Ver demo.
~~~
si esta bien lo que pusiste
si esta bien lo que pusiste pero aqui es que tu puedas poner cualquier expresion sea a = 2 - 4 o if = 3 <= 2 etc ...
mira este es mi codigo completo ...
lo puse arriba en la
lo puse arriba en la descripcion...
Si, si se puede adaptar, de
Si, si se puede adaptar, de hecho es lo que jpaul te puso en su demo.
Tienes que definir que significa "cualquier" porque aunque sea obvio para tí, tu programa lo tiene que saber, por ejemplo
es una variable? dos (una llamada i y otra f) ? es un operador? etc. Que tal af? o fi?
En el programa que pusiste estás separando por espacios, por lo que fallaría si ingresas algo sin espacios, por ejemplo:
Entonces lo que puedes que hacer para separar en tokens es:
1.- Leer la entrada caracter por caracter. string.split() en javascript hace eso.
2.- Definir que cosa conforma en token y cuando termina un token y empieza otro. Generalmente los espacios y los operadores son delimitadores.
3.- Definir que tipos de token vas a soportar: números, identificadores, operadores, y listarlos.
4. - Crear un token y clasificarlo con la regla que tu pusiste
5.- Agregarlo a una lista (o arreglo) de tokens.
Estos pasos traducidos en pseudo-código serían algo como:
El código final es obviamente mucho más largo y complejo que esto, pero intenta ir resolviendo cada punto uno por uno antes de intentar saltar al otro. Crea funciones para que no tengas toda la logica en una sola funcion que crezca y crezca sin control.