package a2; /** Test program for the Grammar class for CS 152, Fall 2006 */ public class A2 { private static void tryAddingRule(Grammar g, String ruleString) { try { Boolean added = g.addRule(ruleString); if (!added) { System.out.print("rule '" + ruleString); System.out.print("' not added "); System.out.print("-- it's already "); System.out.println("in the grammar"); } } catch(IllegalArgumentException e) { System.out.println( e.getMessage() + " -- rule not added"); } } /** The main test program @param args is ignored */ public static void main(String args[]) { try { Grammar g1 = new Grammar("E"); tryAddingRule(g1,""); tryAddingRule(g1,"E"); tryAddingRule(g1,"E Opd"); tryAddingRule(g1,"E ~ E"); tryAddingRule(g1,"E ( E Op E )"); tryAddingRule(g1,"Op ^"); tryAddingRule(g1,"Op v"); tryAddingRule(g1,"Opd T"); tryAddingRule(g1,"Opd F"); tryAddingRule(g1,"Opd true"); tryAddingRule(g1,"Opd false"); tryAddingRule(g1,"Opd T"); System.out.println( g1.findFirst()); } catch (IllegalArgumentException e) { System.out.println( e.getMessage()); } System.out.println(); try { Grammar g2 = new Grammar("E"); tryAddingRule(g2,"Op + "); tryAddingRule(g2,"Op - "); tryAddingRule(g2,"Opd x"); tryAddingRule(g2,"Opd y"); tryAddingRule(g2,"E E Op E"); tryAddingRule(g2,"E Opd )"); System.out.println( g2.findFirst()); } catch (IllegalArgumentException e) { System.out.println( e.getMessage()); } System.out.println(); try { Grammar g3 = new Grammar("S"); tryAddingRule(g3,"S x = y"); tryAddingRule(g3,"S if T then S"); tryAddingRule(g3,"S if T then S else S"); tryAddingRule(g3,"T x < y"); System.out.println( g3.findFirst()); } catch (IllegalArgumentException e) { System.out.println( e.getMessage()); } System.out.println(); // palindromes of odd length try { Grammar g4 = new Grammar("S"); tryAddingRule(g4,"S a S a"); tryAddingRule(g4,"S b S b"); tryAddingRule(g4,"S a"); tryAddingRule(g4,"S b"); System.out.println( g4.findFirst()); } catch (IllegalArgumentException e) { System.out.println( e.getMessage()); } System.out.println(); // nonempty palindromes of any length try { Grammar g5 = new Grammar("S"); tryAddingRule(g5,"S a S a"); tryAddingRule(g5,"S b S b"); tryAddingRule(g5,"S a a"); tryAddingRule(g5,"S b b"); tryAddingRule(g5,"S a"); tryAddingRule(g5,"S b"); System.out.println( g5.findFirst()); } catch (IllegalArgumentException e) { System.out.println( e.getMessage()); } System.out.println(); try { Grammar g6 = new Grammar("S"); tryAddingRule(g6,"V like"); tryAddingRule(g6,"V flies"); tryAddingRule(g6,"P like"); tryAddingRule(g6,"Det an"); tryAddingRule(g6,"N time"); tryAddingRule(g6,"N flies"); tryAddingRule(g6,"N arrow"); tryAddingRule(g6,"S NP VP"); tryAddingRule(g6,"NP Det N"); tryAddingRule(g6,"NP N N"); tryAddingRule(g6,"NP N"); tryAddingRule(g6,"VP V NP"); tryAddingRule(g6,"VP V PP"); tryAddingRule(g6,"PP P NP"); System.out.println( g6.findFirst()); } catch (IllegalArgumentException e) { System.out.println( e.getMessage()); } System.out.println(); try { Grammar g7 = new Grammar("S"); tryAddingRule(g7,"S NP VP"); tryAddingRule(g7,"NP Det N"); tryAddingRule(g7,"VP VI"); tryAddingRule(g7,"VP VT NP"); tryAddingRule(g7,"Det the"); tryAddingRule(g7,"N boy"); tryAddingRule(g7,"N girl"); tryAddingRule(g7,"VI arrived"); tryAddingRule(g7,"VT liked"); tryAddingRule(g7,"VI sneezed"); tryAddingRule(g7,"VT saw"); System.out.println( g7.findFirst()); } catch (IllegalArgumentException e) { System.out.println( e.getMessage()); } System.out.println(); try { Grammar g8 = new Grammar("S"); tryAddingRule(g8,"S NP VP"); tryAddingRule(g8,"NP Det N"); tryAddingRule(g8,"VP VI"); tryAddingRule(g8,"VP VT NP"); tryAddingRule(g8,"Det the"); tryAddingRule(g8,"N boy"); tryAddingRule(g8,"N girl"); tryAddingRule(g8,"VI arrived"); tryAddingRule(g8,"VI arrived"); tryAddingRule(g8,"VT liked"); tryAddingRule(g8,"VI sneezed"); tryAddingRule(g8,"VT saw"); System.out.println( g8.findFirst()); } catch (IllegalArgumentException e) { System.out.println( e.getMessage()); } System.out.println(); try { Grammar g9 = new Grammar("S"); tryAddingRule(g9,"S NP VP"); tryAddingRule(g9,"NP Det N"); tryAddingRule(g9,"VP VI"); tryAddingRule(g9,"VP VT NP"); tryAddingRule(g9,"Det the"); tryAddingRule(g9,"N boy"); tryAddingRule(g9,"N girl"); tryAddingRule(g9,"VI arrived"); tryAddingRule(g9,"VT liked"); tryAddingRule(g9,"VI smelled"); tryAddingRule(g9,"VT smelled"); System.out.println( g9.findFirst()); } catch (IllegalArgumentException e) { System.out.println( e.getMessage()); } System.out.println(); try { Grammar g10 = new Grammar(""); tryAddingRule(g10,"S x "); tryAddingRule(g10,"S x S S"); System.out.println( g10.findFirst()); } catch (IllegalArgumentException e) { System.out.println( e.getMessage()); } System.out.println(); try { Grammar g11 = new Grammar("Statement"); tryAddingRule(g11,"Statement AssignmentStatement"); tryAddingRule(g11,"Statement ForStatement"); tryAddingRule(g11,"Statement Declaration"); tryAddingRule(g11,"AssignmentStatement Variable := Expression"); tryAddingRule(g11,"ForStatement for Variable in Range"); tryAddingRule(g11,"Declaration TypeName Variable"); tryAddingRule(g11,"Variable identifier"); tryAddingRule(g11,"TypeName identifier"); System.out.println( g11.findFirst()); } catch (IllegalArgumentException e) { System.out.println( e.getMessage()); } System.out.println(); try { Grammar g12 = new Grammar("English sentence"); tryAddingRule(g12,"English sentence hello"); System.out.println( g12.findFirst()); } catch (IllegalArgumentException e) { System.out.println( e.getMessage()); } System.out.println(); try { Grammar g13 = new Grammar("S"); tryAddingRule(g13,"S NP VP"); tryAddingRule(g13,"VP V NP"); tryAddingRule(g13,"NP Det N"); tryAddingRule(g13,"Det the"); tryAddingRule(g13,"Det NP 's"); tryAddingRule(g13,"N professor"); tryAddingRule(g13,"N student"); tryAddingRule(g13,"N dog"); tryAddingRule(g13,"V liked"); tryAddingRule(g13,"V saw"); System.out.println( g13.findFirst()); } catch (IllegalArgumentException e) { System.out.println( e.getMessage()); } System.out.println(); try { Grammar g14 = new Grammar("A"); tryAddingRule(g14,"A B"); tryAddingRule(g14,"A B"); tryAddingRule(g14,"E e"); tryAddingRule(g14,"B C"); tryAddingRule(g14,"F f"); tryAddingRule(g14,"C D E"); tryAddingRule(g14,"D A F"); System.out.println( g14.findFirst()); } catch (IllegalArgumentException e) { System.out.println( e.getMessage()); } System.out.println(); } }