/*************************************************************************/
/*                                                                       */
/*        Produced by MetaGen version 2.0  -    1989-1995                 */
/*       Syntaxic Analyzer Meta Generator developped by                  */
/*                  Eric Lavillonniere                                   */
/*                                                                       */
/*************************************************************************/

#include "token.h"
#include "chopb.h"


#line 625 "chopb.met"
PPTREE chopb::take_follow ( int error_free)
#line 625 "chopb.met"
{
#line 625 "chopb.met"
    int  _oldinMakeTree = inMakeTree;
#line 625 "chopb.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 625 "chopb.met"
    int _value,_nbPre = 0 ;
#line 625 "chopb.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 625 "chopb.met"
    int _Debug = TRACE_RULE("take_follow",TRACE_ENTER,(PPTREE)0);
#line 625 "chopb.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 625 "chopb.met"
#line 625 "chopb.met"
    PPTREE _addlist1 = (PPTREE) 0;
#line 625 "chopb.met"
#line 625 "chopb.met"
    PPTREE statTree = (PPTREE) 0,list = (PPTREE) 0;
#line 625 "chopb.met"
#line 627 "chopb.met"
#line 628 "chopb.met"
    {
#line 628 "chopb.met"
        PPTREE _ptRes0;
#line 628 "chopb.met"
        _ptRes0= MakeTree(NODE_TREE, 1);
#line 628 "chopb.met"
        statTree=_ptRes0;
#line 628 "chopb.met"
    }
#line 628 "chopb.met"
#line 629 "chopb.met"
    if ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(INFESUPE,"<>") && (tokenAhead = 0,CommTerm(),1)){
#line 629 "chopb.met"
#line 629 "chopb.met"
    } else {
#line 629 "chopb.met"
#line 631 "chopb.met"
#line 632 "chopb.met"
        (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 632 "chopb.met"
        if (  !SEE_TOKEN( INFE,"<") || !(CommTerm(),1)) 
#line 632 "chopb.met"
            TOKEN_EXIT(take_follow_exit,"<")
#line 632 "chopb.met"
#line 633 "chopb.met"
        if ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN( IDENT,"IDENT")){
#line 633 "chopb.met"
#line 634 "chopb.met"
            {
#line 634 "chopb.met"
                PPTREE _ptTree0;
#line 634 "chopb.met"
                {
#line 634 "chopb.met"
                    PPTREE _ptTree1,_ptRes1;
#line 634 "chopb.met"
                    _ptRes1= MakeTree(IDENT, 1);
#line 634 "chopb.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 634 "chopb.met"
                    if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 634 "chopb.met"
                        TOKEN_EXIT(take_follow_exit,"IDENT")
#line 634 "chopb.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 634 "chopb.met"
                    _ptTree0=_ptRes1;
#line 634 "chopb.met"
                }
#line 634 "chopb.met"
                list =AddList(list , _ptTree0);
#line 634 "chopb.met"
            }
#line 634 "chopb.met"
#line 634 "chopb.met"
        } else {
#line 634 "chopb.met"
#line 636 "chopb.met"
            list =AddList(list , (PPTREE) 0);
#line 636 "chopb.met"
        }
#line 636 "chopb.met"
#line 637 "chopb.met"
        {
#line 637 "chopb.met"
            inMakeTree = 1 ;
#line 637 "chopb.met"
#line 639 "chopb.met"
#line 639 "chopb.met"
            _addlist1 = list ;
#line 639 "chopb.met"
#line 638 "chopb.met"
            while ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(VIRG,",") && (tokenAhead = 0,CommTerm(),1)) { 
#line 638 "chopb.met"
#line 639 "chopb.met"
#line 639 "chopb.met"
                {
#line 639 "chopb.met"
                    PPTREE _ptTree0;
#line 639 "chopb.met"
                    if ( (_ptTree0=NQUICK_CALL(_Tak(take_follow_super)(error_free), 137, chopb))== (PPTREE) -1 ) {
#line 639 "chopb.met"
                        PROG_EXIT(take_follow_exit,"take_follow")
#line 639 "chopb.met"
                    }
#line 639 "chopb.met"
                    _addlist1 =AddList(_addlist1 , _ptTree0);
#line 639 "chopb.met"
                }
#line 639 "chopb.met"
#line 639 "chopb.met"
                if (list){
#line 639 "chopb.met"
#line 639 "chopb.met"
                    _addlist1 = SonTree (_addlist1 ,2 );
#line 639 "chopb.met"
                } else {
#line 639 "chopb.met"
#line 639 "chopb.met"
                    list = _addlist1 ;
#line 639 "chopb.met"
                }
#line 639 "chopb.met"
            } 
#line 639 "chopb.met"
            inMakeTree =  _oldinMakeTree;
#line 639 "chopb.met"
        }
