private void defaultTyping(SupportCodeGenerator scg) {
        for (Pair<String, String> prodKey : prodTable.keySet()) {
            if (!trTable.containsKey(prodKey)) {
                //default typing for implicit nonterminals and undefined rules
                Object[] prod = prodTable.get(prodKey);
                String[] p = (String[]) prod[2];
                String[] np = (String[]) prod[3];
                String[] antes = new String[(p.length + np.length) * 3];
                int i = 0;
                for (String pnt : p) {
                    antes[i++] = first(evarList);
                    antes[i++] = pnt;
                    if (scg.natTypeMap.containsKey(pnt)) {
                        // if nt type has been assigned
                        antes[i++] = scg.natTypeMap.get(pnt);
                    } else {
                        antes[i++] = first(tvarList);
                    }
                }
                for (String npnt : np) {
                    antes[i++] = first(evarList);
                    antes[i++] = npnt;
                    antes[i++] = first(tvarList);
                }
                Object[] tr = new Object[]{prodKey.fst, p.length, first(evarList), first(tvarList), prodKey.snd, antes};
                trTable.put(prodKey, tr);
            }
        }
    }