jueves, 11 de octubre de 2007

Ejemplo calculadora en polaca inversa

//Ejemplo calculadora en polaca inversa
//agregue el código de lista ligada y complete
//lo que se indica en comentarios
//si usa esta version debera entenderla y explicarla
//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){
if(m.pre.length==0){
s=m.post();
return m.match(0);
}else return "";
}else return "";
}
char[] operador(inout char[]s){
auto m = std.regexp.search(s, r"[*+]");
if(m){
if(m.pre.length==0){
s=m.post();
return m.match(0);
}else return "";
}else return "";
}
char[] separador(inout char[]s){
auto m = std.regexp.search(s, r"[,]");
if(m){
if(m.pre.length==0){
s=m.post();
return m.match(0);
}else return "";
}else return "";
}
void separaTokens(char[] s){
int i=0;
char[] aux;
while(s.length>0){
while(separador(s)!=""){}
aux=numero(s);
if(aux==""){
aux=operador(s);
//desempila dos datos
//realiza operacion
//el operador esta en aux, con switch lo checan
//empila resultado
}else{
//empila lo que trae aux
}
writefln(aux);
if(i++>20)break; //borrar esta linea, Para que sirve?
}
}
//
void main(){
char[] s="3,4,*,5,6,*,+";
separaTokens(s);
//el resultado es el ultimo elemento de la pila
getch();
}

No hay comentarios: