Question: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Tester File assign6_test.cpp #include #include #include #include assign6.hpp using std::string; using std::vector; using std::cout; using std::endl; template void print(const std::vector& vs) { for(auto v

 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Tester File assign6_test.cpp #include #include #include #include "assign6.hpp" using std::string;using std::vector; using std::cout; using std::endl; template void print(const std::vector& vs) {for(auto v : vs) cout value == dynamic_cast(b)->value; case tree_type::VAR: return dynamic_cast(a)->name== dynamic_cast(b)->name; case tree_type::PAREN: return compare_trees(dynamic_cast(a)->inner, dynamic_cast(b)->inner); case tree_type::MINUS: return compare_trees(dynamic_cast(a)->inner, dynamic_cast(b)->inner);case tree_type::FUNC: af = dynamic_cast(a); bf = dynamic_cast(b); return af->name == bf->name

 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Tester File assign6_test.cpp #include #include #include #include "assign6.hpp" using std::string; using std::vector; using std::cout; using std::endl; template void print(const std::vector& vs) { for(auto v : vs) cout value == dynamic_cast(b)->value; case tree_type::VAR: return dynamic_cast(a)->name == dynamic_cast(b)->name; case tree_type::PAREN: return compare_trees(dynamic_cast(a)->inner, dynamic_cast(b)->inner); case tree_type::MINUS: return compare_trees(dynamic_cast(a)->inner, dynamic_cast(b)->inner); case tree_type::FUNC: af = dynamic_cast(a); bf = dynamic_cast(b); return af->name == bf->name && compare_trees(af->arg, bf->arg); case (tree_type::OPERATOR): ao = dynamic_cast(a); bo = dynamic_cast(b); return ao->op == bo->op && compare_trees(ao->left,bo->left) && compare_trees(ao->right,bo->right); default: return false; } } } exp* parse(std::string s) { std::vector tokens = tokenize(s); int prec = 0; return parse(tokens.begin(), tokens.end(), prec); } bool test_parse() { cout print(); cout print(); cout print(); cout print(); cout  1) { while(true) { // Interactive mode string input; cout  "; std::getline(std::cin, input); exp* e = parse(input); if(e) { cout print(); cout   In this assignment we're going to extend the arithmetic expression tree presented in class to handle function calls, with a single parameter. The grammar presented in class was simply exp -NUM expVAR exp-> ' (' exp ')' expexp expexp 0P exp To extend this to functions, we add an additional rule exp -FNAME exp')' The rules for function names are similar to those for variables, except that underscore - characters are allowed in function names but not in variable names. You should implement the functions vector::iterator start, vector string>::iterator finish, int& prec)

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!