#include "frame.h" #include "environment.h" #include using namespace std; // This class is used to test the environment // simulation of Assignment 1, CS 152, // Spring 2000. void a1test() { /* begin main begin f(x,y) end f f(1,2) end main */ environment *e=new environment(); frame *f=new frame(NULL); f->add_binding(0); e->addFrame(f); e->lookupAndPrint(0,0); cout << endl; frame *f1=new frame(f); f1->add_binding(1); f1->add_binding(2); e->addFrame(f1); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(0,2); e->lookupAndPrint(1,0); cout << endl; e->deleteFrame(); e->lookupAndPrint(0,0); cout << endl; e->deleteFrame(); cout << endl; delete e; /* define main define f(x,y) end f f(3,4) end main */ e=new environment(); f=new frame(NULL); f->add_binding(0); e->addFrame(f); e->lookupAndPrint(0,0); cout << endl; f1=new frame(f); f1->add_binding(3); f1->add_binding(4); e->addFrame(f1); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); cout << endl; e->deleteFrame(); e->lookupAndPrint(0,0); cout << endl; e->deleteFrame(); cout << endl; delete e; /* define main define f(x,y) g(15,16) end f define g(u,v) end g f(5,6) end main */ e=new environment(); f=new frame(NULL); f->add_binding(0); e->addFrame(f); e->lookupAndPrint(0,0); cout << endl; f1=new frame(f); f1->add_binding(5); f1->add_binding(6); e->addFrame(f1); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); cout << endl; frame *f2=new frame(f); f2->add_binding(15); f2->add_binding(16); e->addFrame(f2); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); e->lookupAndPrint(1,1); e->lookupAndPrint(2,0); cout << endl; e->deleteFrame(); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); cout << endl; e->deleteFrame(); e->lookupAndPrint(0,0); cout << endl; e->deleteFrame(); cout << endl; delete e; /* define main define f(x,y) define g(u,v) define h(z,w) end h h(25,26) end g g(15,16) end f f(5,6) end main */ e=new environment(); f=new frame(NULL); f->add_binding(0); e->addFrame(f); e->lookupAndPrint(0,0); cout << endl; f1=new frame(f); f1->add_binding(5); f1->add_binding(6); e->addFrame(f1); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); cout << endl; f2=new frame(f1); f2->add_binding(15); f2->add_binding(16); e->addFrame(f2); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); e->lookupAndPrint(1,1); e->lookupAndPrint(2,0); cout << endl; frame *f3=new frame(f2); f3->add_binding(25); f3->add_binding(26); e->addFrame(f3); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); e->lookupAndPrint(1,1); e->lookupAndPrint(2,0); e->lookupAndPrint(2,1); e->lookupAndPrint(3,0); cout << endl; e->deleteFrame(); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); e->lookupAndPrint(1,1); e->lookupAndPrint(2,0); cout << endl; e->deleteFrame(); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); cout << endl; e->deleteFrame(); e->lookupAndPrint(0,0); cout << endl; e->deleteFrame(); cout << endl; delete e; /* define main define f(x,y) define g(u,v) h(25,26) end g define h(z,w) end h g(15,16) end f f(5,6) end main */ e=new environment(); f=new frame(NULL); f->add_binding(0); e->addFrame(f); e->lookupAndPrint(0,0); cout << endl; f1=new frame(f); f1->add_binding(5); f1->add_binding(6); e->addFrame(f1); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); cout << endl; f2=new frame(f1); f2->add_binding(15); f2->add_binding(16); e->addFrame(f2); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); e->lookupAndPrint(1,1); e->lookupAndPrint(2,0); cout << endl; f3=new frame(f1); f3->add_binding(25); f3->add_binding(26); e->addFrame(f3); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); e->lookupAndPrint(1,1); e->lookupAndPrint(2,0); cout << endl; e->deleteFrame(); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); e->lookupAndPrint(1,1); e->lookupAndPrint(2,0); cout << endl; e->deleteFrame(); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); cout << endl; e->deleteFrame(); e->lookupAndPrint(0,0); cout << endl; e->deleteFrame(); cout << endl; delete e; /* define main define f(x,y) h(17,18) g(27,28) end f define g(u,v) end g define h(x,z) define k(x,w) g(47,48) end k k(37,38) end h f(7,8) end main */ e=new environment(); f=new frame(NULL); f->add_binding(0); e->addFrame(f); e->lookupAndPrint(0,0); cout << endl; f1=new frame(f); // call f f1->add_binding(7); f1->add_binding(8); e->addFrame(f1); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); cout << endl; f2=new frame(f); // call h f2->add_binding(17); f2->add_binding(18); e->addFrame(f2); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); cout << endl; f3=new frame(f2); // call k f3->add_binding(37); f3->add_binding(38); e->addFrame(f3); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,1); e->lookupAndPrint(2,0); cout << endl; frame *f4=new frame(f); // call g f4->add_binding(47); f4->add_binding(48); e->addFrame(f4); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); cout << endl; e->deleteFrame(); // resume k e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,1); e->lookupAndPrint(2,0); cout << endl; e->deleteFrame(); // resume h e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); cout << endl; e->deleteFrame(); // resume f e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); cout << endl; frame *f5=new frame(f); // call g f5->add_binding(27); f5->add_binding(28); e->addFrame(f5); e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); cout << endl; e->deleteFrame(); // resume f e->lookupAndPrint(0,0); e->lookupAndPrint(0,1); e->lookupAndPrint(1,0); cout << endl; e->deleteFrame(); e->lookupAndPrint(0,0); cout << endl; e->deleteFrame(); delete e; }