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>