@Override public void otherAlt(GrammarAST altTree, GrammarAST rewriteTree, int alt) { altTree = GrammarAST.dupTree(altTree); rewriteTree = GrammarAST.dupTree(rewriteTree); stripSynPred(altTree); stripLeftRecursion(altTree); String altText = text(altTree); String rewriteText = text(rewriteTree); otherAlts.add(altText + (rewriteText != null ? " " + rewriteText : "")); //System.out.println("otherAlt " + alt + ": " + altText + ", rewrite=" + rewriteText); }
@Override public void otherAlt(GrammarAST altTree, GrammarAST rewriteTree, int alt) { altTree = GrammarAST.dupTree(altTree); rewriteTree = GrammarAST.dupTree(rewriteTree); stripSynPred(altTree); stripLeftRecursion(altTree); String altText = text(altTree); String rewriteText = text(rewriteTree); otherAlts.add(altText + (rewriteText != null ? " " + rewriteText : "")); //System.out.println("otherAlt " + alt + ": " + altText + ", rewrite=" + rewriteText); }
@Override public void suffixAlt(GrammarAST altTree, GrammarAST rewriteTree, int alt) { altTree = GrammarAST.dupTree(altTree); rewriteTree = GrammarAST.dupTree(rewriteTree); stripSynPred(altTree); stripLeftRecursion(altTree); ST nameST = recRuleTemplates.getInstanceOf("recRuleName"); nameST.add("ruleName", ruleName); rewriteTree = replaceRuleRefs(rewriteTree, "$" + nameST.render()); String rewriteText = text(rewriteTree); String altText = text(altTree); altText = altText.trim(); suffixAlts.put(alt, altText + (rewriteText != null ? " " + rewriteText : "")); // System.out.println("suffixAlt " + alt + ": " + altText + ", rewrite=" + rewriteText); }
@Override public void suffixAlt(GrammarAST altTree, GrammarAST rewriteTree, int alt) { altTree = GrammarAST.dupTree(altTree); rewriteTree = GrammarAST.dupTree(rewriteTree); stripSynPred(altTree); stripLeftRecursion(altTree); ST nameST = recRuleTemplates.getInstanceOf("recRuleName"); nameST.add("ruleName", ruleName); rewriteTree = replaceRuleRefs(rewriteTree, "$" + nameST.render()); String rewriteText = text(rewriteTree); String altText = text(altTree); altText = altText.trim(); suffixAlts.put(alt, altText + (rewriteText != null ? " " + rewriteText : "")); // System.out.println("suffixAlt " + alt + ": " + altText + ", rewrite=" + rewriteText); }
public static GrammarAST dupTree(GrammarAST t) { if ( t==null ) { return null; } GrammarAST root = dup(t); // make copy of root // copy all children of root. for (int i= 0; i < t.getChildCount(); i++) { GrammarAST child = (GrammarAST)t.getChild(i); root.addChild(dupTree(child)); } return root; }
public static GrammarAST dupTree(GrammarAST t) { if ( t==null ) { return null; } GrammarAST root = dup(t); // make copy of root // copy all children of root. for (int i= 0; i < t.getChildCount(); i++) { GrammarAST child = (GrammarAST)t.getChild(i); root.addChild(dupTree(child)); } return root; }
@Override public void prefixAlt(GrammarAST altTree, GrammarAST rewriteTree, int alt) { altTree = GrammarAST.dupTree(altTree); rewriteTree = GrammarAST.dupTree(rewriteTree); stripSynPred(altTree); int nextPrec = precedence(alt); // rewrite e to be e_[rec_arg] ST refST = recRuleTemplates.getInstanceOf("recRuleRef"); refST.add("ruleName", ruleName); refST.add("arg", nextPrec); altTree = replaceRuleRefs(altTree, refST.render()); String altText = text(altTree); altText = altText.trim(); altText += "{}"; // add empty alt to prevent pred hoisting ST nameST = recRuleTemplates.getInstanceOf("recRuleName"); nameST.add("ruleName", ruleName); rewriteTree = replaceRuleRefs(rewriteTree, nameST.render()); String rewriteText = text(rewriteTree); prefixAlts.add(altText + (rewriteText != null ? " " + rewriteText : "")); //System.out.println("prefixAlt " + alt + ": " + altText + ", rewrite=" + rewriteText); }
@Override public void prefixAlt(GrammarAST altTree, GrammarAST rewriteTree, int alt) { altTree = GrammarAST.dupTree(altTree); rewriteTree = GrammarAST.dupTree(rewriteTree); stripSynPred(altTree); int nextPrec = precedence(alt); // rewrite e to be e_[rec_arg] ST refST = recRuleTemplates.getInstanceOf("recRuleRef"); refST.add("ruleName", ruleName); refST.add("arg", nextPrec); altTree = replaceRuleRefs(altTree, refST.render()); String altText = text(altTree); altText = altText.trim(); altText += "{}"; // add empty alt to prevent pred hoisting ST nameST = recRuleTemplates.getInstanceOf("recRuleName"); nameST.add("ruleName", ruleName); rewriteTree = replaceRuleRefs(rewriteTree, nameST.render()); String rewriteText = text(rewriteTree); prefixAlts.add(altText + (rewriteText != null ? " " + rewriteText : "")); //System.out.println("prefixAlt " + alt + ": " + altText + ", rewrite=" + rewriteText); }
@Override public void binaryAlt(GrammarAST altTree, GrammarAST rewriteTree, int alt) { altTree = GrammarAST.dupTree(altTree); rewriteTree = GrammarAST.dupTree(rewriteTree); stripSynPred(altTree); stripLeftRecursion(altTree); // rewrite e to be e_[rec_arg] int nextPrec = nextPrecedence(alt); ST refST = recRuleTemplates.getInstanceOf("recRuleRef"); refST.add("ruleName", ruleName); refST.add("arg", nextPrec); altTree = replaceRuleRefs(altTree, refST.render()); String altText = text(altTree); altText = altText.trim(); altText += "{}"; // add empty alt to prevent pred hoisting ST nameST = recRuleTemplates.getInstanceOf("recRuleName"); nameST.add("ruleName", ruleName); rewriteTree = replaceRuleRefs(rewriteTree, "$" + nameST.render()); String rewriteText = text(rewriteTree); binaryAlts.put(alt, altText + (rewriteText != null ? " " + rewriteText : "")); //System.out.println("binaryAlt " + alt + ": " + altText + ", rewrite=" + rewriteText); }
@Override public void binaryAlt(GrammarAST altTree, GrammarAST rewriteTree, int alt) { altTree = GrammarAST.dupTree(altTree); rewriteTree = GrammarAST.dupTree(rewriteTree); stripSynPred(altTree); stripLeftRecursion(altTree); // rewrite e to be e_[rec_arg] int nextPrec = nextPrecedence(alt); ST refST = recRuleTemplates.getInstanceOf("recRuleRef"); refST.add("ruleName", ruleName); refST.add("arg", nextPrec); altTree = replaceRuleRefs(altTree, refST.render()); String altText = text(altTree); altText = altText.trim(); altText += "{}"; // add empty alt to prevent pred hoisting ST nameST = recRuleTemplates.getInstanceOf("recRuleName"); nameST.add("ruleName", ruleName); rewriteTree = replaceRuleRefs(rewriteTree, "$" + nameST.render()); String rewriteText = text(rewriteTree); binaryAlts.put(alt, altText + (rewriteText != null ? " " + rewriteText : "")); //System.out.println("binaryAlt " + alt + ": " + altText + ", rewrite=" + rewriteText); }
/** Convert e ? e : e → ? e : e_[nextPrec] */ @Override public void ternaryAlt(GrammarAST altTree, GrammarAST rewriteTree, int alt) { altTree = GrammarAST.dupTree(altTree); rewriteTree = GrammarAST.dupTree(rewriteTree); stripSynPred(altTree); stripLeftRecursion(altTree); int nextPrec = nextPrecedence(alt); ST refST = recRuleTemplates.getInstanceOf("recRuleRef"); refST.add("ruleName", ruleName); refST.add("arg", nextPrec); altTree = replaceLastRuleRef(altTree, refST.render()); String altText = text(altTree); altText = altText.trim(); altText += "{}"; // add empty alt to prevent pred hoisting ST nameST = recRuleTemplates.getInstanceOf("recRuleName"); nameST.add("ruleName", ruleName); rewriteTree = replaceRuleRefs(rewriteTree, "$" + nameST.render()); String rewriteText = text(rewriteTree); ternaryAlts.put(alt, altText + (rewriteText != null ? " " + rewriteText : "")); //System.out.println("ternaryAlt " + alt + ": " + altText + ", rewrite=" + rewriteText); }
/** Convert e ? e : e → ? e : e_[nextPrec] */ @Override public void ternaryAlt(GrammarAST altTree, GrammarAST rewriteTree, int alt) { altTree = GrammarAST.dupTree(altTree); rewriteTree = GrammarAST.dupTree(rewriteTree); stripSynPred(altTree); stripLeftRecursion(altTree); int nextPrec = nextPrecedence(alt); ST refST = recRuleTemplates.getInstanceOf("recRuleRef"); refST.add("ruleName", ruleName); refST.add("arg", nextPrec); altTree = replaceLastRuleRef(altTree, refST.render()); String altText = text(altTree); altText = altText.trim(); altText += "{}"; // add empty alt to prevent pred hoisting ST nameST = recRuleTemplates.getInstanceOf("recRuleName"); nameST.add("ruleName", ruleName); rewriteTree = replaceRuleRefs(rewriteTree, "$" + nameST.render()); String rewriteText = text(rewriteTree); ternaryAlts.put(alt, altText + (rewriteText != null ? " " + rewriteText : "")); //System.out.println("ternaryAlt " + alt + ": " + altText + ", rewrite=" + rewriteText); }