Here is a similar question for reference only. The following code uses Gaussian elimination method to obtain the row echelon form:
rref[A_?MatrixQ] := Module[{a, m, n, i, j, k, l, L, B},
{m, n} = Dimensions[A]; B = A;
Print[MatrixForm@A];
i = 1; k = 1; While[i <= m,(*i表示行*)
While[k < n && B[[i ;;, k]] == ConstantArray[0, m - i + 1], k++;
If[k == n && B[[i ;;, k]] == ConstantArray[0, m - i + 1],
Return[B]]];(*k表示列, 如果全是0, 考察下一列, 如果最后一列也是0, 退出函数*)
For[l = i, l <= m, l++,
If[(a = B[[l, k]]) != 0 && k < n &&
B[[l, (k + 1) ;;]] == ConstantArray[0, n - k], B[[l, k]] = 1;
Print["第(1)", l, "行除以", a, "->", MatrixForm@B];]];
If[Length[a = DeleteCases[B[[i ;;, k]], 0]] != 0,
If[Length[Cases[Abs[a], 1]] != 0, L = 1,
If[Length[Cases[Abs[a], GCD @@ a]] != 0, L = Abs[GCD @@ a],
L = Abs[First[a]];](*如果有公因式就选取这个数, 不然选第一个不为零的数*),
Return[B]]];(*选取第一个不为0的数, 如果下边都成了0, 退出函数*)
j = i; While[j < m && Abs[B[[j, k]]] != L, j++;];(*找到所在的行, 用j表示*)
If[i != j, If[B[[j, k]] != 0, B[[{i, j}, ;;]] = B[[{j, i}, ;;]];
Print["第", i, "行和第", j,
"行换行->", MatrixForm@B], Return[B]](*都是0, 返回*)];(*换行: i<->j*)
For[l = k, l <= m, l++,
If[(a = B[[l, k]]) != 0 && l != i && B[[i, k]] != 0,
B[[l, ;;]] = B[[l, ;;]] - B[[l, k]]/B[[i, k]] B[[i, ;;]];
Print["第", l, "行加第", i, "行的", -a, "倍-> " MatrixForm@B]]]; i++;];
Return[B];]
A = {{1, 2, 3}, {2, 3, 4}, {-1, 0, 2}}
rref[A]

HermiteDecomposition. – Daniel Lichtblau Mar 22 '15 at 13:27