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

#include "token.h"
#include "metalang.h"


#line 790 "metalang.met"
PPTREE metalang::maketree_follow ( int error_free)
#line 790 "metalang.met"
{
#line 790 "metalang.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 790 "metalang.met"
    int _value,_nbPre = 0 ;
#line 790 "metalang.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 790 "metalang.met"
    int _Debug = TRACE_RULE("maketree_follow",TRACE_ENTER,(PPTREE)0);
#line 790 "metalang.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 790 "metalang.met"
#line 790 "metalang.met"
    PPTREE _addlist1 = (PPTREE) 0;
#line 790 "metalang.met"
#line 790 "metalang.met"
    PPTREE list = (PPTREE) 0;
#line 790 "metalang.met"
#line 790 "metalang.met"
    _addlist1 = list ;
#line 790 "metalang.met"
#line 792 "metalang.met"
    do {
#line 792 "metalang.met"
#line 793 "metalang.met"
        {
#line 793 "metalang.met"
            PPTREE _ptTree0;
#line 793 "metalang.met"
            if ( (_ptTree0=NQUICK_CALL(_Tak(gen_param)(error_free), 10, metalang))== (PPTREE) -1 ) {
#line 793 "metalang.met"
                PROG_EXIT(maketree_follow_exit,"maketree_follow")
#line 793 "metalang.met"
            }
#line 793 "metalang.met"
            _addlist1 =AddList(_addlist1 , _ptTree0);
#line 793 "metalang.met"
        }
#line 793 "metalang.met"
#line 793 "metalang.met"
        if (list){
#line 793 "metalang.met"
#line 793 "metalang.met"
            _addlist1 = SonTree (_addlist1 ,2 );
#line 793 "metalang.met"
        } else {
#line 793 "metalang.met"
#line 793 "metalang.met"
            list = _addlist1 ;
#line 793 "metalang.met"
        }
#line 793 "metalang.met"
#line 794 "metalang.met"
    } while ( !(! ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(VIRG,",") && (tokenAhead = 0,CommTerm(),1)))) ;
#line 794 "metalang.met"
#line 795 "metalang.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 795 "metalang.met"
    if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 795 "metalang.met"
        TOKEN_EXIT(maketree_follow_exit,")")
#line 795 "metalang.met"
#line 796 "metalang.met"
    {
#line 796 "metalang.met"
        _retValue = list ;
#line 796 "metalang.met"
        goto maketree_follow_ret;
#line 796 "metalang.met"
        
#line 796 "metalang.met"
    }
#line 796 "metalang.met"
#line 796 "metalang.met"
#line 796 "metalang.met"

#line 797 "metalang.met"
(tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 797 "metalang.met"
if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,(PPTREE) 0,lastTree); else {_lastTree=(PPTREE)0;_funcLevel--;}
#line 797 "metalang.met"
return((PPTREE) 0);
#line 797 "metalang.met"

#line 797 "metalang.met"
maketree_follow_exit :
#line 797 "metalang.met"

#line 797 "metalang.met"
    {
#line 797 "metalang.met"
        MulFreeTree(2,list,_addlist1);
#line 797 "metalang.met"
    }
#line 797 "metalang.met"
    _Debug = TRACE_RULE("maketree_follow",TRACE_EXIT,(PPTREE)0);
#line 797 "metalang.met"
    _funcLevel--;
#line 797 "metalang.met"
    return((PPTREE) -1) ;
#line 797 "metalang.met"

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

#line 797 "metalang.met"
#line 660 "metalang.met"
PPTREE metalang::one_condition ( int error_free)
#line 660 "metalang.met"
{
#line 660 "metalang.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 660 "metalang.met"
    int _value,_nbPre = 0 ;
#line 660 "metalang.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 660 "metalang.met"
    int _Debug = TRACE_RULE("one_condition",TRACE_ENTER,(PPTREE)0);
#line 660 "metalang.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 660 "metalang.met"
#line 660 "metalang.met"
    PPTREE ident = (PPTREE) 0,condTree = (PPTREE) 0;
#line 660 "metalang.met"
#line 662 "metalang.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 662 "metalang.met"
    switch( lexEl.Value) {
#line 662 "metalang.met"
#line 663 "metalang.met"
        case SEE : 
#line 663 "metalang.met"
            tokenAhead = 0 ;
#line 663 "metalang.met"
            CommTerm();
#line 663 "metalang.met"
#line 664 "metalang.met"
            {
#line 664 "metalang.met"
                PPTREE _ptTree0;
#line 664 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(see_follow)(error_free), 17, metalang))== (PPTREE) -1 ) {
#line 664 "metalang.met"
                    PROG_EXIT(one_condition_exit,"one_condition")
#line 664 "metalang.met"
                }
#line 664 "metalang.met"
                _retValue =_ptTree0;
#line 664 "metalang.met"
                goto one_condition_ret;
#line 664 "metalang.met"
            }
#line 664 "metalang.met"
            break;
#line 664 "metalang.met"
#line 665 "metalang.met"
        case TAKE : 
#line 665 "metalang.met"
            tokenAhead = 0 ;
#line 665 "metalang.met"
            CommTerm();
#line 665 "metalang.met"
#line 666 "metalang.met"
            {
#line 666 "metalang.met"
                PPTREE _ptTree0;
#line 666 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(take_follow)(error_free), 21, metalang))== (PPTREE) -1 ) {
#line 666 "metalang.met"
                    PROG_EXIT(one_condition_exit,"one_condition")
#line 666 "metalang.met"
                }
#line 666 "metalang.met"
                _retValue =_ptTree0;
#line 666 "metalang.met"
                goto one_condition_ret;
#line 666 "metalang.met"
            }
#line 666 "metalang.met"
            break;
#line 666 "metalang.met"
#line 667 "metalang.met"
        case NOT : 
#line 667 "metalang.met"
            tokenAhead = 0 ;
#line 667 "metalang.met"
            CommTerm();
#line 667 "metalang.met"
#line 668 "metalang.met"
            {
#line 668 "metalang.met"
                PPTREE _ptTree0;
#line 668 "metalang.met"
                {
#line 668 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 668 "metalang.met"
                    _ptRes1= MakeTree(NOT, 1);
#line 668 "metalang.met"
                    if ( (_ptTree1=NQUICK_CALL(_Tak(one_condition)(error_free), 14, metalang))== (PPTREE) -1 ) {
#line 668 "metalang.met"
                        PROG_EXIT(one_condition_exit,"one_condition")
#line 668 "metalang.met"
                    }
#line 668 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 668 "metalang.met"
                    _ptTree0=_ptRes1;
#line 668 "metalang.met"
                }
#line 668 "metalang.met"
                _retValue =_ptTree0;
#line 668 "metalang.met"
                goto one_condition_ret;
#line 668 "metalang.met"
            }
#line 668 "metalang.met"
            break;
#line 668 "metalang.met"
#line 669 "metalang.met"
        case SEEL : 
#line 669 "metalang.met"
#line 670 "metalang.met"
            {
#line 670 "metalang.met"
                PPTREE _ptTree0;
#line 670 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(seel_stat)(error_free), 18, metalang))== (PPTREE) -1 ) {
#line 670 "metalang.met"
                    PROG_EXIT(one_condition_exit,"one_condition")
#line 670 "metalang.met"
                }
#line 670 "metalang.met"
                _retValue =_ptTree0;
#line 670 "metalang.met"
                goto one_condition_ret;
#line 670 "metalang.met"
            }
#line 670 "metalang.met"
            break;
#line 670 "metalang.met"
#line 671 "metalang.met"
        case TAKEL : 
#line 671 "metalang.met"
#line 672 "metalang.met"
            {
#line 672 "metalang.met"
                PPTREE _ptTree0;
#line 672 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(takel_stat)(error_free), 22, metalang))== (PPTREE) -1 ) {
#line 672 "metalang.met"
                    PROG_EXIT(one_condition_exit,"one_condition")
#line 672 "metalang.met"
                }
#line 672 "metalang.met"
                _retValue =_ptTree0;
#line 672 "metalang.met"
                goto one_condition_ret;
#line 672 "metalang.met"
            }
#line 672 "metalang.met"
            break;
#line 672 "metalang.met"
#line 673 "metalang.met"
        case META : 
#line 673 "metalang.met"
        case IDENT : 
#line 673 "metalang.met"
#line 674 "metalang.met"
#line 675 "metalang.met"
            {
#line 675 "metalang.met"
                PPTREE _ptTree0,_ptRes0;
#line 675 "metalang.met"
                _ptRes0= MakeTree(IDENT, 1);
#line 675 "metalang.met"
                (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 675 "metalang.met"
                if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree0))) 
#line 675 "metalang.met"
                    TOKEN_EXIT(one_condition_exit,"IDENT")
#line 675 "metalang.met"
                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 675 "metalang.met"
                ident=_ptRes0;
#line 675 "metalang.met"
            }