#line 639 "chopb.met"
#line 640 "chopb.met"
        (tokenAhead == 17|| (LexSup(),TRACE_LEX(1)));
#line 640 "chopb.met"
        if ( ! TERM_OR_META(MAKETREE_SUP,"MAKETREE_SUP") || !(CommTerm(),1)) 
#line 640 "chopb.met"
            TOKEN_EXIT(take_follow_exit,"MAKETREE_SUP")
#line 640 "chopb.met"
    }
#line 640 "chopb.met"
#line 642 "chopb.met"
    ReplaceTree(statTree ,1 ,list );
#line 642 "chopb.met"
#line 644 "chopb.met"
    {
#line 644 "chopb.met"
        _retValue = statTree ;
#line 644 "chopb.met"
        goto take_follow_ret;
#line 644 "chopb.met"
        
#line 644 "chopb.met"
    }
#line 644 "chopb.met"
#line 645 "chopb.met"
(tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 645 "chopb.met"
if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,(PPTREE) 0,lastTree); else {_lastTree=(PPTREE)0;_funcLevel--;}
#line 645 "chopb.met"
inMakeTree =  _oldinMakeTree;
#line 645 "chopb.met"
return((PPTREE) 0);
#line 645 "chopb.met"

#line 645 "chopb.met"
take_follow_exit :
#line 645 "chopb.met"

#line 645 "chopb.met"
    {
#line 645 "chopb.met"
        MulFreeTree(3,list,statTree,_addlist1);
#line 645 "chopb.met"
    }
#line 645 "chopb.met"
    _Debug = TRACE_RULE("take_follow",TRACE_EXIT,(PPTREE)0);
#line 645 "chopb.met"
    _funcLevel--;
#line 645 "chopb.met"
    inMakeTree =  _oldinMakeTree;
#line 645 "chopb.met"
    return((PPTREE) -1) ;
#line 645 "chopb.met"

#line 645 "chopb.met"
take_follow_ret :
#line 645 "chopb.met"
    
#line 645 "chopb.met"
    _Debug = TRACE_RULE("take_follow",TRACE_RETURN,_retValue);
#line 645 "chopb.met"
    (tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 645 "chopb.met"
    if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,_retValue,lastTree); else {_lastTree=_retValue;_funcLevel--;}
#line 645 "chopb.met"
    inMakeTree =  _oldinMakeTree;
#line 645 "chopb.met"
    return _retValue ;
#line 645 "chopb.met"
}
#line 645 "chopb.met"

#line 645 "chopb.met"
#line 609 "chopb.met"
PPTREE chopb::take_follow_list ( int error_free)
#line 609 "chopb.met"
{
#line 609 "chopb.met"
    int  _oldor_not_ok = or_not_ok;
#line 609 "chopb.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 609 "chopb.met"
    int _value,_nbPre = 0 ;
#line 609 "chopb.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 609 "chopb.met"
    int _Debug = TRACE_RULE("take_follow_list",TRACE_ENTER,(PPTREE)0);
#line 609 "chopb.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 609 "chopb.met"
#line 609 "chopb.met"
    PPTREE _addlist1 = (PPTREE) 0;
#line 609 "chopb.met"
#line 609 "chopb.met"
    PPTREE statTree = (PPTREE) 0,list = (PPTREE) 0,inter = (PPTREE) 0;
#line 609 "chopb.met"
#line 611 "chopb.met"
    {
#line 611 "chopb.met"
        or_not_ok = 1 ;
#line 611 "chopb.met"
#line 612 "chopb.met"
#line 613 "chopb.met"
        {
#line 613 "chopb.met"
            PPTREE _ptRes0;
#line 613 "chopb.met"
            _ptRes0= MakeTree(NODE_LIST, 1);
#line 613 "chopb.met"
            statTree=_ptRes0;
#line 613 "chopb.met"
        }
#line 613 "chopb.met"
#line 614 "chopb.met"
        if (NPUSH_CALL_AFF_VERIF(inter = ,_Tak(take_follow_super), 137, chopb)){
#line 614 "chopb.met"
#line 615 "chopb.met"
#line 616 "chopb.met"
            list =AddList(list ,inter );
#line 616 "chopb.met"
#line 616 "chopb.met"
            _addlist1 = list ;
#line 616 "chopb.met"
#line 617 "chopb.met"
            while ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(VBARVBAR,"||") && (tokenAhead = 0,CommTerm(),1)) { 
#line 617 "chopb.met"
#line 618 "chopb.met"
#line 618 "chopb.met"
                {
#line 618 "chopb.met"
                    PPTREE _ptTree0;
#line 618 "chopb.met"
                    if ( (_ptTree0=NQUICK_CALL(_Tak(take_follow_super)(error_free), 137, chopb))== (PPTREE) -1 ) {
#line 618 "chopb.met"
                        PROG_EXIT(take_follow_list_exit,"take_follow_list")
#line 618 "chopb.met"
                    }
#line 618 "chopb.met"
                    _addlist1 =AddList(_addlist1 , _ptTree0);
#line 618 "chopb.met"
                }
#line 618 "chopb.met"
#line 618 "chopb.met"
                if (list){
#line 618 "chopb.met"
#line 618 "chopb.met"
                    _addlist1 = SonTree (_addlist1 ,2 );
#line 618 "chopb.met"
                } else {
#line 618 "chopb.met"
#line 618 "chopb.met"
                    list = _addlist1 ;
#line 618 "chopb.met"
                }
#line 618 "chopb.met"
            } 
#line 618 "chopb.met"
#line 619 "chopb.met"
        }
#line 619 "chopb.met"
#line 620 "chopb.met"
        ReplaceTree(statTree ,1 ,list );
#line 620 "chopb.met"
        or_not_ok =  _oldor_not_ok;
#line 620 "chopb.met"
    }
