Production p = new Production(tag, nonTerminalName, els, labels, drops);
for(Method m : _cl.getMethods())
if (new TargetMethod(m).isCompatible(p))
- return Sequence.rewritingSequence(m, els, labels, drops);
+ return new TargetMethod(m).makeSequence(p);
for(Class c : _inner)
for(Constructor con : c.getConstructors())
if (new TargetConstructor(con).isCompatible(p))
- return Sequence.rewritingSequence(con, els, labels, drops);
+ return new TargetConstructor(con).makeSequence(p);
for(Class c : _inner)
if (new TargetClass(c).isCompatible(p))
- return Sequence.rewritingSequence(c, els, labels, drops);
+ return new TargetClass(c).makeSequence(p);
throw new RuntimeException("could not find a Java method/class/ctor matching tag \""+tag+"\", nonterminal \""+nonTerminalName+"\"");
}
}
public abstract tag getTag();
public abstract nonterminal getNonTerminal();
public abstract boolean buildSequence(Production p);
+ public abstract Sequence makeSequence(Production p);
public boolean isCompatible(Production p) {
tag t = getTag();
if (t != null &&
return true;
return false;
}
+ public Sequence makeSequence(Production p) {
+ return Sequence.rewritingSequence(_class, p.elements, p.labels, p.drops);
+ }
}
public static class TargetConstructor extends Target {
public final Constructor _ctor;
if (ret!=null) return true;
return false;
}
+ public Sequence makeSequence(Production p) {
+ return Sequence.rewritingSequence(_ctor, p.elements, p.labels, p.drops);
+ }
}
public static class TargetMethod extends Target {
public final Method _method;
if (ret!=null) return true;
return false;
}
+ public Sequence makeSequence(Production p) {
+ return Sequence.rewritingSequence(_method, p.elements, p.labels, p.drops);
+ }
}
public class MG {