#line 675 "metalang.met"
#line 676 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 676 "metalang.met"
            switch( lexEl.Value) {
#line 676 "metalang.met"
#line 677 "metalang.met"
                case POUV : 
#line 677 "metalang.met"
                    tokenAhead = 0 ;
#line 677 "metalang.met"
                    CommTerm();
#line 677 "metalang.met"
#line 677 "metalang.met"
                    {
#line 677 "metalang.met"
                        PPTREE _ptTree0;
#line 677 "metalang.met"
                        {
#line 677 "metalang.met"
                            PPTREE _ptTree1,_ptRes1;
#line 677 "metalang.met"
                            _ptRes1= MakeTree(FUNC, 2);
#line 677 "metalang.met"
                            ReplaceTree(_ptRes1, 1, ident );
#line 677 "metalang.met"
                            if ( (_ptTree1=NQUICK_CALL(_Tak(func_follow)(error_free), 9, metalang))== (PPTREE) -1 ) {
#line 677 "metalang.met"
                                PROG_EXIT(one_condition_exit,"one_condition")
#line 677 "metalang.met"
                            }
#line 677 "metalang.met"
                            ReplaceTree(_ptRes1, 2, _ptTree1);
#line 677 "metalang.met"
                            _ptTree0=_ptRes1;
#line 677 "metalang.met"
                        }
#line 677 "metalang.met"
                        _retValue =_ptTree0;
#line 677 "metalang.met"
                        goto one_condition_ret;
#line 677 "metalang.met"
                    }
#line 677 "metalang.met"
                    break;
#line 677 "metalang.met"
#line 680 "metalang.met"
                case EGAL : 
#line 680 "metalang.met"
                    tokenAhead = 0 ;
#line 680 "metalang.met"
                    CommTerm();
#line 680 "metalang.met"
#line 679 "metalang.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 679 "metalang.met"
                    switch( lexEl.Value) {
#line 679 "metalang.met"
#line 680 "metalang.met"
                        case TAKE : 
#line 680 "metalang.met"
                            tokenAhead = 0 ;
#line 680 "metalang.met"
                            CommTerm();
#line 680 "metalang.met"
#line 680 "metalang.met"
                            {
#line 680 "metalang.met"
                                PPTREE _ptTree0;
#line 680 "metalang.met"
                                {
#line 680 "metalang.met"
                                    PPTREE _ptTree1,_ptRes1;
#line 680 "metalang.met"
                                    _ptRes1= MakeTree(EQUAL, 2);
#line 680 "metalang.met"
                                    ReplaceTree(_ptRes1, 1, ident );
#line 680 "metalang.met"
                                    if ( (_ptTree1=NQUICK_CALL(_Tak(take_follow)(error_free), 21, metalang))== (PPTREE) -1 ) {
#line 680 "metalang.met"
                                        PROG_EXIT(one_condition_exit,"one_condition")
#line 680 "metalang.met"
                                    }
#line 680 "metalang.met"
                                    ReplaceTree(_ptRes1, 2, _ptTree1);
#line 680 "metalang.met"
                                    _ptTree0=_ptRes1;
#line 680 "metalang.met"
                                }
#line 680 "metalang.met"
                                _retValue =_ptTree0;
#line 680 "metalang.met"
                                goto one_condition_ret;
#line 680 "metalang.met"
                            }
#line 680 "metalang.met"
                            break;
#line 680 "metalang.met"
#line 684 "metalang.met"
                        case POUV : 
#line 684 "metalang.met"
                            tokenAhead = 0 ;
#line 684 "metalang.met"
                            CommTerm();
#line 684 "metalang.met"
#line 683 "metalang.met"
#line 684 "metalang.met"
                            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 684 "metalang.met"
                            if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 684 "metalang.met"
                                TOKEN_EXIT(one_condition_exit,")")
#line 684 "metalang.met"
#line 685 "metalang.met"
                            {
#line 685 "metalang.met"
                                PPTREE _ptTree0;
#line 685 "metalang.met"
                                {
#line 685 "metalang.met"
                                    PPTREE _ptTree1,_ptRes1;
#line 685 "metalang.met"
                                    _ptRes1= MakeTree(EQUAL, 2);
#line 685 "metalang.met"
                                    ReplaceTree(_ptRes1, 1, ident );
#line 685 "metalang.met"
                                    {
#line 685 "metalang.met"
                                        PPTREE _ptRes2;
#line 685 "metalang.met"
                                        _ptRes2= MakeTree(NIL, 0);
#line 685 "metalang.met"
                                        _ptTree1=_ptRes2;
#line 685 "metalang.met"
                                    }
#line 685 "metalang.met"
                                    ReplaceTree(_ptRes1, 2, _ptTree1);
#line 685 "metalang.met"
                                    _ptTree0=_ptRes1;
#line 685 "metalang.met"
                                }
#line 685 "metalang.met"
                                _retValue =_ptTree0;
#line 685 "metalang.met"
                                goto one_condition_ret;
#line 685 "metalang.met"
                            }
#line 685 "metalang.met"
#line 685 "metalang.met"
                            break;
#line 685 "metalang.met"
#line 687 "metalang.met"
                        default : 
#line 687 "metalang.met"
#line 687 "metalang.met"
                            {
#line 687 "metalang.met"
                                PPTREE _ptTree0;
#line 687 "metalang.met"
                                {
#line 687 "metalang.met"
                                    PPTREE _ptTree1,_ptRes1;
#line 687 "metalang.met"
                                    _ptRes1= MakeTree(EQUAL, 2);
#line 687 "metalang.met"
                                    ReplaceTree(_ptRes1, 1, ident );
#line 687 "metalang.met"
                                    if ( (_ptTree1=NQUICK_CALL(_Tak(expr)(error_free), 7, metalang))== (PPTREE) -1 ) {
#line 687 "metalang.met"
                                        PROG_EXIT(one_condition_exit,"one_condition")
#line 687 "metalang.met"
                                    }
#line 687 "metalang.met"
                                    ReplaceTree(_ptRes1, 2, _ptTree1);
#line 687 "metalang.met"
                                    _ptTree0=_ptRes1;
#line 687 "metalang.met"
                                }
#line 687 "metalang.met"
                                _retValue =_ptTree0;
#line 687 "metalang.met"
                                goto one_condition_ret;
#line 687 "metalang.met"
                            }
#line 687 "metalang.met"
                            break;
#line 687 "metalang.met"
                    }
#line 687 "metalang.met"
                    break;
#line 687 "metalang.met"
#line 689 "metalang.met"
                default : 
#line 689 "metalang.met"
#line 689 "metalang.met"
                    {
#line 689 "metalang.met"
                        _retValue = ident ;
#line 689 "metalang.met"
                        goto one_condition_ret;
#line 689 "metalang.met"
                        
#line 689 "metalang.met"
                    }
#line 689 "metalang.met"
                    break;
#line 689 "metalang.met"
            }
#line 689 "metalang.met"
            break;
#line 689 "metalang.met"
#line 693 "metalang.met"
        case AOUVAOUV : 
#line 693 "metalang.met"
#line 693 "metalang.met"
            {
#line 693 "metalang.met"
                PPTREE _ptTree0;
#line 693 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(asit)(error_free), 1, metalang))== (PPTREE) -1 ) {
#line 693 "metalang.met"
                    PROG_EXIT(one_condition_exit,"one_condition")
#line 693 "metalang.met"
                }
#line 693 "metalang.met"
                _retValue =_ptTree0;
#line 693 "metalang.met"
                goto one_condition_ret;
#line 693 "metalang.met"
            }
#line 693 "metalang.met"
            break;
#line 693 "metalang.met"
#line 696 "metalang.met"
        case POUV : 
#line 696 "metalang.met"
            tokenAhead = 0 ;
#line 696 "metalang.met"
            CommTerm();
#line 696 "metalang.met"
#line 695 "metalang.met"
#line 696 "metalang.met"
            {
#line 696 "metalang.met"
                PPTREE _ptTree0,_ptRes0;
#line 696 "metalang.met"
                _ptRes0= MakeTree(COND, 1);
#line 696 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(condition)(error_free), 2, metalang))== (PPTREE) -1 ) {
#line 696 "metalang.met"
                    PROG_EXIT(one_condition_exit,"one_condition")
#line 696 "metalang.met"
                }
#line 696 "metalang.met"
                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 696 "metalang.met"
                condTree=_ptRes0;
#line 696 "metalang.met"
            }
#line 696 "metalang.met"
#line 697 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 697 "metalang.met"
            if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 697 "metalang.met"
                TOKEN_EXIT(one_condition_exit,")")
#line 697 "metalang.met"
#line 698 "metalang.met"
            {
#line 698 "metalang.met"
                _retValue = condTree ;
#line 698 "metalang.met"
                goto one_condition_ret;
#line 698 "metalang.met"
                
#line 698 "metalang.met"
            }
#line 698 "metalang.met"
#line 698 "metalang.met"
            break;
#line 698 "metalang.met"
#line 700 "metalang.met"
        case IN : 
#line 700 "metalang.met"
            tokenAhead = 0 ;
#line 700 "metalang.met"
            CommTerm();
#line 700 "metalang.met"
#line 701 "metalang.met"
#line 702 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 702 "metalang.met"
            if (  !SEE_TOKEN( CONTEXT,"context") || !(CommTerm(),1)) 
#line 702 "metalang.met"
                TOKEN_EXIT(one_condition_exit,"context")
#line 702 "metalang.met"
#line 703 "metalang.met"
            {
#line 703 "metalang.met"
                PPTREE _ptTree0;
#line 703 "metalang.met"
                {
#line 703 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 703 "metalang.met"
                    _ptRes1= MakeTree(IN_CONTEXT, 1);
#line 703 "metalang.met"
                    {
#line 703 "metalang.met"
                        PPTREE _ptTree2,_ptRes2;
#line 703 "metalang.met"
                        _ptRes2= MakeTree(IDENT, 1);
#line 703 "metalang.met"
                        (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 703 "metalang.met"
                        if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree2))) 
#line 703 "metalang.met"
                            TOKEN_EXIT(one_condition_exit,"IDENT")
#line 703 "metalang.met"
                        ReplaceTree(_ptRes2, 1, _ptTree2);
#line 703 "metalang.met"
                        _ptTree1=_ptRes2;
#line 703 "metalang.met"
                    }
#line 703 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 703 "metalang.met"
                    _ptTree0=_ptRes1;
#line 703 "metalang.met"
                }
#line 703 "metalang.met"
                _retValue =_ptTree0;
#line 703 "metalang.met"
                goto one_condition_ret;
#line 703 "metalang.met"
            }
#line 703 "metalang.met"
#line 703 "metalang.met"
            break;
#line 703 "metalang.met"
#line 705 "metalang.met"
        case DEFAULT : 
#line 705 "metalang.met"
            tokenAhead = 0 ;
#line 705 "metalang.met"
            CommTerm();
#line 705 "metalang.met"
#line 706 "metalang.met"
#line 707 "metalang.met"
            if (! (cDef)){
#line 707 "metalang.met"
#line 708 "metalang.met"
                {
#line 708 "metalang.met"
                    PPTREE _ptTree0;
#line 708 "metalang.met"
                    {
#line 708 "metalang.met"
                        PPTREE _ptTree1,_ptRes1;
#line 708 "metalang.met"
                        _ptRes1= MakeTree(SEE, 1);
#line 708 "metalang.met"
                        {
#line 708 "metalang.met"
                            PPTREE _ptTree2,_ptRes2;
#line 708 "metalang.met"
                            _ptRes2= MakeTree(EXCLA, 1);
#line 708 "metalang.met"
                            {
#line 708 "metalang.met"
                                PPTREE _ptRes3;
#line 708 "metalang.met"
                                _ptRes3= MakeTree(IDENT, 1);
#line 708 "metalang.met"
                                ReplaceTree(_ptRes3, 1, MakeString ("NOTHING"));
#line 708 "metalang.met"
                                _ptTree2=_ptRes3;
#line 708 "metalang.met"
                            }
#line 708 "metalang.met"
                            ReplaceTree(_ptRes2, 1, _ptTree2);
#line 708 "metalang.met"
                            _ptTree1=_ptRes2;
#line 708 "metalang.met"
                        }
#line 708 "metalang.met"
                        ReplaceTree(_ptRes1, 1, _ptTree1);
#line 708 "metalang.met"
                        _ptTree0=_ptRes1;
#line 708 "metalang.met"
                    }
#line 708 "metalang.met"
                    _retValue =_ptTree0;
#line 708 "metalang.met"
                    goto one_condition_ret;
#line 708 "metalang.met"
                }
#line 708 "metalang.met"
            } else {
#line 708 "metalang.met"
#line 710 "metalang.met"
                {
#line 710 "metalang.met"
                    PPTREE _ptTree0;
#line 710 "metalang.met"
                    {
#line 710 "metalang.met"
                        PPTREE _ptRes1;
#line 710 "metalang.met"
                        _ptRes1= MakeTree(SEEL, 1);
#line 710 "metalang.met"
                        _ptTree0=_ptRes1;
#line 710 "metalang.met"
                    }
#line 710 "metalang.met"
                    _retValue =_ptTree0;
#line 710 "metalang.met"
                    goto one_condition_ret;
#line 710 "metalang.met"
                }
#line 710 "metalang.met"
            }
#line 710 "metalang.met"
            break;
#line 710 "metalang.met"
        default :
#line 710 "metalang.met"
            CASE_EXIT(one_condition_exit,"either see or take or not or seel or takel or IDENT or {{ or ( or in or default")
#line 710 "metalang.met"
            break;
#line 710 "metalang.met"
    }
#line 710 "metalang.met"
#line 713 "metalang.met"
(tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 713 "metalang.met"
if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,(PPTREE) 0,lastTree); else {_lastTree=(PPTREE)0;_funcLevel--;}
#line 713 "metalang.met"
return((PPTREE) 0);
#line 713 "metalang.met"

