void Lexico::sigPalabra( void ) { setEstado( 0 ); setPalabra( producirPalabra( cadena_ , & posicion )); analizar( palabra_ ); }
static char * test_SSE() { shell->errn = 0; // forma correcta shell->comando[0] = 'S'; shell->comando[1] = 'S'; shell->comando[2] = 'E'; shell->args[0] = '4'; shell->args[1] = ','; shell->args[2] = '1'; shell->args[3] = '0'; shell->args[4] = '0'; shell->n_args = 5; analizar(shell); mu_assert("Forma correcta \nNo deberia dar errores, pero si da", shell->errn == 251); printf("Forma correcta - OK\n"); shell->errn = 0; restart(shell); // argumento mayor al permitido shell->comando[0] = 'S'; shell->comando[1] = 'S'; shell->comando[2] = 'E'; shell->args[0] = '9'; shell->args[1] = ','; shell->args[2] = '4'; shell->n_args = 3; analizar(shell); mu_assert("Argumento mayor al permitido \nDeberia dar error 406 y no da", shell->errn == 406); printf("Argumento mayor al permitido - OK\n"); shell->errn = 0; restart(shell); // sin especificar frecuencia shell->comando[0] = 'S'; shell->comando[1] = 'S'; shell->comando[2] = 'E'; shell->args[0] = '4'; shell->n_args = 1; analizar(shell); mu_assert("Sin especificar frecuencia \nDeberia dar error 407 y no da", shell->errn == 407); printf("Sin especificar frecuencia - OK\n"); shell->errn = 0; restart(shell); // con coma y sin sgeundo argumento shell->comando[0] = 'S'; shell->comando[1] = 'S'; shell->comando[2] = 'E'; shell->args[0] = '4'; shell->args[1] = ','; shell->n_args = 2; analizar(shell); mu_assert("Error de sintaxis \ndeberia dar error 408 y no da", shell->errn == 408); printf("Error de sintaxis - OK\n"); shell->errn = 0; restart(shell); // demasiados argumentos shell->comando[0] = 'S'; shell->comando[1] = 'S'; shell->comando[2] = 'E'; shell->n_args = 10; analizar(shell); mu_assert("Demasiados argumentos \ndeberia dar error 407 y no da", shell->errn == 405); printf("Demasiados argumentos - OK\n"); shell->errn = 0; restart(shell); // argumento fuera de rango shell->comando[0] = 'S'; shell->comando[1] = 'S'; shell->comando[2] = 'E'; shell->args[0] = '4'; shell->args[1] = ','; shell->args[2] = 'r'; shell->args[3] = '8'; shell->args[4] = '8'; shell->n_args = 5; analizar(shell); mu_assert("Argumento fuera de rango 1 \ndeberia dar error 406 y no da", shell->errn == 406); printf("Argumento fuera de rango 1 - OK\n"); shell->errn = 0; restart(shell); // argumento fuera de rango shell->comando[0] = 'S'; shell->comando[1] = 'S'; shell->comando[2] = 'E'; shell->args[0] = '4'; shell->args[1] = ','; shell->args[2] = '8'; shell->args[3] = 'r'; shell->args[4] = '8'; shell->n_args = 5; analizar(shell); mu_assert("Argumento fuera de rango 2 \ndeberia dar error 406 y no da", shell->errn == 406); printf("Argumento fuera de rango 2 - OK\n"); shell->errn = 0; restart(shell); // argumento fuera de rango shell->comando[0] = 'S'; shell->comando[1] = 'S'; shell->comando[2] = 'E'; shell->args[0] = '4'; shell->args[1] = ','; shell->args[2] = '8'; shell->args[3] = '8'; shell->args[4] = 'r'; shell->n_args = 5; analizar(shell); mu_assert("Argumento fuera de rango 3 \ndeberia dar error 406 y no da", shell->errn == 406); printf("Argumento fuera de rango 3 - OK\n"); shell->errn = 0; restart(shell); // argumento fuera de rango shell->comando[0] = 'S'; shell->comando[1] = 'S'; shell->comando[2] = 'E'; shell->args[0] = '4'; shell->args[1] = ','; shell->args[2] = '8'; shell->args[3] = '0'; shell->args[4] = '0'; shell->n_args = 5; analizar(shell); // printf("%d\n",(shell->args[2] - '0')*100 + (shell->args[3] - '0')*10 + shell->args[4] - '0'); mu_assert("Argumento fuera de rango 4 \ndeberia dar error 406 y no da", shell->errn == 406); printf("Argumento fuera de rango 4 - OK\n"); shell->errn = 0; restart(shell); return 0; }
int main(int argc, char * argv[]) { char *linia; if(argc==3 && argv[1][0]=='-' && argv[1][1]=='c') { /*printf("Arguments\n");*/ if(strlen(argv[2])>=MAXLINE) { printf("Excesivo número de carácteres\n"); exit(1); } /* Ejecución de la orden */ argv[2][strlen(argv[2])]='\n'; argv[2][strlen(argv[2])+1]='\0'; analizar(argv[2]); pipeline(num_ordenes(), fich_entrada(), fich_salida(), es_append(), es_background()); ejecutar(num_ordenes(), num_argumentos(), get_ordenes(), get_argumentos(), es_background()); exit(0); } if(argc!=1) { printf("Parámetros erróneos\nUSO: -c \"comando\"\n", argv[1]); exit(1); } getcwd(current, MAXLINE); fprintf(stdout, LOGO); while(1) { linia=getline(); analizar(linia); /*printf("Analizadas %d ordenes\n", num_ordenes());*/ struct sigaction senyal; char **ordres; sigemptyset(&senyal.sa_mask); senyal.sa_flags=0; if(sigaction(SIGINT, NULL, &senyal)!=-1) { senyal.sa_handler=SIG_IGN; sigaction(SIGINT, &senyal, NULL); sigaction(SIGQUIT, &senyal, NULL); sigaction(SIGTTIN, &senyal, NULL); sigaction(SIGTTOU, &senyal, NULL); } ordres=get_ordenes(); if(num_ordenes()==0) continue; if(!strcmp(ordres[0],"exit")) exit(0); if(!strcmp(ordres[0],"cd")) cdexec(get_argumentos(), num_argumentos(), current); else { pipeline(num_ordenes(), fich_entrada(), fich_salida(), es_append(), es_background()); ejecutar(num_ordenes(), num_argumentos(), get_ordenes(), get_argumentos(), es_background()); /*visualizar();*/ /*printf("Command: %s", buffer); */ } } return 0; } /* main */
void uParser::TMaxParser::setInfija(string infija){ analizar(infija); *aInfija = infija; *aPostfija = infijaToPosfija(infija); }