}
class PRED_$dcg_expansion_2_3 extends PRED_$dcg_expansion_2 {
public Predicate exec(Prolog engine) {
// '$dcg_expansion'((A-->B),(C:-D,E)):-nonvar(A),A=(F,G),!,'$dcg_translate_dcg_atom'(F,C,H,I),'$dcg_translate_dcg'(B,D,H,J),'$dcg_translate_dcg'(G,E,I,J)
Term a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15;
Predicate p1, p2;
Predicate cont;
a1 = engine.aregs[1];
a2 = engine.aregs[2];
cont = engine.cont;
// '$dcg_expansion'((A-->B),(C:-D,E)):-['$get_level'(F),nonvar(A),'$unify'(A,(G,H)),'$cut'(F),'$dcg_translate_dcg_atom'(G,C,I,J),'$dcg_translate_dcg'(B,D,I,K),'$dcg_translate_dcg'(H,E,J,K)]
a1 = a1.dereference();
if (a1.isStructure()){
if (! s2.equals(((StructureTerm)a1).functor()))
return engine.fail();
Term[] args = ((StructureTerm)a1).args();
a3 = args[0];
a4 = args[1];
} else if (a1.isVariable()){
a3 = new VariableTerm(engine);
a4 = new VariableTerm(engine);
Term[] args = {a3, a4};
((VariableTerm) a1).bind(new StructureTerm(s2, args), engine.trail);
} else {