#line 713 "metalang.met"
one_condition_exit :
#line 713 "metalang.met"

#line 713 "metalang.met"
    {
#line 713 "metalang.met"
        MulFreeTree(2,condTree,ident);
#line 713 "metalang.met"
    }
#line 713 "metalang.met"
    _Debug = TRACE_RULE("one_condition",TRACE_EXIT,(PPTREE)0);
#line 713 "metalang.met"
    _funcLevel--;
#line 713 "metalang.met"
    return((PPTREE) -1) ;
#line 713 "metalang.met"

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

#line 713 "metalang.met"
#line 870 "metalang.met"
PPTREE metalang::parse_entry ( int error_free)
#line 870 "metalang.met"
{
#line 870 "metalang.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 870 "metalang.met"
    int _value,_nbPre = 0 ;
#line 870 "metalang.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 870 "metalang.met"
    int _Debug = TRACE_RULE("parse_entry",TRACE_ENTER,(PPTREE)0);
#line 870 "metalang.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 870 "metalang.met"
#line 870 "metalang.met"
    PPTREE _addlist1 = (PPTREE) 0;
#line 870 "metalang.met"
#line 870 "metalang.met"
    PPTREE retValue = (PPTREE) 0,list = (PPTREE) 0;
#line 870 "metalang.met"
#line 872 "metalang.met"
    if ((NPUSH_CALL_AFF_VERIF(retValue = ,_Tak(declaration), 4, metalang)) || 
#line 872 "metalang.met"
       (NPUSH_CALL_AFF_VERIF(retValue = ,_Tak(definition), 5, metalang))){
#line 872 "metalang.met"
#line 874 "metalang.met"
        {
#line 874 "metalang.met"
            _retValue = retValue ;
#line 874 "metalang.met"
            goto parse_entry_ret;
#line 874 "metalang.met"
            
#line 874 "metalang.met"
        }
#line 874 "metalang.met"
    } else {
#line 874 "metalang.met"
#line 875 "metalang.met"
        if (NPUSH_CALL_AFF_VERIF(retValue = ,_Tak(langage), 12, metalang)){
#line 875 "metalang.met"
#line 876 "metalang.met"
            {
#line 876 "metalang.met"
                _retValue = retValue ;
#line 876 "metalang.met"
                goto parse_entry_ret;
#line 876 "metalang.met"
                
#line 876 "metalang.met"
            }
#line 876 "metalang.met"
        } else {
#line 876 "metalang.met"
#line 877 "metalang.met"
            if ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(DECLARE,"declare") && (tokenAhead = 0,CommTerm(),1)){
#line 877 "metalang.met"
#line 878 "metalang.met"
#line 878 "metalang.met"
                _addlist1 = list ;
#line 878 "metalang.met"
#line 879 "metalang.met"
                do {
#line 879 "metalang.met"
#line 880 "metalang.met"
                    {
#line 880 "metalang.met"
                        PPTREE _ptTree0;
#line 880 "metalang.met"
                        {
#line 880 "metalang.met"
                            PPTREE _ptTree1,_ptRes1;
#line 880 "metalang.met"
                            _ptRes1= MakeTree(IDENT, 1);
#line 880 "metalang.met"
                            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 880 "metalang.met"
                            if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 880 "metalang.met"
                                TOKEN_EXIT(parse_entry_exit,"IDENT")
#line 880 "metalang.met"
                            ReplaceTree(_ptRes1, 1, _ptTree1);
#line 880 "metalang.met"
                            _ptTree0=_ptRes1;
#line 880 "metalang.met"
                        }
#line 880 "metalang.met"
                        _addlist1 =AddList(_addlist1 , _ptTree0);
#line 880 "metalang.met"
                    }
#line 880 "metalang.met"
#line 880 "metalang.met"
                    if (list){
#line 880 "metalang.met"
#line 880 "metalang.met"
                        _addlist1 = SonTree (_addlist1 ,2 );
#line 880 "metalang.met"
                    } else {
#line 880 "metalang.met"
#line 880 "metalang.met"
                        list = _addlist1 ;
#line 880 "metalang.met"
                    }
#line 880 "metalang.met"
#line 881 "metalang.met"
                } while ( !(! ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(VIRG,",") && (tokenAhead = 0,CommTerm(),1)))) ;
#line 881 "metalang.met"
#line 882 "metalang.met"
                {
#line 882 "metalang.met"
                    PPTREE _ptRes0;
#line 882 "metalang.met"
                    _ptRes0= MakeTree(DECLARE, 1);
#line 882 "metalang.met"
                    ReplaceTree(_ptRes0, 1, list );
#line 882 "metalang.met"
                    retValue=_ptRes0;
#line 882 "metalang.met"
                }
#line 882 "metalang.met"
#line 883 "metalang.met"
                {
#line 883 "metalang.met"
                    _retValue = retValue ;
#line 883 "metalang.met"
                    goto parse_entry_ret;
#line 883 "metalang.met"
                    
#line 883 "metalang.met"
                }
#line 883 "metalang.met"
#line 883 "metalang.met"
#line 883 "metalang.met"
            } else {
#line 883 "metalang.met"
#line 885 "metalang.met"
                if (NPUSH_CALL_AFF_VERIF(retValue = ,_Tak(condition), 2, metalang)){
#line 885 "metalang.met"
#line 886 "metalang.met"
                    {
#line 886 "metalang.met"
                        _retValue = retValue ;
#line 886 "metalang.met"
                        goto parse_entry_ret;
#line 886 "metalang.met"
                        
#line 886 "metalang.met"
                    }
#line 886 "metalang.met"
                } else {
#line 886 "metalang.met"
#line 887 "metalang.met"
                    if (NPUSH_CALL_AFF_VERIF(retValue = ,_Tak(pattern_rec), 16, metalang)){
#line 887 "metalang.met"
#line 888 "metalang.met"
                        {
#line 888 "metalang.met"
                            _retValue = retValue ;
#line 888 "metalang.met"
                            goto parse_entry_ret;
#line 888 "metalang.met"
                            
#line 888 "metalang.met"
                        }
#line 888 "metalang.met"
                    } else {
#line 888 "metalang.met"
#line 890 "metalang.met"
                        LEX_EXIT ("",0);
#line 890 "metalang.met"
                        goto parse_entry_exit;
#line 890 "metalang.met"
                    }
#line 890 "metalang.met"
                }
#line 890 "metalang.met"
            }
#line 890 "metalang.met"
        }
#line 890 "metalang.met"
    }
#line 890 "metalang.met"
#line 890 "metalang.met"
#line 890 "metalang.met"

#line 891 "metalang.met"
(tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 891 "metalang.met"
if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,(PPTREE) 0,lastTree); else {_lastTree=(PPTREE)0;_funcLevel--;}
#line 891 "metalang.met"
return((PPTREE) 0);
#line 891 "metalang.met"

#line 891 "metalang.met"
parse_entry_exit :
#line 891 "metalang.met"

#line 891 "metalang.met"
    {
#line 891 "metalang.met"
        MulFreeTree(3,list,retValue,_addlist1);
#line 891 "metalang.met"
    }
#line 891 "metalang.met"
    _Debug = TRACE_RULE("parse_entry",TRACE_EXIT,(PPTREE)0);
#line 891 "metalang.met"
    _funcLevel--;
#line 891 "metalang.met"
    return((PPTREE) -1) ;
#line 891 "metalang.met"

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

#line 891 "metalang.met"
#line 457 "metalang.met"
PPTREE metalang::pattern_rec ( int error_free)
#line 457 "metalang.met"
{
#line 457 "metalang.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 457 "metalang.met"
    int _value,_nbPre = 0 ;
#line 457 "metalang.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 457 "metalang.met"
    int _Debug = TRACE_RULE("pattern_rec",TRACE_ENTER,(PPTREE)0);
#line 457 "metalang.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 457 "metalang.met"
#line 457 "metalang.met"
    PPTREE _addlist1 = (PPTREE) 0,_addlist2 = (PPTREE) 0,_addlist3 = (PPTREE) 0,_addlist4 = (PPTREE) 0;
#line 457 "metalang.met"
#line 457 "metalang.met"
    PPTREE patTree = (PPTREE) 0,ident = (PPTREE) 0,list = (PPTREE) 0,switchTree = (PPTREE) 0,listskip = (PPTREE) 0;
#line 457 "metalang.met"
#line 459 "metalang.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 459 "metalang.met"
    switch( lexEl.Value) {
#line 459 "metalang.met"
#line 460 "metalang.met"
        case TAKE : 
#line 460 "metalang.met"
            tokenAhead = 0 ;
#line 460 "metalang.met"
            CommTerm();
#line 460 "metalang.met"
#line 461 "metalang.met"
            if ( (patTree=NQUICK_CALL(_Tak(take_follow)(error_free), 21, metalang))== (PPTREE) -1 ) {
#line 461 "metalang.met"
                PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 461 "metalang.met"
            }
#line 461 "metalang.met"
            break;
#line 461 "metalang.met"
#line 462 "metalang.met"
        case RETURN : 
#line 462 "metalang.met"
            tokenAhead = 0 ;
#line 462 "metalang.met"
            CommTerm();
#line 462 "metalang.met"
#line 463 "metalang.met"
            {
#line 463 "metalang.met"
                PPTREE _ptTree0,_ptRes0;
#line 463 "metalang.met"
                _ptRes0= MakeTree(RETURN, 1);
#line 463 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(gen_param)(error_free), 10, metalang))== (PPTREE) -1 ) {
#line 463 "metalang.met"
                    PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 463 "metalang.met"
                }
#line 463 "metalang.met"
                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 463 "metalang.met"
                patTree=_ptRes0;
#line 463 "metalang.met"
            }
#line 463 "metalang.met"
            break;
#line 463 "metalang.met"
#line 464 "metalang.met"
        case STORE_COMMENT_LINE : 
#line 464 "metalang.met"
            tokenAhead = 0 ;
#line 464 "metalang.met"
            CommTerm();
#line 464 "metalang.met"
#line 465 "metalang.met"
#line 466 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 466 "metalang.met"
            if (  !SEE_TOKEN( POUV,"(") || !(CommTerm(),1)) 
#line 466 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,"(")
#line 466 "metalang.met"
#line 467 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 467 "metalang.met"
            if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 467 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,")")
#line 467 "metalang.met"
#line 468 "metalang.met"
            {
#line 468 "metalang.met"
                PPTREE _ptTree0;
#line 468 "metalang.met"
                {
#line 468 "metalang.met"
                    PPTREE _ptRes1;
#line 468 "metalang.met"
                    _ptRes1= MakeTree(STORE_COMMENT_LINE, 0);
#line 468 "metalang.met"
                    _ptTree0=_ptRes1;
#line 468 "metalang.met"
                }
#line 468 "metalang.met"
                _retValue =_ptTree0;
#line 468 "metalang.met"
                goto pattern_rec_ret;
#line 468 "metalang.met"
            }
#line 468 "metalang.met"
            break;
#line 468 "metalang.met"
#line 470 "metalang.met"
        case SKIP : 
#line 470 "metalang.met"
            tokenAhead = 0 ;
#line 470 "metalang.met"
            CommTerm();
#line 470 "metalang.met"
#line 471 "metalang.met"
#line 471 "metalang.met"
            _addlist2 = listskip ;
