import java.util.*; import javax.swing.JComponent; class grammar { // this is the set of selections that are to be propagated by an LTMS static ArrayList UserSelections = new ArrayList(); private static boolean debugIsOn = false; private static boolean updateNow = true; private static boolean beginning = true; static variable root = null; static variable getRoot() { if (root != null) return root; String rootName = ( grammar.rootProduction ).name; root = ( variable ) ( variable.Vtable.get( rootName ) ); return root; } static void initDebugTable() // initialize debug table { if ( beginning ) { reset(); } DebugTable.createAndShowGUI(); debugIsOn = true; } static void initFormulas() // initialize propagation formulas table { Formulas.createAndShowGUI(); } static void propagate() // clear variables, and propagate UserSelections { /* DEBUG System.out.println( " ----------------propagate() called --------------- " ); */ beginning = false; updateNow = false; reset(); updateNow = true; cnfClause.stack = new Stack(); // always set the root variable root = getRoot(); root.resetRoot(); root.set(false); cnfClause.BCP(); Iterator i = UserSelections.iterator(); while ( i.hasNext() ) { variable v = ( variable ) i.next(); v.set(false); // set variable to be true v.justify(); // set by user cnfClause.BCP(); } /* DEBUG System.out.println("----- Propagate done ----"); */ if ( debugIsOn ) { // update debug table components for ( int row = 0; row < DebugTable.sortedVtable.length; row++ ) { variable v = ( variable ) ( variable.Vtable.get( DebugTable.sortedVtable[row] ) ); if ( v.value == variable.T ) { DebugTable.data[row][1] = "True"; } else if ( v.value == variable.F ) { DebugTable.data[row][1] = "False"; } else // v.value == variable.U { DebugTable.data[row][1] = "Unknown"; } if ( v.userSet ) { DebugTable.data[row][2] = "True"; } else { DebugTable.data[row][2] = "False"; } } DebugTable.update(); } } public static void reset() // reset variables { Iterator vars = ( variable.Vtable.values() ).iterator(); while( vars.hasNext() ) { variable v = ( variable ) ( vars.next() ); v.reset(); /* DEBUG v.value = variable.U; v.userSet = false; v.explanation = ""; */ } variable root = getRoot(); root.resetRoot(); /* DEBUG root.value = variable.T; root.userSet = true; root.explanation = "Root"; */ /* DEBUG if( debugIsOn && updateNow ) { // update debug table components for( int row = 0; row < DebugTable.sortedVtable.length; row++ ) { variable v = ( variable ) ( variable.Vtable.get( DebugTable.sortedVtable[row] ) ); if( rootName.equals( v.name ) ) { DebugTable.data[row][1] = "True"; DebugTable.data[row][2] = "False"; } else { DebugTable.data[row][1] = "Unknown"; DebugTable.data[row][2] = "True"; } } DebugTable.update(); } */ } }