import java.io.IOException; //import java.util.*; public class A1 { public static void main(String[] args) { Parser p = new Parser(); // syntactically correct program try { p.parse(" { f "+ " declare x int ;"+ " declare y real ;"+ " { g"+ " declare x real ;"+ " declare z real ;"+ " call f x ;"+ " call g y ;"+ " }"+ " print x ;"+ " }"); } catch(IOException e) { System.out.println(e.getMessage()); } System.out.println("---------------"); // syntactically correct program try { p.parse(" { f "+ " declare x int ;"+ " declare y real ;"+ " declare w string ;"+ " { g"+ " declare x real ;"+ " declare z real ;"+ " { h"+ " declare y boolean ;"+ " declare z boolean ;"+ " call f x ;"+ " call g z ;"+ " }"+ " call f x ;"+ " call g y ;"+ " }"+ " print x ;"+ " }"); } catch(IOException e) { System.out.println(e.getMessage()); } System.out.println("---------------"); // syntactically correct program try { p.parse(" { f "+ " declare x int ;"+ " declare y real ;"+ " declare w string ;"+ " { g"+ " declare x real ;"+ " declare z real ;"+ " call f x ;"+ " call g y ;"+ " }"+ " { h"+ " declare y boolean ;"+ " declare z boolean ;"+ " call f x ;"+ " call g z ;"+ " }"+ " print x ;"+ " }"); } catch(IOException e) { System.out.println(e.getMessage()); } System.out.println("---------------"); // bad block name try { p.parse(" { f "+ " declare x int ;"+ " declare y real ;"+ " { %g"+ " declare x real ;"+ " declare z real ;"+ " call f x ;"+ " call g y ;"+ " }"+ " print x ;"+ " }"); } catch(IOException e) { System.out.println(e.getMessage()); } System.out.println("---------------"); // bad variable try { p.parse(" { f "+ " declare x int ;"+ " declare y real ;"+ " { g"+ " declare x real ;"+ " declare # real ;"+ " call f x ;"+ " call g y ;"+ " }"+ " print x ;"+ " }"); } catch(IOException e) { System.out.println(e.getMessage()); } System.out.println("---------------"); // bad declaration try { p.parse(" { f "+ " declare x int ;"+ " declare y real ;"+ " { g"+ " declare x real ;"+ " declare z ;"+ " call f x ;"+ " call g y ;"+ " }"+ " print x ;"+ " }"); } catch(IOException e) { System.out.println(e.getMessage()); } System.out.println("---------------"); // duplicate identifier try { p.parse(" { f "+ " declare x int ;"+ " declare y real ;"+ " { g"+ " declare x real ;"+ " declare z real ;"+ " declare x real ;"+ " call f x ;"+ " call g y ;"+ " }"+ " print x ;"+ " }"); } catch(IOException e) { System.out.println(e.getMessage()); } System.out.println("---------------"); // duplicate identifier try { p.parse(" { f "+ " declare x int ;"+ " declare y real ;"+ " { y"+ " declare x real ;"+ " declare z real ;"+ " call f x ;"+ " call g y ;"+ " }"+ " print x ;"+ " }"); } catch(IOException e) { System.out.println(e.getMessage()); } System.out.println("---------------"); // program must begin with left brace try { p.parse(" f "+ " declare x int ;"+ " declare y real ;"+ " { g"+ " declare x real ;"+ " declare z real ;"+ " call f x ;"+ " call g y ;"+ " }"+ " print x ;"+ " }"); } catch(IOException e) { System.out.println(e.getMessage()); } System.out.println("---------------"); // g should not be recognized as a block try { p.parse(" { f "+ " declare x int ;"+ " declare y real ;"+ " g"+ " declare x real ;"+ " declare z real ;"+ " call f x ;"+ " call g y ;"+ " }"+ " print x ;"+ " }"); } catch(IOException e) { System.out.println(e.getMessage()); } System.out.println("---------------"); // bad statement try { p.parse(" { f "+ " declare x int ;"+ " declare y real ;"+ " { g"+ " declare x real ;"+ " declare z real ;"+ " call f x ;"+ " call g y ;"+ " }"+ " << x ;"+ " }"); } catch(IOException e) { System.out.println(e.getMessage()); } System.out.println("---------------"); // missing right brace try { p.parse(" { f "+ " declare x int ;"+ " declare y real ;"+ " { g"+ " declare x real ;"+ " declare z real ;"+ " call f x ;"+ " call g y ;"+ " print x ;"+ " }"); } catch(IOException e) { System.out.println(e.getMessage()); } System.out.println("---------------"); // program must end with right brace try { p.parse(" { f "+ " declare x int ;"+ " declare y real ;"+ " { g"+ " declare x real ;"+ " declare z real ;"+ " call f x ;"+ " call g y ;"+ " }"+ " print x ;"); } catch(IOException e) { System.out.println(e.getMessage()); } System.out.println("---------------"); // missing semicolon in declaration try { p.parse(" { f "+ " declare x int ;"+ " declare y real "+ " { g"+ " declare x real ;"+ " declare z real ;"+ " call f x ;"+ " call g y ;"+ " }"+ " print x ;"+ " }"); } catch(IOException e) { System.out.println(e.getMessage()); } System.out.println("---------------"); // missing semicolon in statement try { p.parse(" { f "+ " declare x int ;"+ " declare y real ;"+ " { g"+ " declare x real ;"+ " declare z real ;"+ " call f x ;"+ " call g y"+ " }"+ " print x ;"+ " }"); } catch(IOException e) { System.out.println(e.getMessage()); } } }