code: public static Grammar forProductions(String ... prods) {
          StringArrayList symbolTable;
          Grammar grammar;
          String s;
          String[] stringProd;
          int[] prod;
          int idx;
  
          grammar = new Grammar();
          symbolTable = grammar.symbolTable;
          idx = 0; // definite assignment
          for (int p = 0; p < prods.length; p++) {
              stringProd = Strings.toArray(Separator.SPACE.split(prods[p]));
              if (stringProd.length == 0) {
                  throw new IllegalArgumentException();
              }
              prod = new int[stringProd.length];
              // count backwards to have the left-hand-side in idx when the loop has finished
              for (int ofs = prod.length - 1; ofs >= 0; ofs--) {
                  s = stringProd[ofs];
                  idx = symbolTable.indexOf(s);
                  if (idx == -1) {
                      idx = symbolTable.size();
                      symbolTable.add(s);
                  }
                  prod[ofs] = idx;
              }
              if (p == 0) {
                  grammar.start = idx;
              }
              grammar.addProduction(prod);
          }
          return grammar;
      }
docs: start symbol is set to the subject of the first production.