I need help in parse additional types of expressions defined by the expanded grammar shown below with the additions to the grammar highlighted in BOLD: statement expression ',' assignments ';' expression '( ' expressions ')' expressions unary_expression | binary_expression | ternary_expression | quaternary_expression unary_expression expression '~' binary_expression expression binary_operator expression binary_operator '+' | '-' | '*' | '/' | '%' | '^' | '<' | '>' | '_' ternary_expression expression '?' expression expression quaternary_expression expression '#' expression expression expression operand literal | variable | expression assignments assignments ',' assignment | assignment assignment variable '=' literal Current C++ code: parse.h // This file contains the function prototype of the parseName function whose body is defined in parse.cpp. string parseName(stringstream& in); parse.cpp // characters until the next whitespace and returns the name that those characters form. #include #include #include using namespace std; #include "parse.h" string parseName(stringstream& in) { main.cpp #include <iostream> #include <fstream> #include <sstream> #include <string> #include <vector> using namespace std; #include "expression.h" #include "subexpression.h" #include "symboltable.h" #include "parse.h" SymbolTable symbolTable; void parseAssignments(stringstream& in); int main() { const int SIZE = 256; Expression* expression; char paren, comma, line[SIZE]; ifstream fin; fin = ifstream("input.txt"); if (!(fin.is_open())) { cout << "File did not open" << endl; system("pause"); return 1; } while (true) { fin.getline(line, SIZE); if (!fin) break; stringstream in(line, ios_base::in); in >> paren; cout << line << " "; try { expression = SubExpression::parse(in); in >> comma; parseAssignments(in); double result = expression->evaluate(); cout << "Value = " << result << endl; } catch (string message) { cout << message << endl; } } system("pause"); return 0; } void parseAssignments(stringstream& in) { char assignop, delimiter; string variable; int value; do { variable = parseName(in); in >> ws >> assignop >> value >> delimiter; symbolTable.insert(variable, value); } while (delimiter == ','); } char alnum; string name = ""; in >> ws; while (isalnum(in.peek())) { in >> alnum; name += alnum; } return name; } operand.h class Operand: public Expression { public: static Expression* parse(stringstream& in); }; operand.cpp using namespace std; #include "expression.h" #include "subexpression.h" #include "operand.h" #include "variable.h" #include "literal.h" #include "parse.h" Expression* Operand::parse(stringstream& in) { char paren; int value; in >> ws; if (isdigit(in.peek())) { in >> value; Expression* literal = new Literal(value); return literal; } if (in.peek() == '(') { in >> paren; return SubExpression::parse(in); } else return new Variable(parseName(in)); return 0; } subexpression.h class SubExpression: public Expression { public: SubExpression(Expression* left, .