#line 471 "metalang.met"
#line 472 "metalang.met"
            do {
#line 472 "metalang.met"
#line 473 "metalang.met"
                if ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN( COUV,"[")){
#line 473 "metalang.met"
#line 474 "metalang.met"
#line 474 "metalang.met"
                    {
#line 474 "metalang.met"
                        PPTREE _ptTree0;
#line 474 "metalang.met"
                        if ( (_ptTree0=NQUICK_CALL(_Tak(set)(error_free), 19, metalang))== (PPTREE) -1 ) {
#line 474 "metalang.met"
                            PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 474 "metalang.met"
                        }
#line 474 "metalang.met"
                        _addlist2 =AddList(_addlist2 , _ptTree0);
#line 474 "metalang.met"
                    }
#line 474 "metalang.met"
#line 474 "metalang.met"
                    if (listskip){
#line 474 "metalang.met"
#line 474 "metalang.met"
                        _addlist2 = SonTree (_addlist2 ,2 );
#line 474 "metalang.met"
                    } else {
#line 474 "metalang.met"
#line 474 "metalang.met"
                        listskip = _addlist2 ;
#line 474 "metalang.met"
                    }
#line 474 "metalang.met"
                } else {
#line 474 "metalang.met"
#line 476 "metalang.met"
#line 476 "metalang.met"
                    {
#line 476 "metalang.met"
                        PPTREE _ptTree0;
#line 476 "metalang.met"
                        {
#line 476 "metalang.met"
                            PPTREE _ptTree1,_ptRes1;
#line 476 "metalang.met"
                            _ptRes1= MakeTree(CHARACTER, 1);
#line 476 "metalang.met"
                            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 476 "metalang.met"
                            if ( ! TERM_OR_META(CHARACTER,"CHARACTER") || !(BUILD_TERM_META(_ptTree1))) 
#line 476 "metalang.met"
                                TOKEN_EXIT(pattern_rec_exit,"CHARACTER")
#line 476 "metalang.met"
                            ReplaceTree(_ptRes1, 1, _ptTree1);
#line 476 "metalang.met"
                            _ptTree0=_ptRes1;
#line 476 "metalang.met"
                        }
#line 476 "metalang.met"
                        _addlist2 =AddList(_addlist2 , _ptTree0);
#line 476 "metalang.met"
                    }
#line 476 "metalang.met"
#line 476 "metalang.met"
                    if (listskip){
#line 476 "metalang.met"
#line 476 "metalang.met"
                        _addlist2 = SonTree (_addlist2 ,2 );
#line 476 "metalang.met"
                    } else {
#line 476 "metalang.met"
#line 476 "metalang.met"
                        listskip = _addlist2 ;
#line 476 "metalang.met"
                    }
#line 476 "metalang.met"
                }
#line 476 "metalang.met"
#line 477 "metalang.met"
            } while ( !(! ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(VIRG,",") && (tokenAhead = 0,CommTerm(),1)))) ;
#line 477 "metalang.met"
#line 478 "metalang.met"
            {
#line 478 "metalang.met"
                PPTREE _ptTree0;
#line 478 "metalang.met"
                {
#line 478 "metalang.met"
                    PPTREE _ptRes1;
#line 478 "metalang.met"
                    _ptRes1= MakeTree(SKIP, 1);
#line 478 "metalang.met"
                    ReplaceTree(_ptRes1, 1, listskip );
#line 478 "metalang.met"
                    _ptTree0=_ptRes1;
#line 478 "metalang.met"
                }
#line 478 "metalang.met"
                _retValue =_ptTree0;
#line 478 "metalang.met"
                goto pattern_rec_ret;
#line 478 "metalang.met"
            }
#line 478 "metalang.met"
#line 478 "metalang.met"
            break;
#line 478 "metalang.met"
#line 480 "metalang.met"
        case REPLACETREE : 
#line 480 "metalang.met"
            tokenAhead = 0 ;
#line 480 "metalang.met"
            CommTerm();
#line 480 "metalang.met"
#line 481 "metalang.met"
#line 482 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 482 "metalang.met"
            if (  !SEE_TOKEN( POUV,"(") || !(CommTerm(),1)) 
#line 482 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,"(")
#line 482 "metalang.met"
#line 483 "metalang.met"
            {
#line 483 "metalang.met"
                PPTREE _ptTree0;
#line 483 "metalang.met"
                {
#line 483 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 483 "metalang.met"
                    _ptRes1= MakeTree(IDENT, 1);
#line 483 "metalang.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 483 "metalang.met"
                    if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 483 "metalang.met"
                        TOKEN_EXIT(pattern_rec_exit,"IDENT")
#line 483 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 483 "metalang.met"
                    _ptTree0=_ptRes1;
#line 483 "metalang.met"
                }
#line 483 "metalang.met"
                list =AddList(list , _ptTree0);
#line 483 "metalang.met"
            }
#line 483 "metalang.met"
#line 484 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 484 "metalang.met"
            if (  !SEE_TOKEN( VIRG,",") || !(CommTerm(),1)) 
#line 484 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,",")
#line 484 "metalang.met"
#line 485 "metalang.met"
            {
#line 485 "metalang.met"
                PPTREE _ptTree0;
#line 485 "metalang.met"
                {
#line 485 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 485 "metalang.met"
                    _ptRes1= MakeTree(NUMB, 1);
#line 485 "metalang.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 485 "metalang.met"
                    if ( ! TERM_OR_META(NUMB,"NUMB") || !(BUILD_TERM_META(_ptTree1))) 
#line 485 "metalang.met"
                        TOKEN_EXIT(pattern_rec_exit,"NUMB")
#line 485 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 485 "metalang.met"
                    _ptTree0=_ptRes1;
#line 485 "metalang.met"
                }
#line 485 "metalang.met"
                list =AddList(list , _ptTree0);
#line 485 "metalang.met"
            }
#line 485 "metalang.met"
#line 486 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 486 "metalang.met"
            if (  !SEE_TOKEN( VIRG,",") || !(CommTerm(),1)) 
#line 486 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,",")
#line 486 "metalang.met"
#line 487 "metalang.met"
            {
#line 487 "metalang.met"
                PPTREE _ptTree0;
#line 487 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(gen_param)(error_free), 10, metalang))== (PPTREE) -1 ) {
#line 487 "metalang.met"
                    PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 487 "metalang.met"
                }
#line 487 "metalang.met"
                list =AddList(list , _ptTree0);
#line 487 "metalang.met"
            }
#line 487 "metalang.met"
#line 488 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 488 "metalang.met"
            if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 488 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,")")
#line 488 "metalang.met"
#line 489 "metalang.met"
            {
#line 489 "metalang.met"
                PPTREE _ptRes0;
#line 489 "metalang.met"
                _ptRes0= MakeTree(REPLACETREE, 1);
#line 489 "metalang.met"
                ReplaceTree(_ptRes0, 1, list );
#line 489 "metalang.met"
                patTree=_ptRes0;
#line 489 "metalang.met"
            }
#line 489 "metalang.met"
#line 489 "metalang.met"
            break;
#line 489 "metalang.met"
#line 491 "metalang.met"
        case ADDLIST : 
#line 491 "metalang.met"
            tokenAhead = 0 ;
#line 491 "metalang.met"
            CommTerm();
#line 491 "metalang.met"
#line 492 "metalang.met"
#line 493 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 493 "metalang.met"
            if (  !SEE_TOKEN( POUV,"(") || !(CommTerm(),1)) 
#line 493 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,"(")
#line 493 "metalang.met"
#line 494 "metalang.met"
            {
#line 494 "metalang.met"
                PPTREE _ptTree0;
#line 494 "metalang.met"
                {
#line 494 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 494 "metalang.met"
                    _ptRes1= MakeTree(IDENT, 1);
#line 494 "metalang.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 494 "metalang.met"
                    if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 494 "metalang.met"
                        TOKEN_EXIT(pattern_rec_exit,"IDENT")
#line 494 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 494 "metalang.met"
                    _ptTree0=_ptRes1;
#line 494 "metalang.met"
                }
#line 494 "metalang.met"
                list =AddList(list , _ptTree0);
#line 494 "metalang.met"
            }
#line 494 "metalang.met"
#line 495 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 495 "metalang.met"
            if (  !SEE_TOKEN( VIRG,",") || !(CommTerm(),1)) 
#line 495 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,",")
#line 495 "metalang.met"
#line 496 "metalang.met"
            {
#line 496 "metalang.met"
                PPTREE _ptTree0;
#line 496 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(gen_param)(error_free), 10, metalang))== (PPTREE) -1 ) {
#line 496 "metalang.met"
                    PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 496 "metalang.met"
                }
#line 496 "metalang.met"
                list =AddList(list , _ptTree0);
#line 496 "metalang.met"
            }
#line 496 "metalang.met"
#line 497 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 497 "metalang.met"
            if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 497 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,")")
#line 497 "metalang.met"
#line 498 "metalang.met"
            {
#line 498 "metalang.met"
                PPTREE _ptRes0;
#line 498 "metalang.met"
                _ptRes0= MakeTree(ADDLIST, 1);
#line 498 "metalang.met"
                ReplaceTree(_ptRes0, 1, list );
#line 498 "metalang.met"
                patTree=_ptRes0;
#line 498 "metalang.met"
            }
#line 498 "metalang.met"
#line 498 "metalang.met"
            break;
#line 498 "metalang.met"
#line 500 "metalang.met"
        case META : 
#line 500 "metalang.met"
        case IDENT : 
#line 500 "metalang.met"
#line 501 "metalang.met"
#line 502 "metalang.met"
             { int is_meta;
#line 502 "metalang.met"
#line 503 "metalang.met"
            if ((tokenAhead == 5|| (LexMeta(),TRACE_LEX(1)))&&SEE_TOKEN( META,"META")){
#line 503 "metalang.met"
#line 503 "metalang.met"
                is_meta=1;
#line 503 "metalang.met"
            } else {
#line 503 "metalang.met"
#line 503 "metalang.met"
                is_meta=0;
#line 503 "metalang.met"
            }
#line 503 "metalang.met"
#line 504 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 504 "metalang.met"
            if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(ident))) 
