Arithmetic evaluation: Difference between revisions

m
→‎{{header|Phix}}: oops, left some junk in from the distro version
m (→‎{{header|Phix}}: added syntax colouring the hard way)
m (→‎{{header|Phix}}: oops, left some junk in from the distro version)
Line 4,652:
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #000080;font-style:italic000000;">--s</span> <span style="color: #0000FF;"1>=</span> +<span 2style="color: * (#008000;">"3 + (4 * +5 + 6 * 7 /1*5^2^3"</span> 8) - 9) / 10<span style="color: #000080;font-style:italic;">-- 7116406262</span>
--s = "1+1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+(1+1/15)/14)/13)/12)/11)/10)/9)/8)/7)/6)/5)/4)/3)/2" -- 2.718281828
--s = "1 + 2*(3 - 2*(3 - 2)*((2 - 4)*5 - 22/(7 + 2*(3 - 1)) - 1)) + 1" --60
--s = "1 - 5 * 2 / 20 + 1" -- 1.5
--s = "(1 - 5) * 2 / (20 + 1)" -- -0.380952381
--s = "2 * (3 + ((5) / (7 - 11)))" -- 3.5
--s = "(2 + 3) / (10 - 5)" -- 1
--s = "(3 * 2) a - (1 + 2) / 4" -- syntax error
--s = "(3 * 2) - (1 + 2) / (4" -- ) expected
--s = "1 + 2" -- 3
--s = "(1 + 2) * 10 / 100" -- 0.3
--s = "(1 + 2 / 2) * (5 + 5)" -- 20
--s = "2*-3--4+-0.25" -- -2.25
--s = "((11+15)*15)*2-(3)*4*1" -- 768
--s = "((11+15)*15)* 2 + (3) * -4 *1" -- 768
--s = "(((((1)))))" -- 1
--s = "-35" -- -35
--s = "-30 + -5" -- -35
--s = "-(-30 + -5)" -- 35
--s = "-(3^2)"
--s = "-3^2"
--s = "-15/2.0" -- -7.5
--s = "-(15/2.0)" -- -7.5
--s = "1+2+3+4" -- 10
--s = "((((2))))+3*5" -- 17
--s = "1+2*3/(4-5+6)" -- 2.2
--s = "2+3" -- 5
--s = "2+3/4" -- 2.75
--s = "2*3-4" -- 2
--s = "2*(3+4)+5/6" -- 14.8333
--s = "-2 / 2 + 4 + 3 * 2" -- 9
--s = "2 * (3 + (4 * 5 + (6 * 7) * 8) - 9) * 10" -- 7000
--s = "2*-3--4+-0.25" -- -2.25
--s = "(((2 * -3) - -4) + -1/4)" -- -2.25
--s = "2+(3-4)*6/5^2^3%3" -- 1.99998464
--s = "1 + 2*(3 - 2*(3 - 2)*((2 - 4)*5 - 22/(7 + 2*(3 - 1)) - 1)) + 1" -- 60</span>
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"3+4+5+6*7/1*5^2^3"</span> <span style="color: #000080;font-style:italic;">-- 16406262
--?3+4+5+6*7/1*power(5,power(2,3))
--?((3+4)+5)+(((6*7)/1)*power(5,power(2,3)))</span>
<span style="color: #000000;">sidx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
<span style="color: #000000;">nxtch</span><span style="color: #0000FF;">()</span>
Line 4,705 ⟶ 4,667:
<span style="color: #0000FF;">?</span><span style="color: #000000;">evaluate</span><span style="color: #0000FF;">(</span><span style="color: #000000;">opstack</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">])</span>
<span style="color: #0000FF;">{}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">wait_key</span><span style="color: #0000FF;">()</span>
<span style="color: #000080;font-style:italic;">--/*
I added a flag (for this task) to store the ast nodes as op_p_p, p_op_p, or p_p_op, whichever you prefer.
with op_p_p:
AST (flat): {"+",{"+",{"+",3,4},5},{"*",{"/",{"*",6,7},1},{"^",5,{"^",2,3}}}}
AST (tree):
{"+",
{"+",
{"+",
3,
4},
5},
{"*",
{"/",
{"*",
6,
7},
1},
{"^",
5,
{"^",
2,
3}}}}
result: 16406262
with p_op_p:
AST (flat): {{{3,"+",4},"+",5},"+",{{{6,"*",7},"/",1},"*",{5,"^",{2,"^",3}}}}
AST (tree):
{{{3,
"+",
4},
"+",
5},
"+",
{{{6,
"*",
7},
"/",
1},
"*",
{5,
"^",
{2,
"^",
3}}}}
result: 16406262
and lastly with p_p_op:
16406262
AST (flat): {{{3,4,"+"},5,"+"},{{{6,7,"*"},1,"/"},{5,{2,3,"^"},"^"},"*"},"+"}
AST (tree):
{{{3,
4,
"+"},
5,
"+"},
{{{6,
7,
"*"},
1,
"/"},
{5,
{2,
3,
"^"},
"^"},
"*"},
"+"}
result: 16406262
--*/</span>
<!--</lang>-->
I added a flag (for this task) to store the ast nodes as op_p_p, p_op_p, or p_p_op, whichever you prefer.
7,806

edits