static int lista_terminos() { if( !termino() ) printErr(" expected funcion(..), variable, or const_obj",TOKEN.lexeme,toks_ptr+1); toks_ptr++; while( termino() ) toks_ptr++; return 1; }
void expresion_simple() { if (sbol->codigo == CMAS || sbol->codigo == CMENOS) { scanner(); } termino(); while (sbol->codigo == CMAS || sbol->codigo == CMENOS || sbol->codigo == COR) { scanner(); termino(); } }
//expresion void expresion() { if (token==mas || token==menos) { obtoken(); termino(); } else termino(); while (token==mas || token==menos) { obtoken(); termino(); } }
void expresion(reg_expr * reg) { // <expresión> -> <termino> {<operadorAditivo> <termino>} reg_expr left_operand, right_operand; reg_op op; token tok; termino(&left_operand); while ((tok = next_token()) && (tok == SUMA || tok == RESTA)) { operador_aditivo(&op); termino(&right_operand); left_operand = gen_infijo(&left_operand, &op, &right_operand); // #gen_infijo } *reg = left_operand; }
static int comparacion() { if( !termino() ) printErr("expected termino ",TOKEN.lexeme,toks_ptr+1); toks_ptr++; if(TOKEN.category != REL_OP) { printErr("expected relational operator ( = | != | ‘<’ | ‘>’ | <= | >= ) ",TOKEN.lexeme,toks_ptr+1); } toks_ptr++; if( !termino() ) printErr("expected termino ",TOKEN.lexeme,toks_ptr+1); return 1; }
/* <expresión> → <término> {<operadorAditivo> <término> #gen_infijo} */ void expresion (struct reg_expr *preg) { struct reg_expr operando_izq, operando_der; struct reg_op op; token tok; termino(&operando_izq); tok = prox_token(); while(tok == SUMA || tok == RESTA) { operador_aditivo(&op); termino(&operando_der); operando_izq = gen_infijo(&operando_izq, &op, &operando_der); tok = prox_token(); } *preg = operando_izq; }
//expresion void expresion(int toksig[]) { int setpaso[NOTOKENS]; //conjunto de paso por valor copia_set(setpaso,toksig); setpaso[mas]=setpaso[menos]=1; //setpaso=mas+menos+toksig if (token==mas || token==menos) { obtoken(); termino(setpaso); } else termino(setpaso); while (token==mas || token==menos) { obtoken(); copia_set(setpaso,toksig); setpaso[mas]=setpaso[menos]=1; //setpaso=mas+menos+toksig termino(setpaso); } }