#line 504 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,"IDENT")
#line 504 "metalang.met"
#line 505 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 505 "metalang.met"
            switch( lexEl.Value) {
#line 505 "metalang.met"
#line 508 "metalang.met"
                case EGAL : 
#line 508 "metalang.met"
                    tokenAhead = 0 ;
#line 508 "metalang.met"
                    CommTerm();
#line 508 "metalang.met"
#line 507 "metalang.met"
#line 508 "metalang.met"
                    {
#line 508 "metalang.met"
                        PPTREE _ptTree0,_ptRes0;
#line 508 "metalang.met"
                        _ptRes0= MakeTree(EQUAL, 2);
#line 508 "metalang.met"
                        {
#line 508 "metalang.met"
                            PPTREE _ptRes1;
#line 508 "metalang.met"
                            _ptRes1= MakeTree(IDENT, 1);
#line 508 "metalang.met"
                            ReplaceTree(_ptRes1, 1, ident );
#line 508 "metalang.met"
                            _ptTree0=_ptRes1;
#line 508 "metalang.met"
                        }
#line 508 "metalang.met"
                        ReplaceTree(_ptRes0, 1, _ptTree0);
#line 508 "metalang.met"
                        patTree=_ptRes0;
#line 508 "metalang.met"
                    }
#line 508 "metalang.met"
#line 509 "metalang.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 509 "metalang.met"
                    switch( lexEl.Value) {
#line 509 "metalang.met"
#line 510 "metalang.met"
                        case TAKE : 
#line 510 "metalang.met"
                            tokenAhead = 0 ;
#line 510 "metalang.met"
                            CommTerm();
#line 510 "metalang.met"
#line 511 "metalang.met"
                            {
#line 511 "metalang.met"
                                PPTREE _ptTree0;
#line 511 "metalang.met"
                                if ( (_ptTree0=NQUICK_CALL(_Tak(take_follow)(error_free), 21, metalang))== (PPTREE) -1 ) {
#line 511 "metalang.met"
                                    PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 511 "metalang.met"
                                }
#line 511 "metalang.met"
                                ReplaceTree(patTree , 2 , _ptTree0);
#line 511 "metalang.met"
                            }
#line 511 "metalang.met"
                            break;
#line 511 "metalang.met"
#line 512 "metalang.met"
                        case META : 
#line 512 "metalang.met"
                        case IDENT : 
#line 512 "metalang.met"
#line 513 "metalang.met"
#line 514 "metalang.met"
                            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 514 "metalang.met"
                            if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(ident))) 
#line 514 "metalang.met"
                                TOKEN_EXIT(pattern_rec_exit,"IDENT")
#line 514 "metalang.met"
#line 515 "metalang.met"
                            if (! ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN( POUV,"("))){
#line 515 "metalang.met"
#line 516 "metalang.met"
                                {
#line 516 "metalang.met"
                                    PPTREE _ptTree0;
#line 516 "metalang.met"
                                    {
#line 516 "metalang.met"
                                        PPTREE _ptRes1;
#line 516 "metalang.met"
                                        _ptRes1= MakeTree(IDENT, 1);
#line 516 "metalang.met"
                                        ReplaceTree(_ptRes1, 1, ident );
#line 516 "metalang.met"
                                        _ptTree0=_ptRes1;
#line 516 "metalang.met"
                                    }
#line 516 "metalang.met"
                                    ReplaceTree(patTree , 2 , _ptTree0);
#line 516 "metalang.met"
                                }
#line 516 "metalang.met"
#line 517 "metalang.met"
                            } else {
#line 517 "metalang.met"
#line 519 "metalang.met"
#line 520 "metalang.met"
                                (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 520 "metalang.met"
                                if (  !SEE_TOKEN( POUV,"(") || !(CommTerm(),1)) 
#line 520 "metalang.met"
                                    TOKEN_EXIT(pattern_rec_exit,"(")
#line 520 "metalang.met"
#line 521 "metalang.met"
                                {
#line 521 "metalang.met"
                                    PPTREE _ptTree0;
#line 521 "metalang.met"
                                    {
#line 521 "metalang.met"
                                        PPTREE _ptTree1,_ptRes1;
#line 521 "metalang.met"
                                        _ptRes1= MakeTree(FUNC, 2);
#line 521 "metalang.met"
                                        {
#line 521 "metalang.met"
                                            PPTREE _ptRes2;
#line 521 "metalang.met"
                                            _ptRes2= MakeTree(IDENT, 1);
#line 521 "metalang.met"
                                            ReplaceTree(_ptRes2, 1, ident );
#line 521 "metalang.met"
                                            _ptTree1=_ptRes2;
#line 521 "metalang.met"
                                        }
#line 521 "metalang.met"
                                        ReplaceTree(_ptRes1, 1, _ptTree1);
#line 521 "metalang.met"
                                        if ( (_ptTree1=NQUICK_CALL(_Tak(func_follow)(error_free), 9, metalang))== (PPTREE) -1 ) {
#line 521 "metalang.met"
                                            PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 521 "metalang.met"
                                        }
#line 521 "metalang.met"
                                        ReplaceTree(_ptRes1, 2, _ptTree1);
#line 521 "metalang.met"
                                        _ptTree0=_ptRes1;
#line 521 "metalang.met"
                                    }
#line 521 "metalang.met"
                                    ReplaceTree(patTree , 2 , _ptTree0);
#line 521 "metalang.met"
                                }
#line 521 "metalang.met"
                            }
#line 521 "metalang.met"
                            break;
#line 521 "metalang.met"
#line 527 "metalang.met"
                        case MAKETREE : 
#line 527 "metalang.met"
                            tokenAhead = 0 ;
#line 527 "metalang.met"
                            CommTerm();
#line 527 "metalang.met"
#line 528 "metalang.met"
#line 529 "metalang.met"
                            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 529 "metalang.met"
                            if (  !SEE_TOKEN( POUV,"(") || !(CommTerm(),1)) 
#line 529 "metalang.met"
                                TOKEN_EXIT(pattern_rec_exit,"(")
#line 529 "metalang.met"
#line 530 "metalang.met"
                            {
#line 530 "metalang.met"
                                PPTREE _ptTree0;
#line 530 "metalang.met"
                                {
#line 530 "metalang.met"
                                    PPTREE _ptTree1,_ptRes1;
#line 530 "metalang.met"
                                    _ptRes1= MakeTree(MAKETREE, 1);
#line 530 "metalang.met"
                                    if ( (_ptTree1=NQUICK_CALL(_Tak(maketree_follow)(error_free), 13, metalang))== (PPTREE) -1 ) {
#line 530 "metalang.met"
                                        PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 530 "metalang.met"
                                    }
#line 530 "metalang.met"
                                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 530 "metalang.met"
                                    _ptTree0=_ptRes1;
#line 530 "metalang.met"
                                }
#line 530 "metalang.met"
                                ReplaceTree(patTree , 2 , _ptTree0);
#line 530 "metalang.met"
                            }
#line 530 "metalang.met"
                            break;
#line 530 "metalang.met"
#line 533 "metalang.met"
                        case ADDLIST : 
#line 533 "metalang.met"
                            tokenAhead = 0 ;
#line 533 "metalang.met"
                            CommTerm();
#line 533 "metalang.met"
#line 534 "metalang.met"
#line 535 "metalang.met"
                            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 535 "metalang.met"
                            if (  !SEE_TOKEN( POUV,"(") || !(CommTerm(),1)) 
#line 535 "metalang.met"
                                TOKEN_EXIT(pattern_rec_exit,"(")
#line 535 "metalang.met"
#line 536 "metalang.met"
                            {
#line 536 "metalang.met"
                                PPTREE _ptTree0;
#line 536 "metalang.met"
                                {
#line 536 "metalang.met"
                                    PPTREE _ptTree1,_ptRes1;
#line 536 "metalang.met"
                                    _ptRes1= MakeTree(IDENT, 1);
#line 536 "metalang.met"
                                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 536 "metalang.met"
                                    if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 536 "metalang.met"
                                        TOKEN_EXIT(pattern_rec_exit,"IDENT")
#line 536 "metalang.met"
                                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 536 "metalang.met"
                                    _ptTree0=_ptRes1;
#line 536 "metalang.met"
                                }
#line 536 "metalang.met"
                                list =AddList(list , _ptTree0);
#line 536 "metalang.met"
                            }
#line 536 "metalang.met"
#line 538 "metalang.met"
                            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 538 "metalang.met"
                            if (  !SEE_TOKEN( VIRG,",") || !(CommTerm(),1)) 
#line 538 "metalang.met"
                                TOKEN_EXIT(pattern_rec_exit,",")
#line 538 "metalang.met"
#line 539 "metalang.met"
                            {
#line 539 "metalang.met"
                                PPTREE _ptTree0;
#line 539 "metalang.met"
                                if ( (_ptTree0=NQUICK_CALL(_Tak(gen_param)(error_free), 10, metalang))== (PPTREE) -1 ) {
#line 539 "metalang.met"
                                    PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 539 "metalang.met"
                                }
#line 539 "metalang.met"
                                list =AddList(list , _ptTree0);
#line 539 "metalang.met"
                            }
#line 539 "metalang.met"
#line 540 "metalang.met"
                            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 540 "metalang.met"
                            if (  !SEE_TOKEN( POUV,"(") || !(CommTerm(),1)) 
#line 540 "metalang.met"
                                TOKEN_EXIT(pattern_rec_exit,"(")
#line 540 "metalang.met"
#line 541 "metalang.met"
                            {
#line 541 "metalang.met"
                                PPTREE _ptTree0;
#line 541 "metalang.met"
                                {
#line 541 "metalang.met"
                                    PPTREE _ptRes1;
#line 541 "metalang.met"
                                    _ptRes1= MakeTree(ADDLIST, 1);
#line 541 "metalang.met"
                                    ReplaceTree(_ptRes1, 1, list );
#line 541 "metalang.met"
                                    _ptTree0=_ptRes1;
#line 541 "metalang.met"
                                }
#line 541 "metalang.met"
                                ReplaceTree(patTree , 2 , _ptTree0);
#line 541 "metalang.met"
                            }
#line 541 "metalang.met"
                            break;
#line 541 "metalang.met"
#line 546 "metalang.met"
                        case POUV : 
#line 546 "metalang.met"
                            tokenAhead = 0 ;
#line 546 "metalang.met"
                            CommTerm();
#line 546 "metalang.met"
#line 545 "metalang.met"
#line 546 "metalang.met"
                            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 546 "metalang.met"
                            if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 546 "metalang.met"
                                TOKEN_EXIT(pattern_rec_exit,")")
#line 546 "metalang.met"
#line 547 "metalang.met"
                            {
#line 547 "metalang.met"
                                PPTREE _ptTree0;
#line 547 "metalang.met"
                                {
#line 547 "metalang.met"
                                    PPTREE _ptRes1;
#line 547 "metalang.met"
                                    _ptRes1= MakeTree(NIL, 0);
#line 547 "metalang.met"
                                    _ptTree0=_ptRes1;
#line 547 "metalang.met"
                                }
#line 547 "metalang.met"
                                ReplaceTree(patTree , 2 , _ptTree0);
#line 547 "metalang.met"
                            }
#line 547 "metalang.met"
#line 547 "metalang.met"
                            break;
#line 547 "metalang.met"
                        default :
#line 547 "metalang.met"
                            CASE_EXIT(pattern_rec_exit,"either take or IDENT or maketree or addlist or (")
#line 547 "metalang.met"
                            break;
#line 547 "metalang.met"
                    }
#line 547 "metalang.met"
                    break;
#line 547 "metalang.met"
#line 552 "metalang.met"
                case POUV : 
#line 552 "metalang.met"
                    tokenAhead = 0 ;
#line 552 "metalang.met"
                    CommTerm();
#line 552 "metalang.met"
#line 552 "metalang.met"
                    {
#line 552 "metalang.met"
                        PPTREE _ptTree0,_ptRes0;
#line 552 "metalang.met"
                        _ptRes0= MakeTree(FUNC, 2);
#line 552 "metalang.met"
                        {
#line 552 "metalang.met"
                            PPTREE _ptRes1;
#line 552 "metalang.met"
                            _ptRes1= MakeTree(IDENT, 1);
#line 552 "metalang.met"
                            ReplaceTree(_ptRes1, 1, ident );
#line 552 "metalang.met"
                            _ptTree0=_ptRes1;
#line 552 "metalang.met"
                        }
#line 552 "metalang.met"
                        ReplaceTree(_ptRes0, 1, _ptTree0);
#line 552 "metalang.met"
                        if ( (_ptTree0=NQUICK_CALL(_Tak(func_follow)(error_free), 9, metalang))== (PPTREE) -1 ) {
#line 552 "metalang.met"
                            PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 552 "metalang.met"
                        }
#line 552 "metalang.met"
                        ReplaceTree(_ptRes0, 2, _ptTree0);
#line 552 "metalang.met"
                        patTree=_ptRes0;
#line 552 "metalang.met"
                    }
