-- This class is used to test the environment -- simulation of Assignment 1, CS 152, -- Spring 2000. -- The explicit type conversions to "binding" -- are used only to enforce that a type -- of this name is defined. They are formally -- unnecessary even if such a type is used. with TEXT_IO; use TEXT_IO; with a3; use a3; procedure a3test is -- begin main -- begin f(x,y) -- end f -- f(1,2) -- end main e:environment_ptr; f,f1,f2,f3,f4,f5:frame_ptr; begin e:=new_environment; f:=new_frame(NULL); add_binding(f,binding'(0)); add_frame(e,f); lookup_and_print(e,0,0); new_line; f1:=new_frame(f); add_binding(f1,binding'(1)); add_binding(f1,binding'(2)); add_frame(e,f1); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,0,2); lookup_and_print(e,1,0); new_line; delete_frame(e); lookup_and_print(e,0,0); new_line; delete_frame(e); new_line; -- define main -- define f(x,y) -- end f -- f(3,4) -- end main e:=new_environment; f:=new_frame(NULL); add_binding(f,binding'(0)); add_frame(e,f); lookup_and_print(e,0,0); new_line; f1:=new_frame(f); add_binding(f1,binding'(3)); add_binding(f1,binding'(4)); add_frame(e,f1); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); new_line; delete_frame(e); lookup_and_print(e,0,0); new_line; delete_frame(e); new_line; -- define main -- define f(x,y) -- define g(u,v) -- end g -- g(15,16) -- end f -- f(5,6) -- end main e:=new_environment; f:=new_frame(NULL); add_binding(f,binding'(0)); add_frame(e,f); lookup_and_print(e,0,0); new_line; f1:=new_frame(f); add_binding(f1,binding'(5)); add_binding(f1,binding'(6)); add_frame(e,f1); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); new_line; f2:=new_frame(f); add_binding(f2,binding'(15)); add_binding(f2,binding'(16)); add_frame(e,f2); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); lookup_and_print(e,1,1); lookup_and_print(e,2,0); new_line; delete_frame(e); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); new_line; delete_frame(e); lookup_and_print(e,0,0); new_line; delete_frame(e); new_line; -- 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); add_binding(f,binding'(0)); add_frame(e,f); lookup_and_print(e,0,0); new_line; f1:=new_frame(f); add_binding(f1,binding'(5)); add_binding(f1,binding'(6)); add_frame(e,f1); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); new_line; f2:=new_frame(f1); add_binding(f2,binding'(15)); add_binding(f2,binding'(16)); add_frame(e,f2); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); lookup_and_print(e,1,1); lookup_and_print(e,2,0); new_line; f3:=new_frame(f2); add_binding(f3,binding'(25)); add_binding(f3,binding'(26)); add_frame(e,f3); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); lookup_and_print(e,1,1); lookup_and_print(e,2,0); lookup_and_print(e,2,1); lookup_and_print(e,3,0); new_line; delete_frame(e); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); lookup_and_print(e,1,1); lookup_and_print(e,2,0); new_line; delete_frame(e); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); new_line; delete_frame(e); lookup_and_print(e,0,0); new_line; delete_frame(e); new_line; -- 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); add_binding(f,binding'(0)); add_frame(e,f); lookup_and_print(e,0,0); new_line; f1:=new_frame(f); add_binding(f1,binding'(5)); add_binding(f1,binding'(6)); add_frame(e,f1); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); new_line; f2:=new_frame(f1); add_binding(f2,binding'(15)); add_binding(f2,binding'(16)); add_frame(e,f2); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); lookup_and_print(e,1,1); lookup_and_print(e,2,0); new_line; f3:=new_frame(f1); add_binding(f3,binding'(25)); add_binding(f3,binding'(26)); add_frame(e,f3); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); lookup_and_print(e,1,1); lookup_and_print(e,2,0); new_line; delete_frame(e); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); lookup_and_print(e,1,1); lookup_and_print(e,2,0); new_line; delete_frame(e); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); new_line; delete_frame(e); lookup_and_print(e,0,0); new_line; delete_frame(e); new_line; -- 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); add_binding(f,binding'(0)); add_frame(e,f); lookup_and_print(e,0,0); new_line; f1:=new_frame(f); -- call f add_binding(f1,binding'(7)); add_binding(f1,binding'(8)); add_frame(e,f1); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); new_line; f2:=new_frame(f); -- call h add_binding(f2,binding'(17)); add_binding(f2,binding'(18)); add_frame(e,f2); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); new_line; f3:=new_frame(f2); -- call k add_binding(f3,binding'(37)); add_binding(f3,binding'(38)); add_frame(e,f3); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,1); lookup_and_print(e,2,0); new_line; f4:=new_frame(f); -- call g add_binding(f4,binding'(47)); add_binding(f4,binding'(48)); add_frame(e,f4); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); new_line; delete_frame(e); -- resume k lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,1); lookup_and_print(e,2,0); new_line; delete_frame(e); -- resume h lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); new_line; delete_frame(e); -- resume f lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); new_line; f5:=new_frame(f); -- call g add_binding(f5,binding'(27)); add_binding(f5,binding'(28)); add_frame(e,f5); lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); new_line; delete_frame(e); -- resume f lookup_and_print(e,0,0); lookup_and_print(e,0,1); lookup_and_print(e,1,0); new_line; delete_frame(e); lookup_and_print(e,0,0); new_line; delete_frame(e); end a3test;