PowerShell 7, 133 ... 102101 101100 bytes
-5 bytes thanks to Wasif! Then +1 byte to fix an issue with --
always being read as the decrement operator, regardless of context.
-12 bytes thanks to mazzy!
'switch("$args"|% T*y){'
$args|%{$1,$2,$3=$_
"$1{`$a="
$2[1]?"""`$a*""*$3+1|iex}":"`$a$2 $3}"}
"'}`$a"$a'
'switch("$args"|% T*y){' # The first part of the interpreter switches
# on the input program's characters. Switching
# on an array in powershell processes the
# switch statement for each element.
$args|%{$1,$2,$3=$_ # For each array in the input array, set $1,
# $2, $3 to the first, second, and third
# element, respectively.
"$1{`$a=" # output the case for the letter of the command
# start the case with setting the accumulator
# equal to whatever else is in this case
$2[1] # If the second character of the command exists
# In other words, the command is '**'
?"""`$a*""*$3+1|iex}" # Make the body of the case a special way to
# calculate powers in PowerShell which is
# shorter than [Math]::Pow - effectively
# builds a string representation of the
# calculation, then evaluates that string.
:"`$a$2$3}"} # If the command isn't '**', we just make the
# command '{accumulator}{command}{number}'
# for example: '$a/3', making the whole case
# '{$a=$a/3}'
"'}`$a"$a' # Close the switch block, output the accumulator