void termino(reg_expr * reg) { // <término> -> <primaria> {<operadorMultiplicativo> <primaria>} reg_expr left_operand, right_operand; reg_op op; token tok; primaria(&left_operand); while ((tok = next_token()) && (tok == MULTIPLICACION || tok == DIVISION)) { operador_multiplicativo(&op); primaria(&right_operand); left_operand = gen_infijo(&left_operand, &op, &right_operand); // #gen_infijo } *reg = left_operand; }
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; }
/* <término> → <primaria> {<operadorMultiplicativo> <primaria> #gen_infijo} */ void termino(struct reg_expr *preg) { struct reg_expr operando_izq, operando_der; struct reg_op op; token tok; primaria(&operando_izq); tok = prox_token(); while(tok == MULTIPLICACION || tok == DIVISION) { operador_multiplicativo(&op); primaria(&operando_der); operando_izq = gen_infijo(&operando_izq, &op, &operando_der); tok = prox_token(); } *preg = operando_izq; }
/* <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; }