List<GrammarAST> refs = ast.getNodesWithType(reftypes); allRefs.addAll(refs); Pair<FrequencySet<String>, FrequencySet<String>> minAndAltFreq = getElementFrequenciesForAlt(ast); FrequencySet<String> minFreq = minAndAltFreq.a; FrequencySet<String> altFreq = minAndAltFreq.b;
/** for all alts, find which ref X or r needs List Must see across alts. If any alt needs X or r as list, then define as list. */ public Set<Decl> getDeclsForAllElements(List<AltAST> altASTs) { Set<String> needsList = new HashSet<String>(); List<GrammarAST> allRefs = new ArrayList<GrammarAST>(); for (AltAST ast : altASTs) { IntervalSet reftypes = new IntervalSet(RULE_REF, TOKEN_REF); List<GrammarAST> refs = ast.getNodesWithType(reftypes); allRefs.addAll(refs); FrequencySet<String> altFreq = getElementFrequenciesForAlt(ast); for (GrammarAST t : refs) { String refLabelName = t.getText(); if ( altFreq.count(refLabelName)>1 ) { needsList.add(refLabelName); } } } Set<Decl> decls = new LinkedHashSet<Decl>(); for (GrammarAST t : allRefs) { String refLabelName = t.getText(); List<Decl> d = getDeclForAltElement(t, refLabelName, needsList.contains(refLabelName)); decls.addAll(d); } return decls; }
/** for all alts, find which ref X or r needs List Must see across alts. If any alt needs X or r as list, then define as list. */ public Set<Decl> getDeclsForAllElements(List<AltAST> altASTs) { Set<String> needsList = new HashSet<String>(); List<GrammarAST> allRefs = new ArrayList<GrammarAST>(); for (AltAST ast : altASTs) { IntervalSet reftypes = new IntervalSet(RULE_REF, TOKEN_REF); List<GrammarAST> refs = ast.getNodesWithType(reftypes); allRefs.addAll(refs); FrequencySet<String> altFreq = getElementFrequenciesForAlt(ast); for (GrammarAST t : refs) { String refLabelName = t.getText(); if ( altFreq.count(refLabelName)>1 ) { needsList.add(refLabelName); } } } Set<Decl> decls = new LinkedHashSet<Decl>(); for (GrammarAST t : allRefs) { String refLabelName = t.getText(); List<Decl> d = getDeclForAltElement(t, refLabelName, needsList.contains(refLabelName)); decls.addAll(d); } return decls; }
List<GrammarAST> refs = getRuleTokens(ast.getNodesWithType(reftypes)); allRefs.addAll(refs); Pair<FrequencySet<String>, FrequencySet<String>> minAndAltFreq = getElementFrequenciesForAlt(ast); FrequencySet<String> minFreq = minAndAltFreq.a; FrequencySet<String> altFreq = minAndAltFreq.b;
List<GrammarAST> refs = getRuleTokens(ast.getNodesWithType(reftypes)); allRefs.addAll(refs); Tuple2<FrequencySet<String>, FrequencySet<String>> minAndAltFreq = getElementFrequenciesForAlt(ast); FrequencySet<String> minFreq = minAndAltFreq.getItem1(); FrequencySet<String> altFreq = minAndAltFreq.getItem2();