/* * <sentencia> → * <identificador> := <expresión> #asignar ; | * leer ( <listaIdentificadores> ) ; | * escribir ( <listaExpresiones> ) ; */ void sentencia(void) { token tok = prox_token(); struct reg_expr id_reg, result_reg; switch(tok) { case ID: identificador(&id_reg); match(ASIGNACION); expresion(&result_reg); asignar(&id_reg, &result_reg); match(PUNTOYCOMA); break; case LEER: match(LEER); match(PARENIZQUIERDO); lista_identificadores(); match(PARENDERECHO); match(PUNTOYCOMA); break; case ESCRIBIR: match(ESCRIBIR); match(PARENIZQUIERDO); lista_expresiones(); match(PARENDERECHO); match(PUNTOYCOMA); break; default: error_sintactico(tok); return; } }
void sentencia(void) { /* * <sentencia> -> <identificador> ASIGNACION <expresión> PUNTOYCOMA * | LEER PARENIZQUIERDO <listaIdentificadores> PARENDERECHO PUNTOYCOMA * | ESCRIBIR PARENIZQUIERDO <listaExpresiones> PARENDERECHO PUNTOYCOMA */ token tok = next_token(); reg_expr right_operand, left_operand; switch (tok) { case ID: identificador(&left_operand); match(ASIGNACION); expresion(&right_operand); asignar(&left_operand, &right_operand); // #asignar match(PUNTOYCOMA); break; case LEER: match(LEER); match(PARENIZQUIERDO); lista_identificadores(); match(PARENDERECHO); match(PUNTOYCOMA); break; case ESCRIBIR: match(ESCRIBIR); match(PARENIZQUIERDO); lista_expresiones(); match(PARENDERECHO); match(PUNTOYCOMA); break; default: syntax_error(tok, "SENTENCIA"); } }