private void buildStateTable(Vector<String> tempRuleList){
  tempStateTable=new Vector<>();
  tempStateTable.addElement(new short[numCategories + 1]);
  tempStateTable.addElement(new short[numCategories + 1]);
  for (int i=0; i < tempRuleList.size(); i++) {
    String rule=tempRuleList.elementAt(i);
    if (rule.charAt(0) != '!') {
      parseRule(rule,true);
    }
  }
  finishBuildingStateTable(true);
}

private void buildStateTable ( Vector < String > tempRuleList ) { tempStateTable = new Vector < > ( ) ; tempStateTable . addElement ( new short [ numCategories + 1 ] ) ; tempStateTable . addElement ( new short [ numCategories + 1 ] ) ; for ( int i = 0 ; i < tempRuleList . size ( ) ; i ++ ) { String rule = tempRuleList . elementAt ( i ) ; if ( rule . charAt ( 0 ) != '!' ) { parseRule ( rule , true ) ; } } finishBuildingStateTable ( true ) ; }
this is the function that builds the forward state table . most of the real work is done in parserule ( ) , which is called once for each rule in the description .
