/** Return a new map from rulename to List of (a,b) pairs stripped of
* tuples (a,b) where a or b is in rule repeated token set.
* E.g., before removing repeated token ',', we see:
*
* elementValueArrayInitializer: 4:'{',',' 1:'{','}' 4:',','}'
*
* After removing tuples containing repeated tokens, we get:
*
* elementValueArrayInitializer: 1:'{','}'
*/
protected Map<RuleAltKey,List<Pair<Integer,Integer>>> stripPairsWithRepeatedTokens() {
Map<RuleAltKey,List<Pair<Integer,Integer>>> ruleToPairsWoRepeats = new HashMap<>();
// For each rule
for (RuleAltKey ruleAltKey : ruleToPairsBag.keySet()) {
Set<Integer> ruleRepeatedTokens = ruleToRepeatedTokensSet.get(ruleAltKey);
Set<Pair<Integer, Integer>> pairsBag = ruleToPairsBag.get(ruleAltKey);
// If there are repeated tokens for this rule
if ( ruleRepeatedTokens!=null ) {
// Remove all (a,b) for b in repeated token set
List<Pair<Integer, Integer>> pairsWoRepeats =
BuffUtils.filter(pairsBag,
p -> !ruleRepeatedTokens.contains(p.a) && !ruleRepeatedTokens.contains(p.b));
ruleToPairsWoRepeats.put(ruleAltKey, pairsWoRepeats);
}
else {
ruleToPairsWoRepeats.put(ruleAltKey, new ArrayList<>(pairsBag));
}
}
return ruleToPairsWoRepeats;
}
CollectTokenPairs.java 文件源码
java
阅读 20
收藏 0
点赞 0
评论 0
项目:codebuff
作者:
评论列表
文章目录