Assignment 3Note: operator- should stop when it has subtracted the items indicated or the list is empty, which ever comes first.Before the submission deadline we will provide tests for this updated data structure in a hw3_check folder released in the homework_resources repository.Problem 4 (Stacks, 10%) Use your ULListStr from Problem 3 to create a Stack data structure for variables of type std::string . Download and use the provided stackstring.h as is (do NOT change it). Notice the stack has a ULListStr as a data member. This is called composition, where we compose/build one class from another, already available class. Essentially the member functions of theStackString class that you write should really just be wrappers around calls to the underlying linked list.You should think carefully about efficiency. All operations (other than possibly the destructor) should run in O(1). You will lose significant points if your Stack data structure does not meet the runtime requirements. You are welcome to change your ULListStr class implementation if you find any bugs or runtime violations!Your submission should contain stackstring.h and stackstring.cpp . Although there is no test file required for this problem, we recommend you write your own unit- tests.Problem 5 (String Manipulation Parser and Evaluator, 40%) For this problem, create a new .cpp file named:stringparser.cpp .Your task is to write a program that will read expressions consisting of strings and operations from a file, and evaluate and show the output of the given expression.String expressions consist of strings, the operators +(concatenate), – (remove), < (remove end), and >(remove start), along with parentheses to specify a desired order of operations. The < operator indicates you should delete the last character of the string. The > operator indicates you should delete the first character of the string. The + operator indicates you should append the second string to the end of the first string. The -operator indicates that you should remove the firstinstance of the second string from the first string (the first string is returned unmodified if there is no match).String expressions are defined formally as follows:Any string of 1 or more letters a-z (lower-case only) is a string expression.If Y1, Y2, …, Yk are string expressions then the following are string expressions:
kefile which can build an executable named stringparser by executing the command make stringparser . You should break your Makefile into targets to compile/produce ulliststr.o and stackstring.o on which your final target, stringparser can depend along with the actual source code stringparser.cpp . Refer to your Makefile lab.