Arithmetic evaluation: Difference between revisions
Content added Content deleted
(→{{header|Tailspin}}: Update to latest) |
|||
Line 6,123: | Line 6,123: | ||
def ops: ['+','-','*','/']; |
def ops: ['+','-','*','/']; |
||
data binaryExpression <{left: <node>, op: <?($ops <[<=$>]>)>, right: <node>}> |
data binaryExpression <{left: <node>, op: <?($ops <[<=$::raw>]>)>, right: <node>}> |
||
data node <binaryExpression|"1"> |
data node <binaryExpression|"1"> |
||
Line 6,130: | Line 6,130: | ||
rule addition: {left:<addition|multiplication|term> (<WS>?) op:<'[+-]'> (<WS>?) right:<multiplication|term>} |
rule addition: {left:<addition|multiplication|term> (<WS>?) op:<'[+-]'> (<WS>?) right:<multiplication|term>} |
||
rule multiplication: {left:<multiplication|term> (<WS>?) op:<'[*/]'> (<WS>?) right:<term>} |
rule multiplication: {left:<multiplication|term> (<WS>?) op:<'[*/]'> (<WS>?) right:<term>} |
||
rule term: <INT|parentheses> |
rule term: <INT"1"|parentheses> |
||
rule parentheses: (<'\('> <WS>?) <addition|multiplication|term> (<WS>? <'\)'>) |
rule parentheses: (<'\('> <WS>?) <addition|multiplication|term> (<WS>? <'\)'>) |
||
end parseArithmetic |
end parseArithmetic |
||
Line 6,143: | Line 6,143: | ||
def ast: '(100 - 5 * (2+3*4) + 2) / 2' -> parseArithmetic; |
def ast: '(100 - 5 * (2+3*4) + 2) / 2' -> parseArithmetic; |
||
'$ast; |
'$ast; |
||
' -> !OUT::write |
' -> !OUT::write |
||
'$ast -> evaluateArithmetic; |
'$ast -> evaluateArithmetic; |
||
' -> !OUT::write |
' -> !OUT::write |
||
Line 6,152: | Line 6,150: | ||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
{left={left={left=100, op=-, right={left=5, op=*, right={left=2, op=+, right={left=3, op=*, right=4}}}}, op=+, right=2}, op=/, right=2} |
{left={left={left=100"1", op=-, right={left=5"1", op=*, right={left=2"1", op=+, right={left=3"1", op=*, right=4"1"}}}}, op=+, right=2"1"}, op=/, right=2"1"} |
||
16 |
16"1" |
||
</pre> |
</pre> |
||