#line 552 "metalang.met"
                    break;
#line 552 "metalang.met"
#line 555 "metalang.met"
                default : 
#line 555 "metalang.met"
#line 555 "metalang.met"
                    if (is_meta){
#line 555 "metalang.met"
#line 556 "metalang.met"
                        {
#line 556 "metalang.met"
                            PPTREE _ptRes0;
#line 556 "metalang.met"
                            _ptRes0= MakeTree(META, 1);
#line 556 "metalang.met"
                            ReplaceTree(_ptRes0, 1, ident );
#line 556 "metalang.met"
                            patTree=_ptRes0;
#line 556 "metalang.met"
                        }
#line 556 "metalang.met"
                    } else {
#line 556 "metalang.met"
#line 558 "metalang.met"
                        LEX_EXIT ("",0);
#line 558 "metalang.met"
                        goto pattern_rec_exit;
#line 558 "metalang.met"
                    }
#line 558 "metalang.met"
                    break;
#line 558 "metalang.met"
            }
#line 558 "metalang.met"
#line 560 "metalang.met"
             } 
#line 560 "metalang.met"
#line 560 "metalang.met"
            break;
#line 560 "metalang.met"
#line 562 "metalang.met"
        case WITH : 
#line 562 "metalang.met"
            tokenAhead = 0 ;
#line 562 "metalang.met"
            CommTerm();
#line 562 "metalang.met"
#line 563 "metalang.met"
#line 564 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 564 "metalang.met"
            if (  !SEE_TOKEN( CONTEXT,"context") || !(CommTerm(),1)) 
#line 564 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,"context")
#line 564 "metalang.met"
#line 565 "metalang.met"
            {
#line 565 "metalang.met"
                PPTREE _ptTree0,_ptRes0;
#line 565 "metalang.met"
                _ptRes0= MakeTree(WITH_CONTEXT, 2);
#line 565 "metalang.met"
                {
#line 565 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 565 "metalang.met"
                    _ptRes1= MakeTree(IDENT, 1);
#line 565 "metalang.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 565 "metalang.met"
                    if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 565 "metalang.met"
                        TOKEN_EXIT(pattern_rec_exit,"IDENT")
#line 565 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 565 "metalang.met"
                    _ptTree0=_ptRes1;
#line 565 "metalang.met"
                }
#line 565 "metalang.met"
                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 565 "metalang.met"
                patTree=_ptRes0;
#line 565 "metalang.met"
            }
#line 565 "metalang.met"
#line 567 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 567 "metalang.met"
            if (  !SEE_TOKEN( DO,"do") || !(CommTerm(),1)) 
#line 567 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,"do")
#line 567 "metalang.met"
#line 568 "metalang.met"
            {
#line 568 "metalang.met"
                PPTREE _ptTree0;
#line 568 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(pattern_rec)(error_free), 16, metalang))== (PPTREE) -1 ) {
#line 568 "metalang.met"
                    PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 568 "metalang.met"
                }
#line 568 "metalang.met"
                ReplaceTree(patTree , 2 , _ptTree0);
#line 568 "metalang.met"
            }
#line 568 "metalang.met"
#line 568 "metalang.met"
            break;
#line 568 "metalang.met"
#line 570 "metalang.met"
        case WITHOUT : 
#line 570 "metalang.met"
            tokenAhead = 0 ;
#line 570 "metalang.met"
            CommTerm();
#line 570 "metalang.met"
#line 571 "metalang.met"
#line 572 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 572 "metalang.met"
            if (  !SEE_TOKEN( CONTEXT,"context") || !(CommTerm(),1)) 
#line 572 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,"context")
#line 572 "metalang.met"
#line 573 "metalang.met"
            {
#line 573 "metalang.met"
                PPTREE _ptTree0,_ptRes0;
#line 573 "metalang.met"
                _ptRes0= MakeTree(WITHOUT_CONTEXT, 2);
#line 573 "metalang.met"
                {
#line 573 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 573 "metalang.met"
                    _ptRes1= MakeTree(IDENT, 1);
#line 573 "metalang.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 573 "metalang.met"
                    if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 573 "metalang.met"
                        TOKEN_EXIT(pattern_rec_exit,"IDENT")
#line 573 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 573 "metalang.met"
                    _ptTree0=_ptRes1;
#line 573 "metalang.met"
                }
#line 573 "metalang.met"
                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 573 "metalang.met"
                patTree=_ptRes0;
#line 573 "metalang.met"
            }
#line 573 "metalang.met"
#line 575 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 575 "metalang.met"
            if (  !SEE_TOKEN( DO,"do") || !(CommTerm(),1)) 
#line 575 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,"do")
#line 575 "metalang.met"
#line 576 "metalang.met"
            {
#line 576 "metalang.met"
                PPTREE _ptTree0;
#line 576 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(pattern_rec)(error_free), 16, metalang))== (PPTREE) -1 ) {
#line 576 "metalang.met"
                    PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 576 "metalang.met"
                }
#line 576 "metalang.met"
                ReplaceTree(patTree , 2 , _ptTree0);
#line 576 "metalang.met"
            }
#line 576 "metalang.met"
#line 576 "metalang.met"
            break;
#line 576 "metalang.met"
#line 578 "metalang.met"
        case REPEAT : 
#line 578 "metalang.met"
            tokenAhead = 0 ;
#line 578 "metalang.met"
            CommTerm();
#line 578 "metalang.met"
#line 579 "metalang.met"
#line 579 "metalang.met"
            _addlist3 = list ;
#line 579 "metalang.met"
#line 580 "metalang.met"
            do {
#line 580 "metalang.met"
#line 581 "metalang.met"
                {
#line 581 "metalang.met"
                    PPTREE _ptTree0;
#line 581 "metalang.met"
                    if ( (_ptTree0=NQUICK_CALL(_Tak(pattern_rec)(error_free), 16, metalang))== (PPTREE) -1 ) {
#line 581 "metalang.met"
                        PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 581 "metalang.met"
                    }
#line 581 "metalang.met"
                    _addlist3 =AddList(_addlist3 , _ptTree0);
#line 581 "metalang.met"
                }
#line 581 "metalang.met"
#line 581 "metalang.met"
                if (list){
#line 581 "metalang.met"
#line 581 "metalang.met"
                    _addlist3 = SonTree (_addlist3 ,2 );
#line 581 "metalang.met"
                } else {
#line 581 "metalang.met"
#line 581 "metalang.met"
                    list = _addlist3 ;
#line 581 "metalang.met"
                }
#line 581 "metalang.met"
#line 582 "metalang.met"
            } while ( !(! ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(PVIR,";") && (tokenAhead = 0,CommTerm(),1)))) ;
#line 582 "metalang.met"
#line 583 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 583 "metalang.met"
            if (  !SEE_TOKEN( UNTIL,"until") || !(CommTerm(),1)) 
#line 583 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,"until")
#line 583 "metalang.met"
#line 584 "metalang.met"
            {
#line 584 "metalang.met"
                PPTREE _ptTree0,_ptRes0;
#line 584 "metalang.met"
                _ptRes0= MakeTree(REPEAT, 2);
#line 584 "metalang.met"
                ReplaceTree(_ptRes0, 1, list );
#line 584 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(condition)(error_free), 2, metalang))== (PPTREE) -1 ) {
#line 584 "metalang.met"
                    PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 584 "metalang.met"
                }
#line 584 "metalang.met"
                ReplaceTree(_ptRes0, 2, _ptTree0);
#line 584 "metalang.met"
                patTree=_ptRes0;
#line 584 "metalang.met"
            }
#line 584 "metalang.met"
            break;
#line 584 "metalang.met"
#line 586 "metalang.met"
        case IF : 
#line 586 "metalang.met"
            tokenAhead = 0 ;
#line 586 "metalang.met"
            CommTerm();
#line 586 "metalang.met"
#line 587 "metalang.met"
#line 588 "metalang.met"
            {
#line 588 "metalang.met"
                PPTREE _ptTree0,_ptRes0;
#line 588 "metalang.met"
                _ptRes0= MakeTree(IF, 3);
#line 588 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(condition)(error_free), 2, metalang))== (PPTREE) -1 ) {
#line 588 "metalang.met"
                    PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 588 "metalang.met"
                }
#line 588 "metalang.met"
                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 588 "metalang.met"
                patTree=_ptRes0;
#line 588 "metalang.met"
            }
#line 588 "metalang.met"
#line 589 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 589 "metalang.met"
            if (  !SEE_TOKEN( THEN,"then") || !(CommTerm(),1)) 
#line 589 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,"then")
#line 589 "metalang.met"
#line 590 "metalang.met"
            {
#line 590 "metalang.met"
                PPTREE _ptTree0;
#line 590 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(pattern_rec)(error_free), 16, metalang))== (PPTREE) -1 ) {
#line 590 "metalang.met"
                    PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 590 "metalang.met"
                }
#line 590 "metalang.met"
                ReplaceTree(patTree , 2 , _ptTree0);
#line 590 "metalang.met"
            }
#line 590 "metalang.met"
#line 591 "metalang.met"
            if ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(ELSE,"else") && (tokenAhead = 0,CommTerm(),1)){
#line 591 "metalang.met"
#line 592 "metalang.met"
                {
#line 592 "metalang.met"
                    PPTREE _ptTree0;
#line 592 "metalang.met"
                    if ( (_ptTree0=NQUICK_CALL(_Tak(pattern_rec)(error_free), 16, metalang))== (PPTREE) -1 ) {
#line 592 "metalang.met"
                        PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 592 "metalang.met"
                    }
#line 592 "metalang.met"
                    ReplaceTree(patTree , 3 , _ptTree0);
#line 592 "metalang.met"
                }
#line 592 "metalang.met"
#line 592 "metalang.met"
            }
#line 592 "metalang.met"
            break;
#line 592 "metalang.met"
#line 594 "metalang.met"
        case WHILE : 
#line 594 "metalang.met"
            tokenAhead = 0 ;
#line 594 "metalang.met"
            CommTerm();
#line 594 "metalang.met"
#line 595 "metalang.met"
#line 596 "metalang.met"
            {
#line 596 "metalang.met"
                PPTREE _ptTree0,_ptRes0;
#line 596 "metalang.met"
                _ptRes0= MakeTree(WHILE, 2);
#line 596 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(condition)(error_free), 2, metalang))== (PPTREE) -1 ) {
#line 596 "metalang.met"
                    PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 596 "metalang.met"
                }
#line 596 "metalang.met"
                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 596 "metalang.met"
                patTree=_ptRes0;
#line 596 "metalang.met"
            }
#line 596 "metalang.met"
#line 597 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 597 "metalang.met"
            if (  !SEE_TOKEN( DO,"do") || !(CommTerm(),1)) 
