public AltAST addPrecedenceArgToRules(AltAST t, int prec) { if ( t==null ) return null; // get all top-level rule refs from ALT List<GrammarAST> outerAltRuleRefs = t.getNodesWithTypePreorderDFS(IntervalSet.of(RULE_REF)); for (GrammarAST x : outerAltRuleRefs) { RuleRefAST rref = (RuleRefAST)x; boolean recursive = rref.getText().equals(ruleName); boolean rightmost = rref == outerAltRuleRefs.get(outerAltRuleRefs.size()-1); if ( recursive && rightmost ) { GrammarAST dummyValueNode = new GrammarAST(new CommonToken(ANTLRParser.INT, ""+prec)); rref.setOption(LeftRecursiveRuleTransformer.PRECEDENCE_OPTION_NAME, dummyValueNode); } } return t; }
/** Dup token too since we overwrite during LR rule transform */ @Override public RuleRefAST dupNode() { RuleRefAST r = new RuleRefAST(this); // In LR transform, we alter original token stream to make e -> e[n] // Since we will be altering the dup, we need dup to have the // original token. We can set this tree (the original) to have // a new token. r.token = this.token; this.token = new CommonToken(r.token); return r; }
RuleRefAST factoredRuleRef = new RuleRefAST(adaptor.createToken(ANTLRParser.RULE_REF, factoredRule)); factoredRuleRef.setOption(SUPPRESS_ACCESSOR, adaptor.create(ANTLRParser.ID, "true")); Rule factoredRuleDef = _rules.get(factoredRule); if (factoredRuleDef instanceof LeftRecursiveRule) { factoredRuleRef.setOption(LeftRecursiveRuleTransformer.PRECEDENCE_OPTION_NAME, adaptor.create(ANTLRParser.INT, "0"));
public static Map<String,GrammarAST> getUnusedParserRules(Grammar g) { if ( g.ast==null || g.isLexer() ) return null; List<GrammarAST> ruleNodes = g.ast.getNodesWithTypePreorderDFS(IntervalSet.of(ANTLRParser.RULE_REF)); // in case of errors, we walk AST ourselves // ANTLR's Grammar object might have bailed on rule defs etc... Set<String> ruleRefs = new HashSet<String>(); Map<String,GrammarAST> ruleDefs = new HashMap<String,GrammarAST>(); for (GrammarAST x : ruleNodes) { if ( x.getParent().getType()==ANTLRParser.RULE ) { // System.out.println("def "+x); ruleDefs.put(x.getText(), x); } else if ( x instanceof RuleRefAST ) { RuleRefAST r = (RuleRefAST) x; // System.out.println("ref "+r); ruleRefs.add(r.getText()); } } ruleDefs.keySet().removeAll(ruleRefs); return ruleDefs; } }
public AltAST addPrecedenceArgToRules(AltAST t, int prec) { if ( t==null ) return null; // get all top-level rule refs from ALT List<GrammarAST> outerAltRuleRefs = t.getNodesWithTypePreorderDFS(IntervalSet.of(RULE_REF)); for (GrammarAST x : outerAltRuleRefs) { RuleRefAST rref = (RuleRefAST)x; boolean recursive = rref.getText().equals(ruleName); boolean rightmost = rref == outerAltRuleRefs.get(outerAltRuleRefs.size()-1); if ( recursive && rightmost ) { GrammarAST dummyValueNode = new GrammarAST(new CommonToken(ANTLRParser.INT, ""+prec)); rref.setOption(LeftRecursiveRuleTransformer.PRECEDENCE_OPTION_NAME, dummyValueNode); } } return t; }
/** Dup token too since we overwrite during LR rule transform */ @Override public RuleRefAST dupNode() { RuleRefAST r = new RuleRefAST(this); // In LR transform, we alter original token stream to make e -> e[n] // Since we will be altering the dup, we need dup to have the // original token. We can set this tree (the original) to have // a new token. r.token = this.token; this.token = new CommonToken(r.token); return r; }
public AltAST addPrecedenceArgToRules(AltAST t, int prec) { if ( t==null ) return null; // get all top-level rule refs from ALT List<GrammarAST> outerAltRuleRefs = t.getNodesWithTypePreorderDFS(IntervalSet.of(RULE_REF)); for (GrammarAST x : outerAltRuleRefs) { RuleRefAST rref = (RuleRefAST)x; boolean recursive = rref.getText().equals(ruleName); boolean rightmost = rref == outerAltRuleRefs.get(outerAltRuleRefs.size()-1); if ( recursive && rightmost ) { GrammarAST dummyValueNode = new GrammarAST(new CommonToken(ANTLRParser.INT, ""+prec)); rref.setOption(LeftRecursiveRuleTransformer.PRECEDENCE_OPTION_NAME, dummyValueNode); } } return t; }
/** Dup token too since we overwrite during LR rule transform */ @Override public RuleRefAST dupNode() { RuleRefAST r = new RuleRefAST(this); // In LR transform, we alter original token stream to make e -> e[n] // Since we will be altering the dup, we need dup to have the // original token. We can set this tree (the original) to have // a new token. r.token = this.token; this.token = new CommonToken(r.token); return r; }
public AltAST addPrecedenceArgToRules(AltAST t, int prec) { if ( t==null ) return null; // get all top-level rule refs from ALT List<GrammarAST> outerAltRuleRefs = t.getNodesWithTypePreorderDFS(IntervalSet.of(RULE_REF)); for (GrammarAST x : outerAltRuleRefs) { RuleRefAST rref = (RuleRefAST)x; boolean recursive = rref.getText().equals(ruleName); boolean rightmost = rref == outerAltRuleRefs.get(outerAltRuleRefs.size()-1); if ( recursive && rightmost ) { GrammarAST dummyValueNode = new GrammarAST(new CommonToken(ANTLRParser.INT, ""+prec)); rref.setOption(LeftRecursiveRuleTransformer.PRECEDENCE_OPTION_NAME, dummyValueNode); } } return t; }
/** Dup token too since we overwrite during LR rule transform */ @Override public RuleRefAST dupNode() { RuleRefAST r = new RuleRefAST(this); // In LR transform, we alter original token stream to make e -> e[n] // Since we will be altering the dup, we need dup to have the // original token. We can set this tree (the original) to have // a new token. r.token = this.token; this.token = new CommonToken(r.token); return r; }
public AltAST addPrecedenceArgToRules(AltAST t, int prec) { if ( t==null ) return null; // get all top-level rule refs from ALT List<GrammarAST> outerAltRuleRefs = t.getNodesWithTypePreorderDFS(IntervalSet.of(RULE_REF)); for (GrammarAST x : outerAltRuleRefs) { RuleRefAST rref = (RuleRefAST)x; boolean recursive = rref.getText().equals(ruleName); boolean rightmost = rref == outerAltRuleRefs.get(outerAltRuleRefs.size()-1); if ( recursive && rightmost ) { GrammarAST dummyValueNode = new GrammarAST(new CommonToken(ANTLRParser.INT, ""+prec)); rref.setOption(LeftRecursiveRuleTransformer.PRECEDENCE_OPTION_NAME, dummyValueNode); } } return t; }
/** Dup token too since we overwrite during LR rule transform */ @Override public RuleRefAST dupNode() { RuleRefAST r = new RuleRefAST(this); // In LR transform, we alter original token stream to make e -> e[n] // Since we will be altering the dup, we need dup to have the // original token. We can set this tree (the original) to have // a new token. r.token = this.token; this.token = new CommonToken(r.token); return r; }
RULE_REF178_tree = new RuleRefAST(RULE_REF178) ; adaptor.addChild(root_0, RULE_REF178_tree);
RULE_REF178_tree = new RuleRefAST(RULE_REF178) ; adaptor.addChild(root_0, RULE_REF178_tree);
RULE_REF178_tree = new RuleRefAST(RULE_REF178) ; adaptor.addChild(root_0, RULE_REF178_tree);
RULE_REF178_tree = new RuleRefAST(RULE_REF178) ; adaptor.addChild(root_0, RULE_REF178_tree);
RULE_REF180_tree = new RuleRefAST(RULE_REF180) ; adaptor.addChild(root_0, RULE_REF180_tree);
root_1 = (GrammarAST)adaptor.becomeRoot(new RuleRefAST(stream_RULE_REF.nextToken()), root_1);
root_1 = (GrammarAST)adaptor.becomeRoot(new RuleRefAST(stream_RULE_REF.nextToken()), root_1);
root_1 = (GrammarAST)adaptor.becomeRoot(new RuleRefAST(stream_RULE_REF.nextToken()), root_1);