martes, 9 de octubre de 2007

Separar una expresión en tokens

//Ejemplo expresion regular para separar una expresion en tokens
//JAFH Ago 07
import std.conv;
import std.stdio;
import std.string;
import std.regexp;

char[] numero(inout char[]s){
auto m = std.regexp.search(s, r"[0-9]*");
if(m){
s=m.post();
return m.match(0);
}else return "";
}
char[] operador(inout char[]s){
auto m = std.regexp.search(s, r"[*|+]");
if(m){
s=m.post();
return m.match(0);
}else return "";
}
char[] separador(inout char[]s){
auto m = std.regexp.search(s, r"[,]");
if(m){
s=m.post();
return m.match(0);
}else return "";
}
void separaTokens(char[] s){
int i=0;
char[] aux;
while(s.length>0){
aux=numero(s);
//writefln(aux,".,queda:",s);
if(aux=="")
aux=operador(s);
writefln(aux,",queda:",s);
if(i++>10)break;
}
}
//
void main(){
char[] s="2345*56+99*96";
separaTokens(s);
getch();
}

No hay comentarios: