(* Test file for Recursive descent parsing project (Spring 2002) the first function should report no syntax or semantic errors the second function should report some syntax and semantic errors there will be no cases of syntax errors, you will have to create your own test cases for them. ***********************IMPORTANT DISCLAIMER***************************** THIS TEST FILE IS NOT THE SAME TEST FILE THAT WILL BE USED IN ASSESSING YOUR FINAL WORK!!! THERE WILL BE EXTRA CHECKING PERFORMED!!! YOU ARE ENCOURAGED TO PERFORM ADDITIONAL TESTING IN ORDER TO VERIFY THE COMPLETENESS AND CORRECTNESS OF YOUR WORK !!!!!!!!!!!!!!!!!!!!!!!!!!!!! ************************************************************************) --Begin correct part const PI:real :=3.14; var length, width : real := 0.0; var examples : real[10][9][8]; record data { real_id : real; char_id : char; bool_id : bool; int_id : int; array_id : int[10][11][15]; } function nonsense (par1,par2: char, const par3:real, var par4:int):bool { const PI:real := 3.142; var width, area : real; var whatever :real := PI*25/65+14; examples[1][2][3] := whatever; if data.bool_id = TRUE { read(area); write("I just read \\area\\ \n"); var i:int :=0; var width:real; --again :) while (i<10) { examples[i][i*i][i mod 4] := i + -(i-4*i) mod i; i := i+1; while (true){ i :=i; } } else if data.bool_id = FALSE { read(area); write("I just read \\area\\ \n"); var i:int :=0; var width:real; --again :) while (i<10) { examples[i][i*i][i mod 4] := i + -(i-4*i) mod i; i := i+1; while (true){ data.real_id := i+ data.int_id; } } else{ write ("take a break"); } par3 := par4 * par3 + (par1 / (-par2)*(+par2)) mod (par1 / (-par2)*(+par2)); return 1 + +2 * 3 / 4 mod -5 or 6; } --begin incorrect part (semantic) const PI:real = 3.1; var width :real := not_declared; function nonsense (*take 2*) (const take_1:bool) :id[10] { var duplicate, duplicate : bool :=FALSE or TRUE; nonsense (); I_was_not_declared := neither_was_I; take_1 := 5; data.real_id[5] := take1.field1; return nonsense (1,2,3,take1); }