Arithmetic evaluation: Difference between revisions
Content added Content deleted
(omits) |
(added Ursala) |
||
Line 1,505: | Line 1,505: | ||
{{omit from|gnuplot}} |
{{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 ^/~< 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> |