#line 620 "chopb.met"
#line 622 "chopb.met"
    {
#line 622 "chopb.met"
        _retValue = statTree ;
#line 622 "chopb.met"
        goto take_follow_list_ret;
#line 622 "chopb.met"
        
#line 622 "chopb.met"
    }
#line 622 "chopb.met"
#line 623 "chopb.met"
(tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 623 "chopb.met"
if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,(PPTREE) 0,lastTree); else {_lastTree=(PPTREE)0;_funcLevel--;}
#line 623 "chopb.met"
or_not_ok =  _oldor_not_ok;
#line 623 "chopb.met"
return((PPTREE) 0);
#line 623 "chopb.met"

#line 623 "chopb.met"
take_follow_list_exit :
#line 623 "chopb.met"

#line 623 "chopb.met"
    {
#line 623 "chopb.met"
        MulFreeTree(4,inter,list,statTree,_addlist1);
#line 623 "chopb.met"
    }
#line 623 "chopb.met"
    _Debug = TRACE_RULE("take_follow_list",TRACE_EXIT,(PPTREE)0);
#line 623 "chopb.met"
    _funcLevel--;
#line 623 "chopb.met"
    or_not_ok =  _oldor_not_ok;
#line 623 "chopb.met"
    return((PPTREE) -1) ;
#line 623 "chopb.met"

#line 623 "chopb.met"
take_follow_list_ret :
#line 623 "chopb.met"
    
#line 623 "chopb.met"
    _Debug = TRACE_RULE("take_follow_list",TRACE_RETURN,_retValue);
#line 623 "chopb.met"
    (tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 623 "chopb.met"
    if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,_retValue,lastTree); else {_lastTree=_retValue;_funcLevel--;}
#line 623 "chopb.met"
    or_not_ok =  _oldor_not_ok;
#line 623 "chopb.met"
    return _retValue ;
#line 623 "chopb.met"
}
#line 623 "chopb.met"

