Problem: Write a program, named p8.cpp, that behaves in the manner describe in programming assignment 7, but which incorporates the changes listed below. This will include the creation of some .h header files to contain the definitions of some classes to be used in place of some of the features thus far implemented. This is the first step into more serious C++ programming.
Naming: Your submitted file is to be named p p8 8 .c pp . This will be the last pure C program of the semester.
Output: Output requirements are unchanged from programming assignment 7. Thus, the following output requirements are unchanged.
Your program's normal output must be to stdout and of one of the formats following, assuming argc and argv are the usual parameters for main() and where < program_name> is argv[0] .
If argv[1] is "--help ", display the following.
Usage: < program_name>
"< program_name> --help"
display thi i s usage material.
"< program_name> -rpn" "
The program accepts input from standard input as a sequence
of numbers and operators. The numbers (operands, as
integers or floating point numbers) read are push ed on a
stack until needed. When an operator is read, the required
operands are popped from the stack and used to perform the
calculation, with the result placed on the stack. Valid
operators are +, -, * and /, are interpret ed as addition,
subtraction, m ultiplication and division, respectively, as
described below. An additional operator is =, which
indicates that the value at the top of the stack is popped
from the stack and displayed along with the number of
values remaining on the stack, whereupon the program
terminates.
Stack underflows generate an error message and halt the
program, as do a stack overflows. Unrecognized input
tokens produce error messages and result in program
termination, as do unrecognized command line arguments.
The size of the stack is 10.
Stack operations are performed so as to produce results
identically as indicated here.
+ : push(pop() + pop());
- : temp = pop(); push(pop() – – temp;
* : push(pop() * pop());
/ : temp = pop(); push(pop() / temp;
' : push(1.0 / pop());
~ : push(-pop());
** : temp = pop(); push(pow(pop(),temp));
swap : t1 = pop(); t2 = pop(); push(t1); push(t2);
copy : temp = pop(); push(temp); push(temp);
= : pop stack top and display it as the result with the number of stack element s remaining.
dump : display the contents of the calculator stack.
peek : display the top-of-stack value.
peek("< text>") : display the top-of-stack value following the specified text.
=< variable> : pop the value from the top of the stack and Assign that value to the name specified.
< variable> : push the value of the variable onto the stack.
Variable names must be alphanumeric, both upper-and lower-case permitted, and must start with an alphabetic character.
The above describes the majority of the behavior of the program you are to write. To reiterate and expand important points:
Result = < result popped from top of stack>.
< number of operands on the stack> values remain on the stack.
For all error conditions, print the required output to stderr.
Remember that any item delimited by angle brackets ("< >") is to be replaced with the appropriate information, without the angle brackets.