27 lines
883 B
D
27 lines
883 B
D
import std.stdio, std.string, std.conv, std.typetuple;
|
|
|
|
void main() {
|
|
auto input = "3 4 2 * 1 5 - 2 3 ^ ^ / +";
|
|
writeln("For postfix expression: ", input);
|
|
writeln("\nToken Action Stack");
|
|
real[] stack;
|
|
foreach (tok; input.split()) {
|
|
auto action = "Apply op to top of stack";
|
|
switch (tok) {
|
|
foreach (o; TypeTuple!("+", "-", "*", "/", "^")) {
|
|
case o:
|
|
mixin("stack[$ - 2]" ~
|
|
(o == "^" ? "^^" : o) ~ "=stack[$ - 1];");
|
|
stack.length--;
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
action = "Push num onto top of stack";
|
|
stack ~= to!real(tok);
|
|
}
|
|
writefln("%3s %-26s %s", tok, action, stack);
|
|
}
|
|
writeln("\nThe final value is ", stack[0]);
|
|
}
|