Sophie

Sophie

distrib > Mageia > 5 > i586 > by-pkgid > d6ed6c5147aa2cde3d48cc9fb4d84ac5 > files > 50

ant-antlr3-20110110-11.mga5.noarch.rpm

// $ANTLR 3.2 Sep 23, 2009 12:02:23 F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g 2011-01-08 18:26:17

import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;

public class Simplifier extends TreeParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "MULT", "INT", "ID", "WS", "'+'", "'^'"
    };
    public static final int WS=7;
    public static final int INT=5;
    public static final int MULT=4;
    public static final int ID=6;
    public static final int EOF=-1;
    public static final int T__9=9;
    public static final int T__8=8;

    // delegates
    // delegators


        public Simplifier(TreeNodeStream input) {
            this(input, new RecognizerSharedState());
        }
        public Simplifier(TreeNodeStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        
    protected TreeAdaptor adaptor = new CommonTreeAdaptor();

    public void setTreeAdaptor(TreeAdaptor adaptor) {
        this.adaptor = adaptor;
    }
    public TreeAdaptor getTreeAdaptor() {
        return adaptor;
    }

    public String[] getTokenNames() { return Simplifier.tokenNames; }
    public String getGrammarFileName() { return "F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g"; }


    public static class poly_return extends TreeRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "poly"
    // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:10:1: poly : ( ^( '+' a= INT b= INT ) -> INT[String.valueOf($a.int+$b.int)] | ^( '+' ^( '+' a= INT p= poly ) b= INT ) -> ^( '+' $p INT[String.valueOf($a.int+$b.int)] ) | ^( '+' ^( '+' p= poly a= INT ) b= INT ) -> ^( '+' $p INT[String.valueOf($a.int+$b.int)] ) | ^( '+' p= poly q= poly ) -> {$p.tree.toStringTree().equals(\"0\")}? $q -> {$q.tree.toStringTree().equals(\"0\")}? $p -> ^( '+' $p $q) | ^( MULT INT poly ) -> {$INT.int==1}? poly -> ^( MULT INT poly ) | ^( '^' ID e= INT ) -> {$e.int==1}? ID -> {$e.int==0}? INT[\"1\"] -> ^( '^' ID INT ) | INT | ID );
    public final Simplifier.poly_return poly() throws RecognitionException {
        Simplifier.poly_return retval = new Simplifier.poly_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        CommonTree _first_0 = null;
        CommonTree _last = null;

        CommonTree a=null;
        CommonTree b=null;
        CommonTree e=null;
        CommonTree char_literal1=null;
        CommonTree char_literal2=null;
        CommonTree char_literal3=null;
        CommonTree char_literal4=null;
        CommonTree char_literal5=null;
        CommonTree char_literal6=null;
        CommonTree MULT7=null;
        CommonTree INT8=null;
        CommonTree char_literal10=null;
        CommonTree ID11=null;
        CommonTree INT12=null;
        CommonTree ID13=null;
        Simplifier.poly_return p = null;

        Simplifier.poly_return q = null;

        Simplifier.poly_return poly9 = null;


        CommonTree a_tree=null;
        CommonTree b_tree=null;
        CommonTree e_tree=null;
        CommonTree char_literal1_tree=null;
        CommonTree char_literal2_tree=null;
        CommonTree char_literal3_tree=null;
        CommonTree char_literal4_tree=null;
        CommonTree char_literal5_tree=null;
        CommonTree char_literal6_tree=null;
        CommonTree MULT7_tree=null;
        CommonTree INT8_tree=null;
        CommonTree char_literal10_tree=null;
        CommonTree ID11_tree=null;
        CommonTree INT12_tree=null;
        CommonTree ID13_tree=null;
        RewriteRuleNodeStream stream_INT=new RewriteRuleNodeStream(adaptor,"token INT");
        RewriteRuleNodeStream stream_MULT=new RewriteRuleNodeStream(adaptor,"token MULT");
        RewriteRuleNodeStream stream_ID=new RewriteRuleNodeStream(adaptor,"token ID");
        RewriteRuleNodeStream stream_9=new RewriteRuleNodeStream(adaptor,"token 9");
        RewriteRuleNodeStream stream_8=new RewriteRuleNodeStream(adaptor,"token 8");
        RewriteRuleSubtreeStream stream_poly=new RewriteRuleSubtreeStream(adaptor,"rule poly");
        try {
            // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:15:5: ( ^( '+' a= INT b= INT ) -> INT[String.valueOf($a.int+$b.int)] | ^( '+' ^( '+' a= INT p= poly ) b= INT ) -> ^( '+' $p INT[String.valueOf($a.int+$b.int)] ) | ^( '+' ^( '+' p= poly a= INT ) b= INT ) -> ^( '+' $p INT[String.valueOf($a.int+$b.int)] ) | ^( '+' p= poly q= poly ) -> {$p.tree.toStringTree().equals(\"0\")}? $q -> {$q.tree.toStringTree().equals(\"0\")}? $p -> ^( '+' $p $q) | ^( MULT INT poly ) -> {$INT.int==1}? poly -> ^( MULT INT poly ) | ^( '^' ID e= INT ) -> {$e.int==1}? ID -> {$e.int==0}? INT[\"1\"] -> ^( '^' ID INT ) | INT | ID )
            int alt1=8;
            alt1 = dfa1.predict(input);
            switch (alt1) {
                case 1 :
                    // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:15:7: ^( '+' a= INT b= INT )
                    {
                    _last = (CommonTree)input.LT(1);
                    {
                    CommonTree _save_last_1 = _last;
                    CommonTree _first_1 = null;
                    CommonTree root_1 = (CommonTree)adaptor.nil();_last = (CommonTree)input.LT(1);
                    char_literal1=(CommonTree)match(input,8,FOLLOW_8_in_poly43); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_8.add(char_literal1);



                    match(input, Token.DOWN, null); if (state.failed) return retval;
                    _last = (CommonTree)input.LT(1);
                    a=(CommonTree)match(input,INT,FOLLOW_INT_in_poly47); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_INT.add(a);

                    _last = (CommonTree)input.LT(1);
                    b=(CommonTree)match(input,INT,FOLLOW_INT_in_poly51); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_INT.add(b);


                    match(input, Token.UP, null); if (state.failed) return retval;adaptor.addChild(root_0, root_1);_last = _save_last_1;
                    }



                    // AST REWRITE
                    // elements: INT
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 15:26: -> INT[String.valueOf($a.int+$b.int)]
                    {
                        adaptor.addChild(root_0, (CommonTree)adaptor.create(INT, String.valueOf((a!=null?Integer.valueOf(a.getText()):0)+(b!=null?Integer.valueOf(b.getText()):0))));

                    }

                    retval.tree = root_0;}
                    }
                    break;
                case 2 :
                    // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:17:4: ^( '+' ^( '+' a= INT p= poly ) b= INT )
                    {
                    _last = (CommonTree)input.LT(1);
                    {
                    CommonTree _save_last_1 = _last;
                    CommonTree _first_1 = null;
                    CommonTree root_1 = (CommonTree)adaptor.nil();_last = (CommonTree)input.LT(1);
                    char_literal2=(CommonTree)match(input,8,FOLLOW_8_in_poly64); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_8.add(char_literal2);



                    match(input, Token.DOWN, null); if (state.failed) return retval;
                    _last = (CommonTree)input.LT(1);
                    {
                    CommonTree _save_last_2 = _last;
                    CommonTree _first_2 = null;
                    CommonTree root_2 = (CommonTree)adaptor.nil();_last = (CommonTree)input.LT(1);
                    char_literal3=(CommonTree)match(input,8,FOLLOW_8_in_poly67); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_8.add(char_literal3);



                    match(input, Token.DOWN, null); if (state.failed) return retval;
                    _last = (CommonTree)input.LT(1);
                    a=(CommonTree)match(input,INT,FOLLOW_INT_in_poly71); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_INT.add(a);

                    _last = (CommonTree)input.LT(1);
                    pushFollow(FOLLOW_poly_in_poly75);
                    p=poly();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_poly.add(p.getTree());

                    match(input, Token.UP, null); if (state.failed) return retval;adaptor.addChild(root_1, root_2);_last = _save_last_2;
                    }

                    _last = (CommonTree)input.LT(1);
                    b=(CommonTree)match(input,INT,FOLLOW_INT_in_poly80); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_INT.add(b);


                    match(input, Token.UP, null); if (state.failed) return retval;adaptor.addChild(root_0, root_1);_last = _save_last_1;
                    }



                    // AST REWRITE
                    // elements: p, INT, 8
                    // token labels: 
                    // rule labels: retval, p
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
                    RewriteRuleSubtreeStream stream_p=new RewriteRuleSubtreeStream(adaptor,"rule p",p!=null?p.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 18:8: -> ^( '+' $p INT[String.valueOf($a.int+$b.int)] )
                    {
                        // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:18:11: ^( '+' $p INT[String.valueOf($a.int+$b.int)] )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(stream_8.nextNode(), root_1);

                        adaptor.addChild(root_1, stream_p.nextTree());
                        adaptor.addChild(root_1, (CommonTree)adaptor.create(INT, String.valueOf((a!=null?Integer.valueOf(a.getText()):0)+(b!=null?Integer.valueOf(b.getText()):0))));

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;}
                    }
                    break;
                case 3 :
                    // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:20:4: ^( '+' ^( '+' p= poly a= INT ) b= INT )
                    {
                    _last = (CommonTree)input.LT(1);
                    {
                    CommonTree _save_last_1 = _last;
                    CommonTree _first_1 = null;
                    CommonTree root_1 = (CommonTree)adaptor.nil();_last = (CommonTree)input.LT(1);
                    char_literal4=(CommonTree)match(input,8,FOLLOW_8_in_poly108); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_8.add(char_literal4);



                    match(input, Token.DOWN, null); if (state.failed) return retval;
                    _last = (CommonTree)input.LT(1);
                    {
                    CommonTree _save_last_2 = _last;
                    CommonTree _first_2 = null;
                    CommonTree root_2 = (CommonTree)adaptor.nil();_last = (CommonTree)input.LT(1);
                    char_literal5=(CommonTree)match(input,8,FOLLOW_8_in_poly111); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_8.add(char_literal5);



                    match(input, Token.DOWN, null); if (state.failed) return retval;
                    _last = (CommonTree)input.LT(1);
                    pushFollow(FOLLOW_poly_in_poly115);
                    p=poly();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_poly.add(p.getTree());
                    _last = (CommonTree)input.LT(1);
                    a=(CommonTree)match(input,INT,FOLLOW_INT_in_poly119); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_INT.add(a);


                    match(input, Token.UP, null); if (state.failed) return retval;adaptor.addChild(root_1, root_2);_last = _save_last_2;
                    }

                    _last = (CommonTree)input.LT(1);
                    b=(CommonTree)match(input,INT,FOLLOW_INT_in_poly124); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_INT.add(b);


                    match(input, Token.UP, null); if (state.failed) return retval;adaptor.addChild(root_0, root_1);_last = _save_last_1;
                    }



                    // AST REWRITE
                    // elements: p, INT, 8
                    // token labels: 
                    // rule labels: retval, p
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
                    RewriteRuleSubtreeStream stream_p=new RewriteRuleSubtreeStream(adaptor,"rule p",p!=null?p.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 21:8: -> ^( '+' $p INT[String.valueOf($a.int+$b.int)] )
                    {
                        // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:21:11: ^( '+' $p INT[String.valueOf($a.int+$b.int)] )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(stream_8.nextNode(), root_1);

                        adaptor.addChild(root_1, stream_p.nextTree());
                        adaptor.addChild(root_1, (CommonTree)adaptor.create(INT, String.valueOf((a!=null?Integer.valueOf(a.getText()):0)+(b!=null?Integer.valueOf(b.getText()):0))));

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;}
                    }
                    break;
                case 4 :
                    // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:23:4: ^( '+' p= poly q= poly )
                    {
                    _last = (CommonTree)input.LT(1);
                    {
                    CommonTree _save_last_1 = _last;
                    CommonTree _first_1 = null;
                    CommonTree root_1 = (CommonTree)adaptor.nil();_last = (CommonTree)input.LT(1);
                    char_literal6=(CommonTree)match(input,8,FOLLOW_8_in_poly152); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_8.add(char_literal6);



                    match(input, Token.DOWN, null); if (state.failed) return retval;
                    _last = (CommonTree)input.LT(1);
                    pushFollow(FOLLOW_poly_in_poly156);
                    p=poly();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_poly.add(p.getTree());
                    _last = (CommonTree)input.LT(1);
                    pushFollow(FOLLOW_poly_in_poly160);
                    q=poly();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_poly.add(q.getTree());

                    match(input, Token.UP, null); if (state.failed) return retval;adaptor.addChild(root_0, root_1);_last = _save_last_1;
                    }



                    // AST REWRITE
                    // elements: q, p, 8, q, p
                    // token labels: 
                    // rule labels: retval, q, p
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
                    RewriteRuleSubtreeStream stream_q=new RewriteRuleSubtreeStream(adaptor,"rule q",q!=null?q.tree:null);
                    RewriteRuleSubtreeStream stream_p=new RewriteRuleSubtreeStream(adaptor,"rule p",p!=null?p.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 23:24: -> {$p.tree.toStringTree().equals(\"0\")}? $q
                    if ((p!=null?((CommonTree)p.tree):null).toStringTree().equals("0")) {
                        adaptor.addChild(root_0, stream_q.nextTree());

                    }
                    else // 24:8: -> {$q.tree.toStringTree().equals(\"0\")}? $p
                    if ((q!=null?((CommonTree)q.tree):null).toStringTree().equals("0")) {
                        adaptor.addChild(root_0, stream_p.nextTree());

                    }
                    else // 25:8: -> ^( '+' $p $q)
                    {
                        // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:25:11: ^( '+' $p $q)
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(stream_8.nextNode(), root_1);

                        adaptor.addChild(root_1, stream_p.nextTree());
                        adaptor.addChild(root_1, stream_q.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;}
                    }
                    break;
                case 5 :
                    // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:27:4: ^( MULT INT poly )
                    {
                    _last = (CommonTree)input.LT(1);
                    {
                    CommonTree _save_last_1 = _last;
                    CommonTree _first_1 = null;
                    CommonTree root_1 = (CommonTree)adaptor.nil();_last = (CommonTree)input.LT(1);
                    MULT7=(CommonTree)match(input,MULT,FOLLOW_MULT_in_poly207); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_MULT.add(MULT7);



                    match(input, Token.DOWN, null); if (state.failed) return retval;
                    _last = (CommonTree)input.LT(1);
                    INT8=(CommonTree)match(input,INT,FOLLOW_INT_in_poly209); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_INT.add(INT8);

                    _last = (CommonTree)input.LT(1);
                    pushFollow(FOLLOW_poly_in_poly211);
                    poly9=poly();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_poly.add(poly9.getTree());

                    match(input, Token.UP, null); if (state.failed) return retval;adaptor.addChild(root_0, root_1);_last = _save_last_1;
                    }



                    // AST REWRITE
                    // elements: poly, INT, poly, MULT
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 27:21: -> {$INT.int==1}? poly
                    if ((INT8!=null?Integer.valueOf(INT8.getText()):0)==1) {
                        adaptor.addChild(root_0, stream_poly.nextTree());

                    }
                    else // 28:8: -> ^( MULT INT poly )
                    {
                        // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:28:11: ^( MULT INT poly )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(stream_MULT.nextNode(), root_1);

                        adaptor.addChild(root_1, stream_INT.nextNode());
                        adaptor.addChild(root_1, stream_poly.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;}
                    }
                    break;
                case 6 :
                    // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:30:4: ^( '^' ID e= INT )
                    {
                    _last = (CommonTree)input.LT(1);
                    {
                    CommonTree _save_last_1 = _last;
                    CommonTree _first_1 = null;
                    CommonTree root_1 = (CommonTree)adaptor.nil();_last = (CommonTree)input.LT(1);
                    char_literal10=(CommonTree)match(input,9,FOLLOW_9_in_poly242); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_9.add(char_literal10);



                    match(input, Token.DOWN, null); if (state.failed) return retval;
                    _last = (CommonTree)input.LT(1);
                    ID11=(CommonTree)match(input,ID,FOLLOW_ID_in_poly244); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_ID.add(ID11);

                    _last = (CommonTree)input.LT(1);
                    e=(CommonTree)match(input,INT,FOLLOW_INT_in_poly248); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_INT.add(e);


                    match(input, Token.UP, null); if (state.failed) return retval;adaptor.addChild(root_0, root_1);_last = _save_last_1;
                    }



                    // AST REWRITE
                    // elements: INT, 9, ID, ID, INT
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 30:21: -> {$e.int==1}? ID
                    if ((e!=null?Integer.valueOf(e.getText()):0)==1) {
                        adaptor.addChild(root_0, stream_ID.nextNode());

                    }
                    else // 31:8: -> {$e.int==0}? INT[\"1\"]
                    if ((e!=null?Integer.valueOf(e.getText()):0)==0) {
                        adaptor.addChild(root_0, (CommonTree)adaptor.create(INT, "1"));

                    }
                    else // 32:8: -> ^( '^' ID INT )
                    {
                        // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:32:11: ^( '^' ID INT )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(stream_9.nextNode(), root_1);

                        adaptor.addChild(root_1, stream_ID.nextNode());
                        adaptor.addChild(root_1, stream_INT.nextNode());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;}
                    }
                    break;
                case 7 :
                    // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:34:4: INT
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    _last = (CommonTree)input.LT(1);
                    INT12=(CommonTree)match(input,INT,FOLLOW_INT_in_poly293); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    INT12_tree = (CommonTree)adaptor.dupNode(INT12);

                    adaptor.addChild(root_0, INT12_tree);
                    }

                    if ( state.backtracking==0 ) {
                    }
                    }
                    break;
                case 8 :
                    // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:35:4: ID
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    _last = (CommonTree)input.LT(1);
                    ID13=(CommonTree)match(input,ID,FOLLOW_ID_in_poly298); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    ID13_tree = (CommonTree)adaptor.dupNode(ID13);

                    adaptor.addChild(root_0, ID13_tree);
                    }

                    if ( state.backtracking==0 ) {
                    }
                    }
                    break;

            }
            if ( state.backtracking==0 ) {

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "poly"

    // $ANTLR start synpred1_Simplifier
    public final void synpred1_Simplifier_fragment() throws RecognitionException {   
        CommonTree a=null;
        CommonTree b=null;

        // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:15:7: ( ^( '+' a= INT b= INT ) )
        // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:15:7: ^( '+' a= INT b= INT )
        {
        match(input,8,FOLLOW_8_in_synpred1_Simplifier43); if (state.failed) return ;

        match(input, Token.DOWN, null); if (state.failed) return ;
        a=(CommonTree)match(input,INT,FOLLOW_INT_in_synpred1_Simplifier47); if (state.failed) return ;
        b=(CommonTree)match(input,INT,FOLLOW_INT_in_synpred1_Simplifier51); if (state.failed) return ;

        match(input, Token.UP, null); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred1_Simplifier

    // $ANTLR start synpred2_Simplifier
    public final void synpred2_Simplifier_fragment() throws RecognitionException {   
        CommonTree a=null;
        CommonTree b=null;
        Simplifier.poly_return p = null;


        // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:17:4: ( ^( '+' ^( '+' a= INT p= poly ) b= INT ) )
        // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:17:4: ^( '+' ^( '+' a= INT p= poly ) b= INT )
        {
        match(input,8,FOLLOW_8_in_synpred2_Simplifier64); if (state.failed) return ;

        match(input, Token.DOWN, null); if (state.failed) return ;
        match(input,8,FOLLOW_8_in_synpred2_Simplifier67); if (state.failed) return ;

        match(input, Token.DOWN, null); if (state.failed) return ;
        a=(CommonTree)match(input,INT,FOLLOW_INT_in_synpred2_Simplifier71); if (state.failed) return ;
        pushFollow(FOLLOW_poly_in_synpred2_Simplifier75);
        p=poly();

        state._fsp--;
        if (state.failed) return ;

        match(input, Token.UP, null); if (state.failed) return ;
        b=(CommonTree)match(input,INT,FOLLOW_INT_in_synpred2_Simplifier80); if (state.failed) return ;

        match(input, Token.UP, null); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred2_Simplifier

    // $ANTLR start synpred3_Simplifier
    public final void synpred3_Simplifier_fragment() throws RecognitionException {   
        CommonTree a=null;
        CommonTree b=null;
        Simplifier.poly_return p = null;


        // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:20:4: ( ^( '+' ^( '+' p= poly a= INT ) b= INT ) )
        // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:20:4: ^( '+' ^( '+' p= poly a= INT ) b= INT )
        {
        match(input,8,FOLLOW_8_in_synpred3_Simplifier108); if (state.failed) return ;

        match(input, Token.DOWN, null); if (state.failed) return ;
        match(input,8,FOLLOW_8_in_synpred3_Simplifier111); if (state.failed) return ;

        match(input, Token.DOWN, null); if (state.failed) return ;
        pushFollow(FOLLOW_poly_in_synpred3_Simplifier115);
        p=poly();

        state._fsp--;
        if (state.failed) return ;
        a=(CommonTree)match(input,INT,FOLLOW_INT_in_synpred3_Simplifier119); if (state.failed) return ;

        match(input, Token.UP, null); if (state.failed) return ;
        b=(CommonTree)match(input,INT,FOLLOW_INT_in_synpred3_Simplifier124); if (state.failed) return ;

        match(input, Token.UP, null); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred3_Simplifier

    // $ANTLR start synpred4_Simplifier
    public final void synpred4_Simplifier_fragment() throws RecognitionException {   
        Simplifier.poly_return p = null;

        Simplifier.poly_return q = null;


        // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:23:4: ( ^( '+' p= poly q= poly ) )
        // F:\\tmp\\antlr3-task - Kopie\\examples\\polydiff-netbeans\\polydiff\\grammar\\Simplifier.g:23:4: ^( '+' p= poly q= poly )
        {
        match(input,8,FOLLOW_8_in_synpred4_Simplifier152); if (state.failed) return ;

        match(input, Token.DOWN, null); if (state.failed) return ;
        pushFollow(FOLLOW_poly_in_synpred4_Simplifier156);
        p=poly();

        state._fsp--;
        if (state.failed) return ;
        pushFollow(FOLLOW_poly_in_synpred4_Simplifier160);
        q=poly();

        state._fsp--;
        if (state.failed) return ;

        match(input, Token.UP, null); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred4_Simplifier

    // Delegated rules

    public final boolean synpred2_Simplifier() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred2_Simplifier_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred1_Simplifier() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred1_Simplifier_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred4_Simplifier() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred4_Simplifier_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred3_Simplifier() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred3_Simplifier_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }


    protected DFA1 dfa1 = new DFA1(this);
    static final String DFA1_eotS =
        "\12\uffff";
    static final String DFA1_eofS =
        "\12\uffff";
    static final String DFA1_minS =
        "\1\4\1\0\10\uffff";
    static final String DFA1_maxS =
        "\1\11\1\0\10\uffff";
    static final String DFA1_acceptS =
        "\2\uffff\1\5\1\6\1\7\1\10\1\1\1\2\1\3\1\4";
    static final String DFA1_specialS =
        "\1\uffff\1\0\10\uffff}>";
    static final String[] DFA1_transitionS = {
            "\1\2\1\4\1\5\1\uffff\1\1\1\3",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA1_eot = DFA.unpackEncodedString(DFA1_eotS);
    static final short[] DFA1_eof = DFA.unpackEncodedString(DFA1_eofS);
    static final char[] DFA1_min = DFA.unpackEncodedStringToUnsignedChars(DFA1_minS);
    static final char[] DFA1_max = DFA.unpackEncodedStringToUnsignedChars(DFA1_maxS);
    static final short[] DFA1_accept = DFA.unpackEncodedString(DFA1_acceptS);
    static final short[] DFA1_special = DFA.unpackEncodedString(DFA1_specialS);
    static final short[][] DFA1_transition;

    static {
        int numStates = DFA1_transitionS.length;
        DFA1_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA1_transition[i] = DFA.unpackEncodedString(DFA1_transitionS[i]);
        }
    }

    class DFA1 extends DFA {

        public DFA1(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 1;
            this.eot = DFA1_eot;
            this.eof = DFA1_eof;
            this.min = DFA1_min;
            this.max = DFA1_max;
            this.accept = DFA1_accept;
            this.special = DFA1_special;
            this.transition = DFA1_transition;
        }
        public String getDescription() {
            return "10:1: poly : ( ^( '+' a= INT b= INT ) -> INT[String.valueOf($a.int+$b.int)] | ^( '+' ^( '+' a= INT p= poly ) b= INT ) -> ^( '+' $p INT[String.valueOf($a.int+$b.int)] ) | ^( '+' ^( '+' p= poly a= INT ) b= INT ) -> ^( '+' $p INT[String.valueOf($a.int+$b.int)] ) | ^( '+' p= poly q= poly ) -> {$p.tree.toStringTree().equals(\"0\")}? $q -> {$q.tree.toStringTree().equals(\"0\")}? $p -> ^( '+' $p $q) | ^( MULT INT poly ) -> {$INT.int==1}? poly -> ^( MULT INT poly ) | ^( '^' ID e= INT ) -> {$e.int==1}? ID -> {$e.int==0}? INT[\"1\"] -> ^( '^' ID INT ) | INT | ID );";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TreeNodeStream input = (TreeNodeStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA1_1 = input.LA(1);

                         
                        int index1_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred1_Simplifier()) ) {s = 6;}

                        else if ( (synpred2_Simplifier()) ) {s = 7;}

                        else if ( (synpred3_Simplifier()) ) {s = 8;}

                        else if ( (synpred4_Simplifier()) ) {s = 9;}

                         
                        input.seek(index1_1);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 1, _s, input);
            error(nvae);
            throw nvae;
        }
    }
 

    public static final BitSet FOLLOW_8_in_poly43 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_INT_in_poly47 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_INT_in_poly51 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_8_in_poly64 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_8_in_poly67 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_INT_in_poly71 = new BitSet(new long[]{0x0000000000000370L});
    public static final BitSet FOLLOW_poly_in_poly75 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_INT_in_poly80 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_8_in_poly108 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_8_in_poly111 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_poly_in_poly115 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_INT_in_poly119 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_INT_in_poly124 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_8_in_poly152 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_poly_in_poly156 = new BitSet(new long[]{0x0000000000000370L});
    public static final BitSet FOLLOW_poly_in_poly160 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_MULT_in_poly207 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_INT_in_poly209 = new BitSet(new long[]{0x0000000000000370L});
    public static final BitSet FOLLOW_poly_in_poly211 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_9_in_poly242 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_ID_in_poly244 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_INT_in_poly248 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_INT_in_poly293 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ID_in_poly298 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_8_in_synpred1_Simplifier43 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_INT_in_synpred1_Simplifier47 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_INT_in_synpred1_Simplifier51 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_8_in_synpred2_Simplifier64 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_8_in_synpred2_Simplifier67 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_INT_in_synpred2_Simplifier71 = new BitSet(new long[]{0x0000000000000370L});
    public static final BitSet FOLLOW_poly_in_synpred2_Simplifier75 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_INT_in_synpred2_Simplifier80 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_8_in_synpred3_Simplifier108 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_8_in_synpred3_Simplifier111 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_poly_in_synpred3_Simplifier115 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_INT_in_synpred3_Simplifier119 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_INT_in_synpred3_Simplifier124 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_8_in_synpred4_Simplifier152 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_poly_in_synpred4_Simplifier156 = new BitSet(new long[]{0x0000000000000370L});
    public static final BitSet FOLLOW_poly_in_synpred4_Simplifier160 = new BitSet(new long[]{0x0000000000000008L});

}