פתרתי ב Elixir כי לא יודע php. (וגם כי תכל׳ס אין על אליקסיר לתרגילים כאלה):
defmodule Calc do
def build([item]) do
item
end
def build([a, op, b | tail]) do
case op do
"*" ->
build([{&(&1 * &2), a, b} | tail])
"/" ->
build([{&(&1 / &2), a, b} | tail])
"+" ->
build([{&(&1 + &2), a, build([b | tail])}])
"-" ->
build([{&(&1 - &2), a, build([b | tail])}])
end
end
def solve(val) when is_integer(val) do
val
end
def solve({op, a, b}) do
op.(solve(a), solve(b))
end
def calc(line) do
line
|> String.split
|> Enum.map(&to_i_if_possible/1)
|> build
|> solve
|> IO.inspect
end
def to_i_if_possible(val) do
case val do
x when x in ["*", "/", "+", "-"] -> x
x -> String.to_integer(x)
end
end
end
System.argv
|> Enum.at(0)
|> Calc.calc