#line 597 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,"do")
#line 597 "metalang.met"
#line 598 "metalang.met"
            {
#line 598 "metalang.met"
                PPTREE _ptTree0;
#line 598 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(pattern_rec)(error_free), 16, metalang))== (PPTREE) -1 ) {
#line 598 "metalang.met"
                    PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 598 "metalang.met"
                }
#line 598 "metalang.met"
                ReplaceTree(patTree , 2 , _ptTree0);
#line 598 "metalang.met"
            }
#line 598 "metalang.met"
            break;
#line 598 "metalang.met"
#line 600 "metalang.met"
        case BEGIN : 
#line 600 "metalang.met"
            tokenAhead = 0 ;
#line 600 "metalang.met"
            CommTerm();
#line 600 "metalang.met"
#line 601 "metalang.met"
#line 601 "metalang.met"
            _addlist4 = list ;
#line 601 "metalang.met"
#line 602 "metalang.met"
            do {
#line 602 "metalang.met"
#line 603 "metalang.met"
                {
#line 603 "metalang.met"
                    PPTREE _ptTree0;
#line 603 "metalang.met"
                    if ( (_ptTree0=NQUICK_CALL(_Tak(pattern_rec)(error_free), 16, metalang))== (PPTREE) -1 ) {
#line 603 "metalang.met"
                        PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 603 "metalang.met"
                    }
#line 603 "metalang.met"
                    _addlist4 =AddList(_addlist4 , _ptTree0);
#line 603 "metalang.met"
                }
#line 603 "metalang.met"
#line 603 "metalang.met"
                if (list){
#line 603 "metalang.met"
#line 603 "metalang.met"
                    _addlist4 = SonTree (_addlist4 ,2 );
#line 603 "metalang.met"
                } else {
#line 603 "metalang.met"
#line 603 "metalang.met"
                    list = _addlist4 ;
#line 603 "metalang.met"
                }
#line 603 "metalang.met"
#line 604 "metalang.met"
            } while ( !(! ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(PVIR,";") && (tokenAhead = 0,CommTerm(),1)))) ;
#line 604 "metalang.met"
#line 605 "metalang.met"
            {
#line 605 "metalang.met"
                PPTREE _ptRes0;
#line 605 "metalang.met"
                _ptRes0= MakeTree(BEGIN, 1);
#line 605 "metalang.met"
                ReplaceTree(_ptRes0, 1, list );
#line 605 "metalang.met"
                patTree=_ptRes0;
#line 605 "metalang.met"
            }
#line 605 "metalang.met"
#line 606 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 606 "metalang.met"
            if (  !SEE_TOKEN( END,"end") || !(CommTerm(),1)) 
#line 606 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,"end")
#line 606 "metalang.met"
            break;
#line 606 "metalang.met"
#line 608 "metalang.met"
        case CASE : 
#line 608 "metalang.met"
            tokenAhead = 0 ;
#line 608 "metalang.met"
            CommTerm();
#line 608 "metalang.met"
#line 609 "metalang.met"
#line 609 "metalang.met"
            _addlist1 = list ;
#line 609 "metalang.met"
#line 610 "metalang.met"
            while (NPUSH_CALL_AFF_VERIF(switchTree = ,_Tak(condition), 2, metalang)) { 
#line 610 "metalang.met"
#line 611 "metalang.met"
#line 612 "metalang.met"
                {
#line 612 "metalang.met"
                    PPTREE _ptRes0;
#line 612 "metalang.met"
                    _ptRes0= MakeTree(SWITCH, 2);
#line 612 "metalang.met"
                    ReplaceTree(_ptRes0, 1, switchTree );
#line 612 "metalang.met"
                    switchTree=_ptRes0;
#line 612 "metalang.met"
                }
#line 612 "metalang.met"
#line 613 "metalang.met"
                (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 613 "metalang.met"
                if (  !SEE_TOKEN( DPOI,":") || !(CommTerm(),1)) 
#line 613 "metalang.met"
                    TOKEN_EXIT(pattern_rec_exit,":")
#line 613 "metalang.met"
#line 614 "metalang.met"
                {
#line 614 "metalang.met"
                    PPTREE _ptTree0;
#line 614 "metalang.met"
                    if ( (_ptTree0=NQUICK_CALL(_Tak(pattern_rec)(error_free), 16, metalang))== (PPTREE) -1 ) {
#line 614 "metalang.met"
                        PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 614 "metalang.met"
                    }
#line 614 "metalang.met"
                    ReplaceTree(switchTree , 2 , _ptTree0);
#line 614 "metalang.met"
                }
#line 614 "metalang.met"
#line 615 "metalang.met"
                _addlist1 =AddList(_addlist1 ,switchTree );
#line 615 "metalang.met"
#line 615 "metalang.met"
                if (list){
#line 615 "metalang.met"
#line 615 "metalang.met"
                    _addlist1 = SonTree (_addlist1 ,2 );
#line 615 "metalang.met"
                } else {
#line 615 "metalang.met"
#line 615 "metalang.met"
                    list = _addlist1 ;
#line 615 "metalang.met"
                }
#line 615 "metalang.met"
#line 616 "metalang.met"
                if ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(PVIR,";") && (tokenAhead = 0,CommTerm(),1)){
#line 616 "metalang.met"
#line 616 "metalang.met"
                }
#line 616 "metalang.met"
#line 616 "metalang.met"
            } 
#line 616 "metalang.met"
#line 618 "metalang.met"
            {
#line 618 "metalang.met"
                PPTREE _ptRes0;
#line 618 "metalang.met"
                _ptRes0= MakeTree(CASE, 1);
#line 618 "metalang.met"
                ReplaceTree(_ptRes0, 1, list );
#line 618 "metalang.met"
                patTree=_ptRes0;
#line 618 "metalang.met"
            }
#line 618 "metalang.met"
#line 619 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 619 "metalang.met"
            if (  !SEE_TOKEN( END,"end") || !(CommTerm(),1)) 
#line 619 "metalang.met"
                TOKEN_EXIT(pattern_rec_exit,"end")
#line 619 "metalang.met"
            break;
#line 619 "metalang.met"
#line 621 "metalang.met"
        case TAKEL : 
#line 621 "metalang.met"
#line 621 "metalang.met"
            {
#line 621 "metalang.met"
                PPTREE _ptTree0;
#line 621 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(takel_stat)(error_free), 22, metalang))== (PPTREE) -1 ) {
#line 621 "metalang.met"
                    PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 621 "metalang.met"
                }
#line 621 "metalang.met"
                _retValue =_ptTree0;
#line 621 "metalang.met"
                goto pattern_rec_ret;
#line 621 "metalang.met"
            }
#line 621 "metalang.met"
            break;
#line 621 "metalang.met"
#line 622 "metalang.met"
        case STOREL : 
#line 622 "metalang.met"
#line 622 "metalang.met"
            {
#line 622 "metalang.met"
                PPTREE _ptTree0;
#line 622 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(storel_stat)(error_free), 20, metalang))== (PPTREE) -1 ) {
#line 622 "metalang.met"
                    PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 622 "metalang.met"
                }
#line 622 "metalang.met"
                _retValue =_ptTree0;
#line 622 "metalang.met"
                goto pattern_rec_ret;
#line 622 "metalang.met"
            }
#line 622 "metalang.met"
            break;
#line 622 "metalang.met"
#line 623 "metalang.met"
        case AT_BEGINNING : 
#line 623 "metalang.met"
            tokenAhead = 0 ;
#line 623 "metalang.met"
            CommTerm();
#line 623 "metalang.met"
#line 623 "metalang.met"
            {
#line 623 "metalang.met"
                PPTREE _ptTree0;
#line 623 "metalang.met"
                {
#line 623 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 623 "metalang.met"
                    _ptRes1= MakeTree(BEGINNING, 1);
#line 623 "metalang.met"
                    if ( (_ptTree1=NQUICK_CALL(_Tak(pattern_rec)(error_free), 16, metalang))== (PPTREE) -1 ) {
#line 623 "metalang.met"
                        PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 623 "metalang.met"
                    }
#line 623 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 623 "metalang.met"
                    _ptTree0=_ptRes1;
#line 623 "metalang.met"
                }
#line 623 "metalang.met"
                _retValue =_ptTree0;
#line 623 "metalang.met"
                goto pattern_rec_ret;
#line 623 "metalang.met"
            }
#line 623 "metalang.met"
            break;
#line 623 "metalang.met"
#line 624 "metalang.met"
        case AOUVAOUV : 
#line 624 "metalang.met"
#line 624 "metalang.met"
            {
#line 624 "metalang.met"
                PPTREE _ptTree0;
#line 624 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(asit)(error_free), 1, metalang))== (PPTREE) -1 ) {
#line 624 "metalang.met"
                    PROG_EXIT(pattern_rec_exit,"pattern_rec")
#line 624 "metalang.met"
                }
#line 624 "metalang.met"
                _retValue =_ptTree0;
#line 624 "metalang.met"
                goto pattern_rec_ret;
#line 624 "metalang.met"
            }
#line 624 "metalang.met"
            break;
#line 624 "metalang.met"
#line 625 "metalang.met"
        case RESETL : 
#line 625 "metalang.met"
            tokenAhead = 0 ;
#line 625 "metalang.met"
            CommTerm();
#line 625 "metalang.met"
#line 625 "metalang.met"
            {
#line 625 "metalang.met"
                PPTREE _ptTree0;
#line 625 "metalang.met"
                {
#line 625 "metalang.met"
                    PPTREE _ptRes1;
#line 625 "metalang.met"
                    _ptRes1= MakeTree(RESETLEX, 0);
#line 625 "metalang.met"
                    _ptTree0=_ptRes1;
#line 625 "metalang.met"
                }
#line 625 "metalang.met"
                _retValue =_ptTree0;
#line 625 "metalang.met"
                goto pattern_rec_ret;
#line 625 "metalang.met"
            }
#line 625 "metalang.met"
            break;
#line 625 "metalang.met"
#line 626 "metalang.met"
        case FORGETL : 
#line 626 "metalang.met"
            tokenAhead = 0 ;
#line 626 "metalang.met"
            CommTerm();
#line 626 "metalang.met"
#line 626 "metalang.met"
            {
#line 626 "metalang.met"
                PPTREE _ptTree0;
#line 626 "metalang.met"
                {
#line 626 "metalang.met"
                    PPTREE _ptRes1;
#line 626 "metalang.met"
                    _ptRes1= MakeTree(FORGET, 0);
#line 626 "metalang.met"
                    _ptTree0=_ptRes1;
#line 626 "metalang.met"
                }
#line 626 "metalang.met"
                _retValue =_ptTree0;
#line 626 "metalang.met"
                goto pattern_rec_ret;
#line 626 "metalang.met"
            }
#line 626 "metalang.met"
            break;
#line 626 "metalang.met"
#line 627 "metalang.met"
        case RECOVERL : 
#line 627 "metalang.met"
            tokenAhead = 0 ;
#line 627 "metalang.met"
            CommTerm();
#line 627 "metalang.met"
#line 627 "metalang.met"
            {
#line 627 "metalang.met"
                PPTREE _ptTree0;
#line 627 "metalang.met"
                {
#line 627 "metalang.met"
                    PPTREE _ptRes1;
#line 627 "metalang.met"
                    _ptRes1= MakeTree(RECOVER, 0);
#line 627 "metalang.met"
                    _ptTree0=_ptRes1;
#line 627 "metalang.met"
                }
#line 627 "metalang.met"
                _retValue =_ptTree0;
#line 627 "metalang.met"
                goto pattern_rec_ret;
#line 627 "metalang.met"
            }
