Parsing/RPN calculator algorithm: Difference between revisions
→{{header|Perl}}: same logic, more readable
PatGarrett (talk | contribs) (→{{header|360 Assembly}}: Section added) |
SqrtNegInf (talk | contribs) (→{{header|Perl}}: same logic, more readable) |
||
Line 3,276:
=={{header|Perl}}==
<lang
use warnings;
use feature 'say';
my $
my @tests = ('3 4 2 * 1 5 - 2 3 ^ ^ / +');▼
▲$num = '([+-/]?(?:\.\d+|\d+(?:\.\d*)?))';
while (
s/ \s* ((?<left>$number)) # 1st operand
\s+ ((?<right>$number)) # 2nd operand
\s+ ((?<op>$operator)) # operator
(?:\s+|$) # more to parse, or done?
/
' '.evaluate().' ' # substitute results of evaluation
/ex
) {}
say;
}
sub evaluate {
(my $a = "($+{left})$+{op}($+{right})") =~ s/\^/**/;
say $a;
eval $a;
}</lang>
{{out}}
<pre>(4)*(2)
(1)-(5)
▲3 4 2 * 1 5 - 2 3 ^ ^ / +
(2)**(3)
3.0001220703125▼
(-4)**(8)
(8)/(65536)
(3)+(0.0001220703125)
▲ 3.0001220703125</pre>
=={{header|Perl 6}}==
|