4.3BSD/usr/contrib/icon/book/07/expr1.icn

procedure expression()
   return case ?2 of {
      1  :  term()
      2  :  term() || "+" || expression()
      }
end

procedure term()
   return case ?2 of {
      1  :  element()
      2  :  element() || "*" || term()
      }
end

procedure element()
   return case ?4 of {
      1  :  "x"
      2  :  "y"
      3  :  "z"
      4  :  "(" || expression() || ")"
      }
end