#line 627 "metalang.met"
            break;
#line 627 "metalang.met"
#line 628 "metalang.met"
        case FORGET : 
#line 628 "metalang.met"
            tokenAhead = 0 ;
#line 628 "metalang.met"
            CommTerm();
#line 628 "metalang.met"
#line 628 "metalang.met"
            {
#line 628 "metalang.met"
                PPTREE _ptTree0;
#line 628 "metalang.met"
                {
#line 628 "metalang.met"
                    PPTREE _ptRes1;
#line 628 "metalang.met"
                    _ptRes1= MakeTree(FORGET_SYNTAXIQUE, 0);
#line 628 "metalang.met"
                    _ptTree0=_ptRes1;
#line 628 "metalang.met"
                }
#line 628 "metalang.met"
                _retValue =_ptTree0;
#line 628 "metalang.met"
                goto pattern_rec_ret;
#line 628 "metalang.met"
            }
#line 628 "metalang.met"
            break;
#line 628 "metalang.met"
#line 629 "metalang.met"
        case RECOGNIZE_STRING : 
#line 629 "metalang.met"
            tokenAhead = 0 ;
#line 629 "metalang.met"
            CommTerm();
#line 629 "metalang.met"
#line 629 "metalang.met"
            {
#line 629 "metalang.met"
                PPTREE _ptTree0;
#line 629 "metalang.met"
                {
#line 629 "metalang.met"
                    PPTREE _ptRes1;
#line 629 "metalang.met"
                    _ptRes1= MakeTree(RECOGNIZE_STRING, 0);
#line 629 "metalang.met"
                    _ptTree0=_ptRes1;
#line 629 "metalang.met"
                }
#line 629 "metalang.met"
                _retValue =_ptTree0;
#line 629 "metalang.met"
                goto pattern_rec_ret;
#line 629 "metalang.met"
            }
#line 629 "metalang.met"
            break;
#line 629 "metalang.met"
#line 630 "metalang.met"
        case BREAK : 
#line 630 "metalang.met"
            tokenAhead = 0 ;
#line 630 "metalang.met"
            CommTerm();
#line 630 "metalang.met"
#line 630 "metalang.met"
            {
#line 630 "metalang.met"
                PPTREE _ptTree0;
#line 630 "metalang.met"
                {
#line 630 "metalang.met"
                    PPTREE _ptRes1;
#line 630 "metalang.met"
                    _ptRes1= MakeTree(BREAK, 0);
#line 630 "metalang.met"
                    _ptTree0=_ptRes1;
#line 630 "metalang.met"
                }
#line 630 "metalang.met"
                _retValue =_ptTree0;
#line 630 "metalang.met"
                goto pattern_rec_ret;
#line 630 "metalang.met"
            }
#line 630 "metalang.met"
            break;
#line 630 "metalang.met"
#line 630 "metalang.met"
        default : 
#line 630 "metalang.met"
#line 630 "metalang.met"
            break;
#line 630 "metalang.met"
    }
#line 630 "metalang.met"
#line 633 "metalang.met"
    {
#line 633 "metalang.met"
        _retValue = patTree ;
#line 633 "metalang.met"
        goto pattern_rec_ret;
#line 633 "metalang.met"
        
#line 633 "metalang.met"
    }
#line 633 "metalang.met"
#line 634 "metalang.met"
(tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 634 "metalang.met"
if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,(PPTREE) 0,lastTree); else {_lastTree=(PPTREE)0;_funcLevel--;}
#line 634 "metalang.met"
return((PPTREE) 0);
#line 634 "metalang.met"

#line 634 "metalang.met"
pattern_rec_exit :
#line 634 "metalang.met"

#line 634 "metalang.met"
    {
#line 634 "metalang.met"
        MulFreeTree(9,listskip,switchTree,list,ident,patTree,_addlist4,_addlist3,_addlist2,_addlist1);
#line 634 "metalang.met"
    }
#line 634 "metalang.met"
    _Debug = TRACE_RULE("pattern_rec",TRACE_EXIT,(PPTREE)0);
#line 634 "metalang.met"
    _funcLevel--;
#line 634 "metalang.met"
    return((PPTREE) -1) ;
#line 634 "metalang.met"

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

#line 634 "metalang.met"
#line 742 "metalang.met"
PPTREE metalang::see_follow ( int error_free)
#line 742 "metalang.met"
{
#line 742 "metalang.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 742 "metalang.met"
    int _value,_nbPre = 0 ;
#line 742 "metalang.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 742 "metalang.met"
    int _Debug = TRACE_RULE("see_follow",TRACE_ENTER,(PPTREE)0);
#line 742 "metalang.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 742 "metalang.met"
#line 742 "metalang.met"
    PPTREE patTree = (PPTREE) 0;
#line 742 "metalang.met"
#line 744 "metalang.met"
#line 745 "metalang.met"
    {
#line 745 "metalang.met"
        PPTREE _ptRes0;
#line 745 "metalang.met"
        _ptRes0= MakeTree(SEE, 1);
#line 745 "metalang.met"
        patTree=_ptRes0;
#line 745 "metalang.met"
    }
#line 745 "metalang.met"
#line 746 "metalang.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 746 "metalang.met"
    switch( lexEl.Value) {
#line 746 "metalang.met"
#line 748 "metalang.met"
        case DIES : 
#line 748 "metalang.met"
            tokenAhead = 0 ;
#line 748 "metalang.met"
            CommTerm();
#line 748 "metalang.met"
#line 748 "metalang.met"
            {
#line 748 "metalang.met"
                PPTREE _ptTree0;
#line 748 "metalang.met"
                {
#line 748 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 748 "metalang.met"
                    _ptRes1= MakeTree(TOKEN, 1);
#line 748 "metalang.met"
                    {
#line 748 "metalang.met"
                        PPTREE _ptTree2,_ptRes2;
#line 748 "metalang.met"
                        _ptRes2= MakeTree(STRING, 1);
#line 748 "metalang.met"
                        (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 748 "metalang.met"
                        if ( ! TERM_OR_META(STRING,"STRING") || !(BUILD_TERM_META(_ptTree2))) 
#line 748 "metalang.met"
                            TOKEN_EXIT(see_follow_exit,"STRING")
#line 748 "metalang.met"
                        ReplaceTree(_ptRes2, 1, _ptTree2);
#line 748 "metalang.met"
                        _ptTree1=_ptRes2;
#line 748 "metalang.met"
                    }
#line 748 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 748 "metalang.met"
                    _ptTree0=_ptRes1;
#line 748 "metalang.met"
                }
#line 748 "metalang.met"
                ReplaceTree(patTree , 1 , _ptTree0);
#line 748 "metalang.met"
            }
#line 748 "metalang.met"
            break;
#line 748 "metalang.met"
#line 751 "metalang.met"
        case EXCL : 
#line 751 "metalang.met"
            tokenAhead = 0 ;
#line 751 "metalang.met"
            CommTerm();
#line 751 "metalang.met"
#line 751 "metalang.met"
            {
#line 751 "metalang.met"
                PPTREE _ptTree0;
#line 751 "metalang.met"
                {
#line 751 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 751 "metalang.met"
                    _ptRes1= MakeTree(EXCLA, 1);
#line 751 "metalang.met"
                    {
#line 751 "metalang.met"
                        PPTREE _ptTree2,_ptRes2;
#line 751 "metalang.met"
                        _ptRes2= MakeTree(IDENT, 1);
#line 751 "metalang.met"
                        (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 751 "metalang.met"
                        if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree2))) 
#line 751 "metalang.met"
                            TOKEN_EXIT(see_follow_exit,"IDENT")
#line 751 "metalang.met"
                        ReplaceTree(_ptRes2, 1, _ptTree2);
#line 751 "metalang.met"
                        _ptTree1=_ptRes2;
#line 751 "metalang.met"
                    }
#line 751 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 751 "metalang.met"
                    _ptTree0=_ptRes1;
#line 751 "metalang.met"
                }
#line 751 "metalang.met"
                ReplaceTree(patTree , 1 , _ptTree0);
#line 751 "metalang.met"
            }
#line 751 "metalang.met"
            break;
#line 751 "metalang.met"
#line 753 "metalang.met"
        case META : 
#line 753 "metalang.met"
        case STRING : 
#line 753 "metalang.met"
#line 754 "metalang.met"
            {
#line 754 "metalang.met"
                PPTREE _ptTree0;
#line 754 "metalang.met"
                {
#line 754 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 754 "metalang.met"
                    _ptRes1= MakeTree(STRING, 1);
#line 754 "metalang.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 754 "metalang.met"
                    if ( ! TERM_OR_META(STRING,"STRING") || !(BUILD_TERM_META(_ptTree1))) 
#line 754 "metalang.met"
                        TOKEN_EXIT(see_follow_exit,"STRING")
#line 754 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 754 "metalang.met"
                    _ptTree0=_ptRes1;
#line 754 "metalang.met"
                }
#line 754 "metalang.met"
                ReplaceTree(patTree , 1 , _ptTree0);
#line 754 "metalang.met"
            }
#line 754 "metalang.met"
            break;
#line 754 "metalang.met"
#line 755 "metalang.met"
        case IDENT : 
#line 755 "metalang.met"
#line 756 "metalang.met"
            {
#line 756 "metalang.met"
                PPTREE _ptTree0;
#line 756 "metalang.met"
                {
#line 756 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 756 "metalang.met"
                    _ptRes1= MakeTree(IDENT, 1);
#line 756 "metalang.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 756 "metalang.met"
                    if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 756 "metalang.met"
                        TOKEN_EXIT(see_follow_exit,"IDENT")
#line 756 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 756 "metalang.met"
                    _ptTree0=_ptRes1;
#line 756 "metalang.met"
                }
#line 756 "metalang.met"
                ReplaceTree(patTree , 1 , _ptTree0);
#line 756 "metalang.met"
            }
#line 756 "metalang.met"
            break;
#line 756 "metalang.met"
        default :
#line 756 "metalang.met"
            CASE_EXIT(see_follow_exit,"either # or ! or STRING or IDENT")
#line 756 "metalang.met"
            break;
#line 756 "metalang.met"
    }
#line 756 "metalang.met"
#line 759 "metalang.met"
    {
#line 759 "metalang.met"
        _retValue = patTree ;
#line 759 "metalang.met"
        goto see_follow_ret;
#line 759 "metalang.met"
        
#line 759 "metalang.met"
    }
#line 759 "metalang.met"
#line 760 "metalang.met"
(tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 760 "metalang.met"
if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,(PPTREE) 0,lastTree); else {_lastTree=(PPTREE)0;_funcLevel--;}
#line 760 "metalang.met"
return((PPTREE) 0);
#line 760 "metalang.met"

#line 760 "metalang.met"
see_follow_exit :
#line 760 "metalang.met"

#line 760 "metalang.met"
    {
#line 760 "metalang.met"
        MulFreeTree(1,patTree);
#line 760 "metalang.met"
    }
#line 760 "metalang.met"
    _Debug = TRACE_RULE("see_follow",TRACE_EXIT,(PPTREE)0);
#line 760 "metalang.met"
    _funcLevel--;
#line 760 "metalang.met"
    return((PPTREE) -1) ;
#line 760 "metalang.met"

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

#line 760 "metalang.met"
