CollectTokenPairs.java 文件源码

java
阅读 20 收藏 0 点赞 0 评论 0

项目:codebuff 作者:
/** 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;
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号