How to resolve the algorithm Parsing/RPN calculator algorithm step by step in the Lua programming language
Published on 12 May 2024 09:40 PM
How to resolve the algorithm Parsing/RPN calculator algorithm step by step in the Lua programming language
Table of Contents
Problem Statement
Create a stack-based evaluator for an expression in reverse Polish notation (RPN) that also shows the changes in the stack as each individual token is processed as a table.
3 4 2 * 1 5 - 2 3 ^ ^ / +
Let's start with the solution:
Step by Step solution about How to resolve the algorithm Parsing/RPN calculator algorithm step by step in the Lua programming language
Source code in the lua programming language
local stack = {}
function push( a ) table.insert( stack, 1, a ) end
function pop()
if #stack == 0 then return nil end
return table.remove( stack, 1 )
end
function writeStack()
for i = #stack, 1, -1 do
io.write( stack[i], " " )
end
print()
end
function operate( a )
local s
if a == "+" then
push( pop() + pop() )
io.write( a .. "\tadd\t" ); writeStack()
elseif a == "-" then
s = pop(); push( pop() - s )
io.write( a .. "\tsub\t" ); writeStack()
elseif a == "*" then
push( pop() * pop() )
io.write( a .. "\tmul\t" ); writeStack()
elseif a == "/" then
s = pop(); push( pop() / s )
io.write( a .. "\tdiv\t" ); writeStack()
elseif a == "^" then
s = pop(); push( pop() ^ s )
io.write( a .. "\tpow\t" ); writeStack()
elseif a == "%" then
s = pop(); push( pop() % s )
io.write( a .. "\tmod\t" ); writeStack()
else
push( tonumber( a ) )
io.write( a .. "\tpush\t" ); writeStack()
end
end
function calc( s )
local t, a = "", ""
print( "\nINPUT", "OP", "STACK" )
for i = 1, #s do
a = s:sub( i, i )
if a == " " then operate( t ); t = ""
else t = t .. a
end
end
if a ~= "" then operate( a ) end
print( string.format( "\nresult: %.13f", pop() ) )
end
--[[ entry point ]]--
calc( "3 4 2 * 1 5 - 2 3 ^ ^ / +" )
calc( "22 11 *" )
You may also check:How to resolve the algorithm Integer sequence step by step in the Wren programming language
You may also check:How to resolve the algorithm GUI component interaction step by step in the Wren programming language
You may also check:How to resolve the algorithm Archimedean spiral step by step in the Sidef programming language
You may also check:How to resolve the algorithm RIPEMD-160 step by step in the Rust programming language
You may also check:How to resolve the algorithm Word frequency step by step in the VBA programming language