#line 623 "chopb.met"
#line 592 "chopb.met"
PPTREE chopb::take_follow_super ( int error_free)
#line 592 "chopb.met"
{
#line 592 "chopb.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 592 "chopb.met"
    int _value,_nbPre = 0 ;
#line 592 "chopb.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 592 "chopb.met"
    int _Debug = TRACE_RULE("take_follow_super",TRACE_ENTER,(PPTREE)0);
#line 592 "chopb.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 592 "chopb.met"
#line 592 "chopb.met"
    PPTREE identTree = (PPTREE) 0;
#line 592 "chopb.met"
#line 594 "chopb.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 594 "chopb.met"
    switch( lexEl.Value) {
#line 594 "chopb.met"
#line 595 "chopb.met"
        case POINPOINPOIN : 
#line 595 "chopb.met"
            tokenAhead = 0 ;
#line 595 "chopb.met"
            CommTerm();
#line 595 "chopb.met"
#line 595 "chopb.met"
            {
#line 595 "chopb.met"
                PPTREE _ptTree0;
#line 595 "chopb.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(take_follow_list)(error_free), 136, chopb))== (PPTREE) -1 ) {
#line 595 "chopb.met"
                    PROG_EXIT(take_follow_super_exit,"take_follow_super")
#line 595 "chopb.met"
                }
#line 595 "chopb.met"
                _retValue =_ptTree0;
#line 595 "chopb.met"
                goto take_follow_super_ret;
#line 595 "chopb.met"
            }
#line 595 "chopb.met"
            break;
#line 595 "chopb.met"
#line 598 "chopb.met"
        case POUV : 
#line 598 "chopb.met"
            tokenAhead = 0 ;
#line 598 "chopb.met"
            CommTerm();
#line 598 "chopb.met"
#line 597 "chopb.met"
            if ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(PFER,")") && (tokenAhead = 0,CommTerm(),1)){
#line 597 "chopb.met"
#line 598 "chopb.met"
                {
#line 598 "chopb.met"
                    PPTREE _ptTree0;
#line 598 "chopb.met"
                    {
#line 598 "chopb.met"
                        PPTREE _ptRes1;
#line 598 "chopb.met"
                        _ptRes1= MakeTree(NIL, 0);
#line 598 "chopb.met"
                        _ptTree0=_ptRes1;
#line 598 "chopb.met"
                    }
#line 598 "chopb.met"
                    _retValue =_ptTree0;
#line 598 "chopb.met"
                    goto take_follow_super_ret;
#line 598 "chopb.met"
                }
#line 598 "chopb.met"
            } else {
#line 598 "chopb.met"
#line 600 "chopb.met"
#line 601 "chopb.met"
                if ( (identTree=NQUICK_CALL(_Tak(assignment_expression)(error_free), 11, chopb))== (PPTREE) -1 ) {
#line 601 "chopb.met"
                    PROG_EXIT(take_follow_super_exit,"take_follow_super")
#line 601 "chopb.met"
                }
#line 601 "chopb.met"
#line 602 "chopb.met"
                (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 602 "chopb.met"
                if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 602 "chopb.met"
                    TOKEN_EXIT(take_follow_super_exit,")")
#line 602 "chopb.met"
#line 603 "chopb.met"
                {
#line 603 "chopb.met"
                    _retValue = identTree ;
#line 603 "chopb.met"
                    goto take_follow_super_ret;
#line 603 "chopb.met"
                    
#line 603 "chopb.met"
                }
#line 603 "chopb.met"
            }
#line 603 "chopb.met"
            break;
#line 603 "chopb.met"
#line 605 "chopb.met"
        default : 
#line 605 "chopb.met"
#line 605 "chopb.met"
            {
#line 605 "chopb.met"
                PPTREE _ptTree0;
#line 605 "chopb.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(assignment_expression)(error_free), 11, chopb))== (PPTREE) -1 ) {
#line 605 "chopb.met"
                    PROG_EXIT(take_follow_super_exit,"take_follow_super")
#line 605 "chopb.met"
                }
#line 605 "chopb.met"
                _retValue =_ptTree0;
#line 605 "chopb.met"
                goto take_follow_super_ret;
#line 605 "chopb.met"
            }
#line 605 "chopb.met"
            break;
#line 605 "chopb.met"
    }
#line 605 "chopb.met"
#line 607 "chopb.met"
(tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 607 "chopb.met"
if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,(PPTREE) 0,lastTree); else {_lastTree=(PPTREE)0;_funcLevel--;}
#line 607 "chopb.met"
return((PPTREE) 0);
#line 607 "chopb.met"

#line 607 "chopb.met"
take_follow_super_exit :
#line 607 "chopb.met"

#line 607 "chopb.met"
    {
#line 607 "chopb.met"
        MulFreeTree(1,identTree);
#line 607 "chopb.met"
    }
#line 607 "chopb.met"
    _Debug = TRACE_RULE("take_follow_super",TRACE_EXIT,(PPTREE)0);
#line 607 "chopb.met"
    _funcLevel--;
#line 607 "chopb.met"
    return((PPTREE) -1) ;
#line 607 "chopb.met"

#line 607 "chopb.met"
take_follow_super_ret :
#line 607 "chopb.met"
    
#line 607 "chopb.met"
    _Debug = TRACE_RULE("take_follow_super",TRACE_RETURN,_retValue);
#line 607 "chopb.met"
    (tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 607 "chopb.met"
    if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,_retValue,lastTree); else {_lastTree=_retValue;_funcLevel--;}
#line 607 "chopb.met"
    return _retValue ;
#line 607 "chopb.met"
}
#line 607 "chopb.met"

#line 607 "chopb.met"
