# Parse ascii art math!

## APL (Dyalog Unicode), 46 44 bytes

'/(80-)63+92145*7'[16|43|25⊥¨(×⊆⊢)2⊥' .\'⍳⎕]


Try it online!

⎕ evaluated input, must be a character matrix

' .\'⍳ replace spaces with 0, .s with 1, \s with 2, and everything else with 3

2⊥ base-2 decode the columns

(×⊆⊢) split on zeroes

25⊥¨ base-25 decode each group

16|43| mod 43, mod 16

'/(80-)63+92145*7'[ ] use as indices in the given string

## Python 2, 154 139 bytes

s=zip(*input().split('\n'))
i=0
while s[i:]:d=3**(max((s+[' '])[i+1])>' ')+i;print'+/5(_41_7802*6__-9)3'[hash(tuple(s[i:d]))*3%67%21];i=1+d


Try it online!

## APL (Dyalog Unicode), 69 61 bytes

Anonymous tacit prefix function. Requires ⎕IO←0.

{('+-*/()',⎕D)['∆JV⍺TgucKmre3Ha'⍳⎕AV[94|2⊥¨,⌿⍵⊆⍨∨⌿32≠⍵]]}⎕UCS


Try it online!

⎕UCS convert characters to code points

{} "dfn"; argument is ⍵

('+-*/()',⎕D) the involved symbols followed by the Digits

[] index into that using the following indices:

'∆JV⍺TgucKmre3Ha'⍳ indices in this string (missing elements get index=length) of

⎕AV[] index into the Atomic Vector (the character set) using the following:

94| the division remainder when divided by 94 of

2⊥¨ the base-2 evaluation of each of

,⌿ the vertically joined and flattened

⍵⊆⍨ segments of the argument, as indicated by trues in

∨⌿ the vertical OR-reduction of

32≠⍵ the Boolean mask indicating where the argument is different from 32 (space)