nushell
I was afk when the puzzle went up so I had another go at doing it on my phone in Turmux with my shell's scripting language. It's quite nice how your shell is also a REPL so you can build up the answer in pieces, although I wrote a file for the second part.

open input.txt | str replace --all --regex ' +' ' ' |
lines | each { $in | str trim } | to text |
from csv --noheaders --separator ' ' |
reverse | transpose --ignore-titles |
each --flatten {
|list| transpose | skip 1 | if $list.column0 == '+' { math sum } else { math product }
} |
math sum
Part 2
let input = open input.txt | lines | each { $in | split chars }
let last_row = ($input | length) - 1
let last_col = ($input | first | length) - 1
mut op = ' '
mut numbers = []
mut grand_tot = 0
for x in $last_col..0 {
if $op == '=' {
$op = ' '
continue
}
let n = 0..($last_row - 1) | each { |y| $input | get $y | get $x } | str join | into int
$numbers = ($numbers | append $n)
$op = $input | get $last_row | get $x
if $op != ' ' {
$grand_tot += $numbers | if $op == '+' { math sum } else {math product }
$numbers = []
$op = '='
}
}
$grand_tot