Arithmetic evaluation: Difference between revisions

added Ursala
(omits)
(added Ursala)
Line 1,505:
 
{{omit from|gnuplot}}
 
=={{header|Ursala}}==
with no error checking other than removal of spaces
<lang Ursala>
#import std
#import nat
#import flo
 
lex = ~=' '*~F+ rlc both -=digits # separate into tokens
 
parse = # build a tree
 
--<';'>; @iNX ~&l->rh ^/~&lt cases~&lhh\~&lhPNVrC {
'*/': ^|C/~&hNV associate '*/',
'+-': ^|C/~&hNV associate '*/+-',
');': @r ~&htitBPC+ associate '*/+-'}
 
associate "ops" = ~&tihdh2B-="ops"-> ~&thd2tth2hNCCVttt2C
 
traverse = *^ ~&v?\%ep ^H\~&vhthPX '+-*/'-$<plus,minus,times,div>@dh
 
evaluate = traverse+ parse+ lex</lang>
 
test program:
<lang Ursala>
#cast %eL
 
test = evaluate*t
 
-[
1+1
4/5
2-1
3*7
3+4+5
9-2-4
7/3/2
4+2*3
5*2-1
5-3*2
(1+1)*(2+3)
(2-4)/(3+5*(8-1))]-</lang>
output:
<pre>
<
2.000000e+00,
8.000000e-01,
1.000000e+00,
2.100000e+01,
1.200000e+01,
3.000000e+00,
1.166667e+00,
1.000000e+01,
9.000000e+00,
-1.000000e+00,
1.000000e+01,
-5.263158e-02></pre>
Anonymous user