A chunk of symbols is a calculation
+1
−0
Challenge
Create a program that takes input of a string and outputs an integer using the following calculation system:
 The string can only contain
+
,
,*
,/
,^
,!
(or a different character;!
is used here for demonstration),(
, and)
.  In this system, a character shows the value of $1$. This demonstrates the value of an integer with the system. Examples are
+++++
, which is equal to+ 5
, and***
, which is* 3
.  Here are the operations of each symbol:


+
is addition and for assigning a beginning positive integer. (+++++++++
=+ 9
)




is subtraction and for assigning a beginning negative integer. (
=13
/ 13
)



*
is multiplication. (**
=* 2
)



/
is division. (//////
=/ 6
)



^
is exponentiation/ (^^^
=^ 3
)



!
or a different character (I'm using!
for demonstration) is for assigning positive integers if we want to add positive integers together, or to simply separate positive integers from each other.



(
and)
are for grouping calculations, and can also be used for multiplying a number into an equation. The only way to interact with the grouped equations is if no numbers precede them.!!!+++++(***)//
=3 + 4(4 * 3) / 2
)

 The output must be an integer, being the result of the whole equation.
 The whole system should follow this nonstandard model of PEMDAS.
 Being a codegolf challenge, the shortest program of each language wins.
Testcases

+++++
is+ 5
which returns5
. 
**
is3 * 2
which returns6
. 
++(//+++++!!!**)
is2(4 / 2 + 5 + 3 * 2)
which returns18
(2(2 + 5 + 6) => 2(9)
). 
^^^
is2 ^ 3
which returns8
.  An empty input or
()
is0
which returns0
. 
(+)/(+)
is(1  1) / 1 (1  1)
is indeterminate, but for the sake of this challenge, it returns0
. 
(++++++++******)//((+++***)+++)
is(8 * 6) / 2((3 * 3) + 3)
which returns2
(48 / 2(9 + 3) => 48 / 24
).
Error Handling
Everything in this section is undefined behavior. Please DON'T do these when inputting.
 A character that's not supposed to be there.
 A beginner number is assigned NOT by
+
,
,!
(or a different character), or(
.  An open parentheses doesn't have a paired closed parentheses.
 A whitespace character in the string (tabs, spaces, etc.).
 Characters that aren't part of the English alphabet.
ñ
,る
andθ
are examples.  An equation like
!/(+)
or1 / 1(11)
leads to the division by zero error. Refrain from doing such equations in the input. Only0 / 0
is an exception here, which returns0
.
1 answer
+1
−0
JavaScript (Node.js), 148 bytes
s=>s?eval(s.replace(/([^()])\1*/g,(m,g)=>(g=='!'?'+':g)+m.length).replace(/\(/g,'*(').replace(/(\d\(.+?\))\^(\d+)/g,(m,g,h)=>'('+g+'**'+h+')')):0
Abuses regex replacements and evals. Is it pretty? Nope. Is it optimized? Nope. Does it work? Maybe. I'll try to golf it later.
1 comment thread