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

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


int hasGotErrorMeta = 0 ; 
#line 650 "metalang.met"
PPTREE metalang::asit ( int error_free)
#line 650 "metalang.met"
{
#line 650 "metalang.met"
    int  _oldkeepSpace = keepSpace;
#line 650 "metalang.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 650 "metalang.met"
    int _value,_nbPre = 0 ;
#line 650 "metalang.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 650 "metalang.met"
    int _Debug = TRACE_RULE("asit",TRACE_ENTER,(PPTREE)0);
#line 650 "metalang.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 650 "metalang.met"
#line 650 "metalang.met"
    PPTREE _addlist1 = (PPTREE) 0;
#line 650 "metalang.met"
#line 650 "metalang.met"
    PPTREE listAsit = (PPTREE) 0;
#line 650 "metalang.met"
#line 652 "metalang.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 652 "metalang.met"
    if (  !SEE_TOKEN( AOUVAOUV,"{{") || !(CommTerm(),1)) 
#line 652 "metalang.met"
        TOKEN_EXIT(asit_exit,"{{")
#line 652 "metalang.met"
#line 653 "metalang.met"
    {
#line 653 "metalang.met"
        keepSpace = 1 ;
#line 653 "metalang.met"
#line 654 "metalang.met"
#line 654 "metalang.met"
        _addlist1 = listAsit ;
#line 654 "metalang.met"
#line 654 "metalang.met"
        while ((tokenAhead == 2|| (LexAsitContent(),TRACE_LEX(1)))&&SEE_TOKEN( ASIT_CONTENT,"ASIT_CONTENT")) { 
#line 654 "metalang.met"
#line 655 "metalang.met"
#line 655 "metalang.met"
            {
#line 655 "metalang.met"
                PPTREE _ptTree0;
#line 655 "metalang.met"
                (tokenAhead == 2|| (LexAsitContent(),TRACE_LEX(1)));
#line 655 "metalang.met"
                if ( ! TERM_OR_META(ASIT_CONTENT,"ASIT_CONTENT") || !(BUILD_TERM_META(_ptTree0))) 
#line 655 "metalang.met"
                    TOKEN_EXIT(asit_exit,"ASIT_CONTENT")
#line 655 "metalang.met"
                _addlist1 =AddList(_addlist1 , _ptTree0);
#line 655 "metalang.met"
            }
#line 655 "metalang.met"
#line 655 "metalang.met"
            if (listAsit){
#line 655 "metalang.met"
#line 655 "metalang.met"
                _addlist1 = SonTree (_addlist1 ,2 );
#line 655 "metalang.met"
            } else {
#line 655 "metalang.met"
#line 655 "metalang.met"
                listAsit = _addlist1 ;
#line 655 "metalang.met"
            }
#line 655 "metalang.met"
        } 
#line 655 "metalang.met"
        keepSpace =  _oldkeepSpace;
#line 655 "metalang.met"
    }
#line 655 "metalang.met"
#line 656 "metalang.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 656 "metalang.met"
    if (  !SEE_TOKEN( AFERAFER,"}}") || !(CommTerm(),1)) 
#line 656 "metalang.met"
        TOKEN_EXIT(asit_exit,"}}")
#line 656 "metalang.met"
#line 657 "metalang.met"
    {
#line 657 "metalang.met"
        PPTREE _ptTree0;
#line 657 "metalang.met"
        {
#line 657 "metalang.met"
            PPTREE _ptRes1;
#line 657 "metalang.met"
            _ptRes1= MakeTree(ASIT, 1);
#line 657 "metalang.met"
            ReplaceTree(_ptRes1, 1, listAsit );
#line 657 "metalang.met"
            _ptTree0=_ptRes1;
#line 657 "metalang.met"
        }
#line 657 "metalang.met"
        _retValue =_ptTree0;
#line 657 "metalang.met"
        goto asit_ret;
#line 657 "metalang.met"
    }
#line 657 "metalang.met"
#line 657 "metalang.met"
#line 657 "metalang.met"

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

#line 658 "metalang.met"
asit_exit :
#line 658 "metalang.met"

#line 658 "metalang.met"
    {
#line 658 "metalang.met"
        MulFreeTree(2,listAsit,_addlist1);
#line 658 "metalang.met"
    }
#line 658 "metalang.met"
    _Debug = TRACE_RULE("asit",TRACE_EXIT,(PPTREE)0);
#line 658 "metalang.met"
    _funcLevel--;
#line 658 "metalang.met"
    keepSpace =  _oldkeepSpace;
#line 658 "metalang.met"
    return((PPTREE) -1) ;
#line 658 "metalang.met"

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

#line 658 "metalang.met"
#line 636 "metalang.met"
PPTREE metalang::condition ( int error_free)
#line 636 "metalang.met"
{
#line 636 "metalang.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 636 "metalang.met"
    int _value,_nbPre = 0 ;
#line 636 "metalang.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 636 "metalang.met"
    int _Debug = TRACE_RULE("condition",TRACE_ENTER,(PPTREE)0);
#line 636 "metalang.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 636 "metalang.met"
#line 636 "metalang.met"
    PPTREE cond = (PPTREE) 0;
#line 636 "metalang.met"
#line 638 "metalang.met"
    if ( (cond=NQUICK_CALL(_Tak(one_condition)(error_free), 14, metalang))== (PPTREE) -1 ) {
#line 638 "metalang.met"
        PROG_EXIT(condition_exit,"condition")
#line 638 "metalang.met"
    }
#line 638 "metalang.met"
#line 639 "metalang.met"
    while (((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN( OR,"or")) || 
#line 639 "metalang.met"
          ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN( AND,"and"))) { 
#line 639 "metalang.met"
#line 640 "metalang.met"
        if ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(OR,"or") && (tokenAhead = 0,CommTerm(),1)){
#line 640 "metalang.met"
#line 641 "metalang.met"
            {
#line 641 "metalang.met"
                PPTREE _ptTree0,_ptRes0;
#line 641 "metalang.met"
                _ptRes0= MakeTree(OR, 2);
#line 641 "metalang.met"
                ReplaceTree(_ptRes0, 1, cond );
#line 641 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(one_condition)(error_free), 14, metalang))== (PPTREE) -1 ) {
#line 641 "metalang.met"
                    PROG_EXIT(condition_exit,"condition")
#line 641 "metalang.met"
                }
#line 641 "metalang.met"
                ReplaceTree(_ptRes0, 2, _ptTree0);
#line 641 "metalang.met"
                cond=_ptRes0;
#line 641 "metalang.met"
            }
#line 641 "metalang.met"
        } else {
#line 641 "metalang.met"
#line 643 "metalang.met"
#line 644 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 644 "metalang.met"
            if (  !SEE_TOKEN( AND,"and") || !(CommTerm(),1)) 
#line 644 "metalang.met"
                TOKEN_EXIT(condition_exit,"and")
#line 644 "metalang.met"
#line 645 "metalang.met"
            {
#line 645 "metalang.met"
                PPTREE _ptTree0,_ptRes0;
#line 645 "metalang.met"
                _ptRes0= MakeTree(AND, 2);
#line 645 "metalang.met"
                ReplaceTree(_ptRes0, 1, cond );
#line 645 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(one_condition)(error_free), 14, metalang))== (PPTREE) -1 ) {
#line 645 "metalang.met"
                    PROG_EXIT(condition_exit,"condition")
#line 645 "metalang.met"
                }
#line 645 "metalang.met"
                ReplaceTree(_ptRes0, 2, _ptTree0);
#line 645 "metalang.met"
                cond=_ptRes0;
#line 645 "metalang.met"
            }
#line 645 "metalang.met"
#line 645 "metalang.met"
        }
#line 645 "metalang.met"
    } 
#line 645 "metalang.met"
#line 647 "metalang.met"
    {
#line 647 "metalang.met"
        _retValue = cond ;
#line 647 "metalang.met"
        goto condition_ret;
#line 647 "metalang.met"
        
#line 647 "metalang.met"
    }
#line 647 "metalang.met"
#line 647 "metalang.met"
#line 647 "metalang.met"

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

#line 648 "metalang.met"
condition_exit :
#line 648 "metalang.met"

#line 648 "metalang.met"
    {
#line 648 "metalang.met"
        MulFreeTree(1,cond);
#line 648 "metalang.met"
    }
#line 648 "metalang.met"
    _Debug = TRACE_RULE("condition",TRACE_EXIT,(PPTREE)0);
#line 648 "metalang.met"
    _funcLevel--;
#line 648 "metalang.met"
    return((PPTREE) -1) ;
#line 648 "metalang.met"

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

#line 648 "metalang.met"
#line 206 "metalang.met"
PPTREE metalang::debut_proc ( int error_free)
#line 206 "metalang.met"
{
#line 206 "metalang.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 206 "metalang.met"
    int _value,_nbPre = 0 ;
#line 206 "metalang.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 206 "metalang.met"
    int _Debug = TRACE_RULE("debut_proc",TRACE_ENTER,(PPTREE)0);
#line 206 "metalang.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 206 "metalang.met"
#line 207 "metalang.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 207 "metalang.met"
    switch( lexEl.Value) {
#line 207 "metalang.met"
#line 208 "metalang.met"
        case DEFINE : 
#line 208 "metalang.met"
#line 208 "metalang.met"
            break;
#line 208 "metalang.met"
#line 209 "metalang.met"
        case LEXDEFINE : 
#line 209 "metalang.met"
#line 209 "metalang.met"
            break;
#line 209 "metalang.met"
#line 209 "metalang.met"
        case AOUVAOUV : 
#line 209 "metalang.met"
#line 209 "metalang.met"
            break;
#line 209 "metalang.met"
        default :
#line 209 "metalang.met"
            CASE_EXIT(debut_proc_exit,"either define or lexdefine or {{")
#line 209 "metalang.met"
            break;
#line 209 "metalang.met"
    }
#line 209 "metalang.met"
#line 209 "metalang.met"
#line 211 "metalang.met"
(tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 211 "metalang.met"
if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,(PPTREE) 0,lastTree); else {_lastTree=(PPTREE)0;_funcLevel--;}
#line 211 "metalang.met"
return((PPTREE) 0);
#line 211 "metalang.met"

#line 211 "metalang.met"
debut_proc_exit :
#line 211 "metalang.met"

#line 211 "metalang.met"
    _Debug = TRACE_RULE("debut_proc",TRACE_EXIT,(PPTREE)0);
#line 211 "metalang.met"
    _funcLevel--;
#line 211 "metalang.met"
    return((PPTREE) -1) ;
#line 211 "metalang.met"

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

#line 211 "metalang.met"
#line 395 "metalang.met"
PPTREE metalang::declaration ( int error_free)
#line 395 "metalang.met"
{
#line 395 "metalang.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 395 "metalang.met"
    int _value,_nbPre = 0 ;
#line 395 "metalang.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 395 "metalang.met"
    int _Debug = TRACE_RULE("declaration",TRACE_ENTER,(PPTREE)0);
#line 395 "metalang.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 395 "metalang.met"
#line 395 "metalang.met"
    PPTREE _addlist1 = (PPTREE) 0,_addlist2 = (PPTREE) 0,_addlist3 = (PPTREE) 0;
#line 395 "metalang.met"
#line 395 "metalang.met"
    PPTREE list = (PPTREE) 0,listdec = (PPTREE) 0,decTree = (PPTREE) 0,pattern = (PPTREE) 0,ident = (PPTREE) 0;
#line 395 "metalang.met"
#line 397 "metalang.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 397 "metalang.met"
    if (  !SEE_TOKEN( DEFINE,"define") || !(CommTerm(),1)) 
#line 397 "metalang.met"
        TOKEN_EXIT(declaration_exit,"define")
#line 397 "metalang.met"
#line 398 "metalang.met"
    {
#line 398 "metalang.met"
        PPTREE _ptTree0,_ptRes0;
#line 398 "metalang.met"
        _ptRes0= MakeTree(DEFINE, 4);
#line 398 "metalang.met"
        {
#line 398 "metalang.met"
            PPTREE _ptTree1,_ptRes1;
#line 398 "metalang.met"
            _ptRes1= MakeTree(IDENT, 1);
#line 398 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 398 "metalang.met"
            if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 398 "metalang.met"
                TOKEN_EXIT(declaration_exit,"IDENT")
#line 398 "metalang.met"
            ReplaceTree(_ptRes1, 1, _ptTree1);
#line 398 "metalang.met"
            _ptTree0=_ptRes1;
#line 398 "metalang.met"
        }
#line 398 "metalang.met"
        ReplaceTree(_ptRes0, 1, _ptTree0);
#line 398 "metalang.met"
        decTree=_ptRes0;
#line 398 "metalang.met"
    }
#line 398 "metalang.met"
#line 399 "metalang.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 399 "metalang.met"
    if (  !SEE_TOKEN( PVIR,";") || !(CommTerm(),1)) 
#line 399 "metalang.met"
        TOKEN_EXIT(declaration_exit,";")
#line 399 "metalang.met"
#line 400 "metalang.met"
    ReplaceTree(decTree,3,MakeString(theFileName));
#line 400 "metalang.met"
#line 400 "metalang.met"
    _addlist1 = list ;
#line 400 "metalang.met"
#line 401 "metalang.met"
    while ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN( AOUVAOUV,"{{")) { 
#line 401 "metalang.met"
#line 402 "metalang.met"
#line 403 "metalang.met"
        {
#line 403 "metalang.met"
            PPTREE _ptTree0;
#line 403 "metalang.met"
            if ( (_ptTree0=NQUICK_CALL(_Tak(asit)(error_free), 1, metalang))== (PPTREE) -1 ) {
#line 403 "metalang.met"
                PROG_EXIT(declaration_exit,"declaration")
#line 403 "metalang.met"
            }
#line 403 "metalang.met"
            _addlist1 =AddList(_addlist1 , _ptTree0);
#line 403 "metalang.met"
        }
#line 403 "metalang.met"
#line 403 "metalang.met"
        if (list){
#line 403 "metalang.met"
#line 403 "metalang.met"
            _addlist1 = SonTree (_addlist1 ,2 );
#line 403 "metalang.met"
        } else {
#line 403 "metalang.met"
#line 403 "metalang.met"
            list = _addlist1 ;
#line 403 "metalang.met"
        }
#line 403 "metalang.met"
#line 404 "metalang.met"
        (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 404 "metalang.met"
        if (  !SEE_TOKEN( PVIR,";") || !(CommTerm(),1)) 
#line 404 "metalang.met"
            TOKEN_EXIT(declaration_exit,";")
#line 404 "metalang.met"
#line 404 "metalang.met"
    } 
#line 404 "metalang.met"
#line 406 "metalang.met"
    if ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(DECLARE,"declare") && (tokenAhead = 0,CommTerm(),1)){
#line 406 "metalang.met"
#line 407 "metalang.met"
#line 407 "metalang.met"
        _addlist2 = listdec ;
#line 407 "metalang.met"
#line 408 "metalang.met"
        do {
#line 408 "metalang.met"
#line 409 "metalang.met"
            {
#line 409 "metalang.met"
                PPTREE _ptTree0,_ptRes0;
#line 409 "metalang.met"
                _ptRes0= MakeTree(IDENT, 1);
#line 409 "metalang.met"
                (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 409 "metalang.met"
                if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree0))) 
#line 409 "metalang.met"
                    TOKEN_EXIT(declaration_exit,"IDENT")
#line 409 "metalang.met"
                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 409 "metalang.met"
                ident=_ptRes0;
#line 409 "metalang.met"
            }
#line 409 "metalang.met"
#line 410 "metalang.met"
            if ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(COUV,"[") && (tokenAhead = 0,CommTerm(),1)){
#line 410 "metalang.met"
#line 411 "metalang.met"
#line 412 "metalang.met"
                {
#line 412 "metalang.met"
                    PPTREE _ptTree0;
#line 412 "metalang.met"
                    {
#line 412 "metalang.met"
                        PPTREE _ptTree1,_ptRes1;
#line 412 "metalang.met"
                        _ptRes1= MakeTree(TREE_ARITY, 2);
#line 412 "metalang.met"
                        ReplaceTree(_ptRes1, 1, ident );
#line 412 "metalang.met"
                        {
#line 412 "metalang.met"
                            PPTREE _ptTree2,_ptRes2;
#line 412 "metalang.met"
                            _ptRes2= MakeTree(NUMB, 1);
#line 412 "metalang.met"
                            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 412 "metalang.met"
                            if ( ! TERM_OR_META(NUMB,"NUMB") || !(BUILD_TERM_META(_ptTree2))) 
#line 412 "metalang.met"
                                TOKEN_EXIT(declaration_exit,"NUMB")
#line 412 "metalang.met"
                            ReplaceTree(_ptRes2, 1, _ptTree2);
#line 412 "metalang.met"
                            _ptTree1=_ptRes2;
#line 412 "metalang.met"
                        }
#line 412 "metalang.met"
                        ReplaceTree(_ptRes1, 2, _ptTree1);
#line 412 "metalang.met"
                        _ptTree0=_ptRes1;
#line 412 "metalang.met"
                    }
#line 412 "metalang.met"
                    _addlist2 =AddList(_addlist2 , _ptTree0);
#line 412 "metalang.met"
                }
#line 412 "metalang.met"
#line 412 "metalang.met"
                if (listdec){
#line 412 "metalang.met"
#line 412 "metalang.met"
                    _addlist2 = SonTree (_addlist2 ,2 );
#line 412 "metalang.met"
                } else {
#line 412 "metalang.met"
#line 412 "metalang.met"
                    listdec = _addlist2 ;
#line 412 "metalang.met"
                }
#line 412 "metalang.met"
#line 414 "metalang.met"
                (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 414 "metalang.met"
                if (  !SEE_TOKEN( CFER,"]") || !(CommTerm(),1)) 
#line 414 "metalang.met"
                    TOKEN_EXIT(declaration_exit,"]")
#line 414 "metalang.met"
#line 414 "metalang.met"
#line 414 "metalang.met"
            } else {
#line 414 "metalang.met"
#line 417 "metalang.met"
#line 417 "metalang.met"
                _addlist2 =AddList(_addlist2 ,ident );
#line 417 "metalang.met"
#line 417 "metalang.met"
                if (listdec){
#line 417 "metalang.met"
#line 417 "metalang.met"
                    _addlist2 = SonTree (_addlist2 ,2 );
#line 417 "metalang.met"
                } else {
#line 417 "metalang.met"
#line 417 "metalang.met"
                    listdec = _addlist2 ;
#line 417 "metalang.met"
                }
#line 417 "metalang.met"
            }
#line 417 "metalang.met"
#line 417 "metalang.met"
#line 418 "metalang.met"
        } while ( !(! ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(VIRG,",") && (tokenAhead = 0,CommTerm(),1)))) ;
#line 418 "metalang.met"
#line 419 "metalang.met"
        {
#line 419 "metalang.met"
            PPTREE _ptTree0;
#line 419 "metalang.met"
            {
#line 419 "metalang.met"
                PPTREE _ptRes1;
#line 419 "metalang.met"
                _ptRes1= MakeTree(DECLARE, 1);
#line 419 "metalang.met"
                ReplaceTree(_ptRes1, 1, listdec );
#line 419 "metalang.met"
                _ptTree0=_ptRes1;
#line 419 "metalang.met"
            }
#line 419 "metalang.met"
            list =AddList(list , _ptTree0);
#line 419 "metalang.met"
        }
#line 419 "metalang.met"
#line 420 "metalang.met"
        (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 420 "metalang.met"
        if (  !SEE_TOKEN( PVIR,";") || !(CommTerm(),1)) 
#line 420 "metalang.met"
            TOKEN_EXIT(declaration_exit,";")
#line 420 "metalang.met"
#line 420 "metalang.met"
#line 420 "metalang.met"
    }
#line 420 "metalang.met"
#line 423 "metalang.met"
    debut :
#line 423 "metalang.met"
#line 423 "metalang.met"
    _addlist3 = list ;
#line 423 "metalang.met"
#line 425 "metalang.met"
    do {
#line 425 "metalang.met"
#line 426 "metalang.met"
        if (NPUSH_CALL_AFF_VERIF(pattern = ,_Tak(pattern_rec), 16, metalang)){
#line 426 "metalang.met"
#line 427 "metalang.met"
#line 427 "metalang.met"
            _addlist3 =AddList(_addlist3 ,pattern );
#line 427 "metalang.met"
#line 427 "metalang.met"
            if (list){
#line 427 "metalang.met"
#line 427 "metalang.met"
                _addlist3 = SonTree (_addlist3 ,2 );
#line 427 "metalang.met"
            } else {
#line 427 "metalang.met"
#line 427 "metalang.met"
                list = _addlist3 ;
#line 427 "metalang.met"
            }
#line 427 "metalang.met"
        } else {
#line 427 "metalang.met"
#line 429 "metalang.met"
#line 430 "metalang.met"
            dumperror ();
#line 430 "metalang.met"
#line 432 "metalang.met"
            (tokenAhead == 4|| (LexEndLine(),TRACE_LEX(1)));
#line 432 "metalang.met"
            if ( ! TERM_OR_META(END_LINE,"END_LINE") || !(CommTerm(),1)) 
#line 432 "metalang.met"
                TOKEN_EXIT(declaration_exit,"END_LINE")
#line 432 "metalang.met"
#line 433 "metalang.met"
             hasGotErrorMeta = 1 ;
#line 433 "metalang.met"
#line 434 "metalang.met"
            if (! (c == EOF )){
#line 434 "metalang.met"
#line 435 "metalang.met"
                 goto debut ;
#line 435 "metalang.met"
            }
#line 435 "metalang.met"
#line 435 "metalang.met"
        }
#line 435 "metalang.met"
#line 435 "metalang.met"
#line 437 "metalang.met"
    } while ( !(! ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(PVIR,";") && (tokenAhead = 0,CommTerm(),1)))) ;
#line 437 "metalang.met"
#line 439 "metalang.met"
    ReplaceTree(decTree ,2 ,list );
#line 439 "metalang.met"
#line 442 "metalang.met"
    if (! (NPUSH_CALL_AFF_VERIF(NOTHING,_Tak(end_key), 6, metalang))){
#line 442 "metalang.met"
#line 444 "metalang.met"
#line 445 "metalang.met"
        dumperror ();
#line 445 "metalang.met"
#line 447 "metalang.met"
        (tokenAhead == 4|| (LexEndLine(),TRACE_LEX(1)));
#line 447 "metalang.met"
        if ( ! TERM_OR_META(END_LINE,"END_LINE") || !(CommTerm(),1)) 
#line 447 "metalang.met"
            TOKEN_EXIT(declaration_exit,"END_LINE")
#line 447 "metalang.met"
#line 449 "metalang.met"
        hasGotErrorMeta = 1;
#line 449 "metalang.met"
#line 450 "metalang.met"
        if (! (c == EOF )){
#line 450 "metalang.met"
#line 451 "metalang.met"
            goto debut ;
#line 451 "metalang.met"
        }
#line 451 "metalang.met"
#line 451 "metalang.met"
#line 451 "metalang.met"
    }
#line 451 "metalang.met"
#line 454 "metalang.met"
    {
#line 454 "metalang.met"
        _retValue = decTree ;
#line 454 "metalang.met"
        goto declaration_ret;
#line 454 "metalang.met"
        
#line 454 "metalang.met"
    }
#line 454 "metalang.met"
#line 455 "metalang.met"
(tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 455 "metalang.met"
if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,(PPTREE) 0,lastTree); else {_lastTree=(PPTREE)0;_funcLevel--;}
#line 455 "metalang.met"
return((PPTREE) 0);
#line 455 "metalang.met"

#line 455 "metalang.met"
declaration_exit :
#line 455 "metalang.met"

#line 455 "metalang.met"
    {
#line 455 "metalang.met"
        MulFreeTree(8,ident,pattern,decTree,listdec,list,_addlist3,_addlist2,_addlist1);
#line 455 "metalang.met"
    }
#line 455 "metalang.met"
    _Debug = TRACE_RULE("declaration",TRACE_EXIT,(PPTREE)0);
#line 455 "metalang.met"
    _funcLevel--;
#line 455 "metalang.met"
    return((PPTREE) -1) ;
#line 455 "metalang.met"

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

#line 455 "metalang.met"
#line 288 "metalang.met"
PPTREE metalang::definition ( int error_free)
#line 288 "metalang.met"
{
#line 288 "metalang.met"
    int  _oldcDef = cDef;
#line 288 "metalang.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 288 "metalang.met"
    int _value,_nbPre = 0 ;
#line 288 "metalang.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 288 "metalang.met"
    int _Debug = TRACE_RULE("definition",TRACE_ENTER,(PPTREE)0);
#line 288 "metalang.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 288 "metalang.met"
#line 288 "metalang.met"
    PPTREE _addlist1 = (PPTREE) 0,_addlist2 = (PPTREE) 0,_addlist3 = (PPTREE) 0;
#line 288 "metalang.met"
#line 288 "metalang.met"
    PPTREE list = (PPTREE) 0,listcons = (PPTREE) 0,listskip = (PPTREE) 0,defTree = (PPTREE) 0,pattern = (PPTREE) 0;
#line 288 "metalang.met"
#line 290 "metalang.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 290 "metalang.met"
    if (  !SEE_TOKEN( LEXDEFINE,"lexdefine") || !(CommTerm(),1)) 
#line 290 "metalang.met"
        TOKEN_EXIT(definition_exit,"lexdefine")
#line 290 "metalang.met"
#line 291 "metalang.met"
    {
#line 291 "metalang.met"
        cDef = 1 ;
#line 291 "metalang.met"
#line 292 "metalang.met"
#line 293 "metalang.met"
        {
#line 293 "metalang.met"
            PPTREE _ptTree0,_ptRes0;
#line 293 "metalang.met"
            _ptRes0= MakeTree(LEXDEFINE, 4);
#line 293 "metalang.met"
            {
#line 293 "metalang.met"
                PPTREE _ptTree1,_ptRes1;
#line 293 "metalang.met"
                _ptRes1= MakeTree(IDENT, 1);
#line 293 "metalang.met"
                (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 293 "metalang.met"
                if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 293 "metalang.met"
                    TOKEN_EXIT(definition_exit,"IDENT")
#line 293 "metalang.met"
                ReplaceTree(_ptRes1, 1, _ptTree1);
#line 293 "metalang.met"
                _ptTree0=_ptRes1;
#line 293 "metalang.met"
            }
#line 293 "metalang.met"
            ReplaceTree(_ptRes0, 1, _ptTree0);
#line 293 "metalang.met"
            defTree=_ptRes0;
#line 293 "metalang.met"
        }
#line 293 "metalang.met"
#line 294 "metalang.met"
        (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 294 "metalang.met"
        if (  !SEE_TOKEN( PVIR,";") || !(CommTerm(),1)) 
#line 294 "metalang.met"
            TOKEN_EXIT(definition_exit,";")
#line 294 "metalang.met"
#line 295 "metalang.met"
        ReplaceTree(defTree,3,MakeString(theFileName));
#line 295 "metalang.met"
#line 296 "metalang.met"
        if ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(CONSTANT,"constant") && (tokenAhead = 0,CommTerm(),1)){
#line 296 "metalang.met"
#line 297 "metalang.met"
#line 297 "metalang.met"
            _addlist1 = listcons ;
#line 297 "metalang.met"
#line 298 "metalang.met"
            do {
#line 298 "metalang.met"
#line 299 "metalang.met"
                {
#line 299 "metalang.met"
                    PPTREE _ptTree0;
#line 299 "metalang.met"
                    {
#line 299 "metalang.met"
                        PPTREE _ptTree1,_ptRes1;
#line 299 "metalang.met"
                        _ptRes1= MakeTree(IDENT, 1);
#line 299 "metalang.met"
                        (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 299 "metalang.met"
                        if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 299 "metalang.met"
                            TOKEN_EXIT(definition_exit,"IDENT")
#line 299 "metalang.met"
                        ReplaceTree(_ptRes1, 1, _ptTree1);
#line 299 "metalang.met"
                        _ptTree0=_ptRes1;
#line 299 "metalang.met"
                    }
#line 299 "metalang.met"
                    _addlist1 =AddList(_addlist1 , _ptTree0);
#line 299 "metalang.met"
                }
#line 299 "metalang.met"
#line 299 "metalang.met"
                if (listcons){
#line 299 "metalang.met"
#line 299 "metalang.met"
                    _addlist1 = SonTree (_addlist1 ,2 );
#line 299 "metalang.met"
                } else {
#line 299 "metalang.met"
#line 299 "metalang.met"
                    listcons = _addlist1 ;
#line 299 "metalang.met"
                }
#line 299 "metalang.met"
#line 300 "metalang.met"
            } while ( !(! ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(VIRG,",") && (tokenAhead = 0,CommTerm(),1)))) ;
#line 300 "metalang.met"
#line 301 "metalang.met"
            {
#line 301 "metalang.met"
                PPTREE _ptTree0;
#line 301 "metalang.met"
                {
#line 301 "metalang.met"
                    PPTREE _ptRes1;
#line 301 "metalang.met"
                    _ptRes1= MakeTree(CONSTANT, 1);
#line 301 "metalang.met"
                    ReplaceTree(_ptRes1, 1, listcons );
#line 301 "metalang.met"
                    _ptTree0=_ptRes1;
#line 301 "metalang.met"
                }
#line 301 "metalang.met"
                list =AddList(list , _ptTree0);
#line 301 "metalang.met"
            }
#line 301 "metalang.met"
#line 302 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 302 "metalang.met"
            if (  !SEE_TOKEN( PVIR,";") || !(CommTerm(),1)) 
#line 302 "metalang.met"
                TOKEN_EXIT(definition_exit,";")
#line 302 "metalang.met"
#line 302 "metalang.met"
#line 302 "metalang.met"
        }
#line 302 "metalang.met"
#line 304 "metalang.met"
        if ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(SKIP,"skip") && (tokenAhead = 0,CommTerm(),1)){
#line 304 "metalang.met"
#line 305 "metalang.met"
#line 305 "metalang.met"
            _addlist2 = listskip ;
#line 305 "metalang.met"
#line 306 "metalang.met"
            do {
#line 306 "metalang.met"
#line 307 "metalang.met"
                if ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN( COUV,"[")){
#line 307 "metalang.met"
#line 308 "metalang.met"
#line 308 "metalang.met"
                    {
#line 308 "metalang.met"
                        PPTREE _ptTree0;
#line 308 "metalang.met"
                        if ( (_ptTree0=NQUICK_CALL(_Tak(set)(error_free), 19, metalang))== (PPTREE) -1 ) {
#line 308 "metalang.met"
                            PROG_EXIT(definition_exit,"definition")
#line 308 "metalang.met"
                        }
#line 308 "metalang.met"
                        _addlist2 =AddList(_addlist2 , _ptTree0);
#line 308 "metalang.met"
                    }
#line 308 "metalang.met"
#line 308 "metalang.met"
                    if (listskip){
#line 308 "metalang.met"
#line 308 "metalang.met"
                        _addlist2 = SonTree (_addlist2 ,2 );
#line 308 "metalang.met"
                    } else {
#line 308 "metalang.met"
#line 308 "metalang.met"
                        listskip = _addlist2 ;
#line 308 "metalang.met"
                    }
#line 308 "metalang.met"
                } else {
#line 308 "metalang.met"
#line 310 "metalang.met"
#line 310 "metalang.met"
                    {
#line 310 "metalang.met"
                        PPTREE _ptTree0;
#line 310 "metalang.met"
                        {
#line 310 "metalang.met"
                            PPTREE _ptTree1,_ptRes1;
#line 310 "metalang.met"
                            _ptRes1= MakeTree(CHARACTER, 1);
#line 310 "metalang.met"
                            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 310 "metalang.met"
                            if ( ! TERM_OR_META(CHARACTER,"CHARACTER") || !(BUILD_TERM_META(_ptTree1))) 
#line 310 "metalang.met"
                                TOKEN_EXIT(definition_exit,"CHARACTER")
#line 310 "metalang.met"
                            ReplaceTree(_ptRes1, 1, _ptTree1);
#line 310 "metalang.met"
                            _ptTree0=_ptRes1;
#line 310 "metalang.met"
                        }
#line 310 "metalang.met"
                        _addlist2 =AddList(_addlist2 , _ptTree0);
#line 310 "metalang.met"
                    }
#line 310 "metalang.met"
#line 310 "metalang.met"
                    if (listskip){
#line 310 "metalang.met"
#line 310 "metalang.met"
                        _addlist2 = SonTree (_addlist2 ,2 );
#line 310 "metalang.met"
                    } else {
#line 310 "metalang.met"
#line 310 "metalang.met"
                        listskip = _addlist2 ;
#line 310 "metalang.met"
                    }
#line 310 "metalang.met"
                }
#line 310 "metalang.met"
#line 311 "metalang.met"
            } while ( !(! ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(VIRG,",") && (tokenAhead = 0,CommTerm(),1)))) ;
#line 311 "metalang.met"
#line 312 "metalang.met"
            {
#line 312 "metalang.met"
                PPTREE _ptTree0;
#line 312 "metalang.met"
                {
#line 312 "metalang.met"
                    PPTREE _ptRes1;
#line 312 "metalang.met"
                    _ptRes1= MakeTree(SKIP, 1);
#line 312 "metalang.met"
                    ReplaceTree(_ptRes1, 1, listskip );
#line 312 "metalang.met"
                    _ptTree0=_ptRes1;
#line 312 "metalang.met"
                }
#line 312 "metalang.met"
                list =AddList(list , _ptTree0);
#line 312 "metalang.met"
            }
#line 312 "metalang.met"
#line 313 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 313 "metalang.met"
            if (  !SEE_TOKEN( PVIR,";") || !(CommTerm(),1)) 
#line 313 "metalang.met"
                TOKEN_EXIT(definition_exit,";")
#line 313 "metalang.met"
#line 313 "metalang.met"
#line 313 "metalang.met"
        }
#line 313 "metalang.met"
#line 315 "metalang.met"
        debut :
#line 315 "metalang.met"
#line 315 "metalang.met"
        _addlist3 = list ;
#line 315 "metalang.met"
#line 316 "metalang.met"
        do {
#line 316 "metalang.met"
#line 317 "metalang.met"
            if (NPUSH_CALL_AFF_VERIF(pattern = ,_Tak(pattern_rec), 16, metalang)){
#line 317 "metalang.met"
#line 318 "metalang.met"
#line 318 "metalang.met"
                _addlist3 =AddList(_addlist3 ,pattern );
#line 318 "metalang.met"
#line 318 "metalang.met"
                if (list){
#line 318 "metalang.met"
#line 318 "metalang.met"
                    _addlist3 = SonTree (_addlist3 ,2 );
#line 318 "metalang.met"
                } else {
#line 318 "metalang.met"
#line 318 "metalang.met"
                    list = _addlist3 ;
#line 318 "metalang.met"
                }
#line 318 "metalang.met"
            } else {
#line 318 "metalang.met"
#line 320 "metalang.met"
#line 321 "metalang.met"
                dumperror ();
#line 321 "metalang.met"
#line 323 "metalang.met"
                (tokenAhead == 4|| (LexEndLine(),TRACE_LEX(1)));
#line 323 "metalang.met"
                if ( ! TERM_OR_META(END_LINE,"END_LINE") || !(CommTerm(),1)) 
#line 323 "metalang.met"
                    TOKEN_EXIT(definition_exit,"END_LINE")
#line 323 "metalang.met"
#line 324 "metalang.met"
                 hasGotErrorMeta = 1 ;
#line 324 "metalang.met"
#line 325 "metalang.met"
                if (! (c == EOF )){
#line 325 "metalang.met"
#line 326 "metalang.met"
                     goto debut ;
#line 326 "metalang.met"
                }
#line 326 "metalang.met"
#line 326 "metalang.met"
            }
#line 326 "metalang.met"
#line 326 "metalang.met"
#line 328 "metalang.met"
        } while ( !(! ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(PVIR,";") && (tokenAhead = 0,CommTerm(),1)))) ;
#line 328 "metalang.met"
#line 329 "metalang.met"
        ReplaceTree(defTree ,2 ,list );
#line 329 "metalang.met"
#line 332 "metalang.met"
        if (! (NPUSH_CALL_AFF_VERIF(pattern = ,_Tak(end_key), 6, metalang))){
#line 332 "metalang.met"
#line 334 "metalang.met"
#line 335 "metalang.met"
            dumperror ();
#line 335 "metalang.met"
#line 337 "metalang.met"
            (tokenAhead == 4|| (LexEndLine(),TRACE_LEX(1)));
#line 337 "metalang.met"
            if ( ! TERM_OR_META(END_LINE,"END_LINE") || !(CommTerm(),1)) 
#line 337 "metalang.met"
                TOKEN_EXIT(definition_exit,"END_LINE")
#line 337 "metalang.met"
#line 339 "metalang.met"
            hasGotErrorMeta = 1 ;
#line 339 "metalang.met"
#line 340 "metalang.met"
            if (! (c == EOF )){
#line 340 "metalang.met"
#line 341 "metalang.met"
                goto debut ;
#line 341 "metalang.met"
            }
#line 341 "metalang.met"
#line 341 "metalang.met"
#line 341 "metalang.met"
        }
#line 341 "metalang.met"
#line 341 "metalang.met"
        cDef =  _oldcDef;
#line 341 "metalang.met"
    }
#line 341 "metalang.met"
#line 344 "metalang.met"
    {
#line 344 "metalang.met"
        _retValue = defTree ;
#line 344 "metalang.met"
        goto definition_ret;
#line 344 "metalang.met"
        
#line 344 "metalang.met"
    }
#line 344 "metalang.met"
#line 345 "metalang.met"
(tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 345 "metalang.met"
if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,(PPTREE) 0,lastTree); else {_lastTree=(PPTREE)0;_funcLevel--;}
#line 345 "metalang.met"
cDef =  _oldcDef;
#line 345 "metalang.met"
return((PPTREE) 0);
#line 345 "metalang.met"

#line 345 "metalang.met"
definition_exit :
#line 345 "metalang.met"

#line 345 "metalang.met"
    {
#line 345 "metalang.met"
        MulFreeTree(8,pattern,defTree,listskip,listcons,list,_addlist3,_addlist2,_addlist1);
#line 345 "metalang.met"
    }
#line 345 "metalang.met"
    _Debug = TRACE_RULE("definition",TRACE_EXIT,(PPTREE)0);
#line 345 "metalang.met"
    _funcLevel--;
#line 345 "metalang.met"
    cDef =  _oldcDef;
#line 345 "metalang.met"
    return((PPTREE) -1) ;
#line 345 "metalang.met"

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

#line 345 "metalang.met"
#line 347 "metalang.met"
PPTREE metalang::end_key ( int error_free)
#line 347 "metalang.met"
{
#line 347 "metalang.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 347 "metalang.met"
    int _value,_nbPre = 0 ;
#line 347 "metalang.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 347 "metalang.met"
    int _Debug = TRACE_RULE("end_key",TRACE_ENTER,(PPTREE)0);
#line 347 "metalang.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 347 "metalang.met"
#line 348 "metalang.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 348 "metalang.met"
    if (  !SEE_TOKEN( END,"end") || !(CommTerm(),1)) 
#line 348 "metalang.met"
        TOKEN_EXIT(end_key_exit,"end")
#line 348 "metalang.met"
#line 348 "metalang.met"
#line 348 "metalang.met"

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

#line 349 "metalang.met"
end_key_exit :
#line 349 "metalang.met"

#line 349 "metalang.met"
    _Debug = TRACE_RULE("end_key",TRACE_EXIT,(PPTREE)0);
#line 349 "metalang.met"
    _funcLevel--;
#line 349 "metalang.met"
    return((PPTREE) -1) ;
#line 349 "metalang.met"

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

#line 349 "metalang.met"
#line 715 "metalang.met"
PPTREE metalang::expr ( int error_free)
#line 715 "metalang.met"
{
#line 715 "metalang.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 715 "metalang.met"
    int _value,_nbPre = 0 ;
#line 715 "metalang.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 715 "metalang.met"
    int _Debug = TRACE_RULE("expr",TRACE_ENTER,(PPTREE)0);
#line 715 "metalang.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 715 "metalang.met"
#line 716 "metalang.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 716 "metalang.met"
    switch( lexEl.Value) {
#line 716 "metalang.met"
#line 717 "metalang.met"
        case META : 
#line 717 "metalang.met"
        case IDENT : 
#line 717 "metalang.met"
#line 717 "metalang.met"
            {
#line 717 "metalang.met"
                PPTREE _ptTree0;
#line 717 "metalang.met"
                {
#line 717 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 717 "metalang.met"
                    _ptRes1= MakeTree(IDENT, 1);
#line 717 "metalang.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 717 "metalang.met"
                    if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 717 "metalang.met"
                        TOKEN_EXIT(expr_exit,"IDENT")
#line 717 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 717 "metalang.met"
                    _ptTree0=_ptRes1;
#line 717 "metalang.met"
                }
#line 717 "metalang.met"
                _retValue =_ptTree0;
#line 717 "metalang.met"
                goto expr_ret;
#line 717 "metalang.met"
            }
#line 717 "metalang.met"
            break;
#line 717 "metalang.met"
#line 718 "metalang.met"
        case NUMB : 
#line 718 "metalang.met"
#line 718 "metalang.met"
            {
#line 718 "metalang.met"
                PPTREE _ptTree0;
#line 718 "metalang.met"
                {
#line 718 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 718 "metalang.met"
                    _ptRes1= MakeTree(NUMB, 1);
#line 718 "metalang.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 718 "metalang.met"
                    if ( ! TERM_OR_META(NUMB,"NUMB") || !(BUILD_TERM_META(_ptTree1))) 
#line 718 "metalang.met"
                        TOKEN_EXIT(expr_exit,"NUMB")
#line 718 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 718 "metalang.met"
                    _ptTree0=_ptRes1;
#line 718 "metalang.met"
                }
#line 718 "metalang.met"
                _retValue =_ptTree0;
#line 718 "metalang.met"
                goto expr_ret;
#line 718 "metalang.met"
            }
#line 718 "metalang.met"
            break;
#line 718 "metalang.met"
        default :
#line 718 "metalang.met"
            CASE_EXIT(expr_exit,"either IDENT or NUMB")
#line 718 "metalang.met"
            break;
#line 718 "metalang.met"
    }
#line 718 "metalang.met"
#line 720 "metalang.met"
(tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 720 "metalang.met"
if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,(PPTREE) 0,lastTree); else {_lastTree=(PPTREE)0;_funcLevel--;}
#line 720 "metalang.met"
return((PPTREE) 0);
#line 720 "metalang.met"

#line 720 "metalang.met"
expr_exit :
#line 720 "metalang.met"

#line 720 "metalang.met"
    _Debug = TRACE_RULE("expr",TRACE_EXIT,(PPTREE)0);
#line 720 "metalang.met"
    _funcLevel--;
#line 720 "metalang.met"
    return((PPTREE) -1) ;
#line 720 "metalang.met"

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

#line 720 "metalang.met"
#line 762 "metalang.met"
PPTREE metalang::func_call ( int error_free)
#line 762 "metalang.met"
{
#line 762 "metalang.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 762 "metalang.met"
    int _value,_nbPre = 0 ;
#line 762 "metalang.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 762 "metalang.met"
    int _Debug = TRACE_RULE("func_call",TRACE_ENTER,(PPTREE)0);
#line 762 "metalang.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 762 "metalang.met"
#line 762 "metalang.met"
    PPTREE retTree = (PPTREE) 0;
#line 762 "metalang.met"
#line 764 "metalang.met"
    {
#line 764 "metalang.met"
        PPTREE _ptTree0,_ptRes0;
#line 764 "metalang.met"
        _ptRes0= MakeTree(FUNC, 2);
#line 764 "metalang.met"
        {
#line 764 "metalang.met"
            PPTREE _ptTree1,_ptRes1;
#line 764 "metalang.met"
            _ptRes1= MakeTree(IDENT, 1);
#line 764 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 764 "metalang.met"
            if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 764 "metalang.met"
                TOKEN_EXIT(func_call_exit,"IDENT")
#line 764 "metalang.met"
            ReplaceTree(_ptRes1, 1, _ptTree1);
#line 764 "metalang.met"
            _ptTree0=_ptRes1;
#line 764 "metalang.met"
        }
#line 764 "metalang.met"
        ReplaceTree(_ptRes0, 1, _ptTree0);
#line 764 "metalang.met"
        retTree=_ptRes0;
#line 764 "metalang.met"
    }
#line 764 "metalang.met"
#line 765 "metalang.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 765 "metalang.met"
    if (  !SEE_TOKEN( POUV,"(") || !(CommTerm(),1)) 
#line 765 "metalang.met"
        TOKEN_EXIT(func_call_exit,"(")
#line 765 "metalang.met"
#line 766 "metalang.met"
    {
#line 766 "metalang.met"
        PPTREE _ptTree0;
#line 766 "metalang.met"
        if ( (_ptTree0=NQUICK_CALL(_Tak(func_follow)(error_free), 9, metalang))== (PPTREE) -1 ) {
#line 766 "metalang.met"
            PROG_EXIT(func_call_exit,"func_call")
#line 766 "metalang.met"
        }
#line 766 "metalang.met"
        ReplaceTree(retTree , 2 , _ptTree0);
#line 766 "metalang.met"
    }
#line 766 "metalang.met"
#line 767 "metalang.met"
    {
#line 767 "metalang.met"
        _retValue = retTree ;
#line 767 "metalang.met"
        goto func_call_ret;
#line 767 "metalang.met"
        
#line 767 "metalang.met"
    }
#line 767 "metalang.met"
#line 767 "metalang.met"
#line 767 "metalang.met"

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

#line 768 "metalang.met"
func_call_exit :
#line 768 "metalang.met"

#line 768 "metalang.met"
    {
#line 768 "metalang.met"
        MulFreeTree(1,retTree);
#line 768 "metalang.met"
    }
#line 768 "metalang.met"
    _Debug = TRACE_RULE("func_call",TRACE_EXIT,(PPTREE)0);
#line 768 "metalang.met"
    _funcLevel--;
#line 768 "metalang.met"
    return((PPTREE) -1) ;
#line 768 "metalang.met"

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

#line 768 "metalang.met"
#line 770 "metalang.met"
PPTREE metalang::func_follow ( int error_free)
#line 770 "metalang.met"
{
#line 770 "metalang.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 770 "metalang.met"
    int _value,_nbPre = 0 ;
#line 770 "metalang.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 770 "metalang.met"
    int _Debug = TRACE_RULE("func_follow",TRACE_ENTER,(PPTREE)0);
#line 770 "metalang.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 770 "metalang.met"
#line 770 "metalang.met"
    PPTREE _addlist1 = (PPTREE) 0;
#line 770 "metalang.met"
#line 770 "metalang.met"
    PPTREE list = (PPTREE) 0,switchTree = (PPTREE) 0;
#line 770 "metalang.met"
#line 770 "metalang.met"
    _addlist1 = list ;
#line 770 "metalang.met"
#line 772 "metalang.met"
    while (! ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(PFER,")") && (tokenAhead = 0,CommTerm(),1))) { 
#line 772 "metalang.met"
#line 773 "metalang.met"
#line 774 "metalang.met"
        (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 774 "metalang.met"
        switch( lexEl.Value) {
#line 774 "metalang.met"
#line 776 "metalang.met"
            case DIES : 
#line 776 "metalang.met"
                tokenAhead = 0 ;
#line 776 "metalang.met"
                CommTerm();
#line 776 "metalang.met"
#line 776 "metalang.met"
                {
#line 776 "metalang.met"
                    PPTREE _ptTree0,_ptRes0;
#line 776 "metalang.met"
                    _ptRes0= MakeTree(TOKEN, 1);
#line 776 "metalang.met"
                    {
#line 776 "metalang.met"
                        PPTREE _ptTree1,_ptRes1;
#line 776 "metalang.met"
                        _ptRes1= MakeTree(STRING, 1);
#line 776 "metalang.met"
                        (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 776 "metalang.met"
                        if ( ! TERM_OR_META(STRING,"STRING") || !(BUILD_TERM_META(_ptTree1))) 
#line 776 "metalang.met"
                            TOKEN_EXIT(func_follow_exit,"STRING")
#line 776 "metalang.met"
                        ReplaceTree(_ptRes1, 1, _ptTree1);
#line 776 "metalang.met"
                        _ptTree0=_ptRes1;
#line 776 "metalang.met"
                    }
#line 776 "metalang.met"
                    ReplaceTree(_ptRes0, 1, _ptTree0);
#line 776 "metalang.met"
                    switchTree=_ptRes0;
#line 776 "metalang.met"
                }
#line 776 "metalang.met"
                break;
#line 776 "metalang.met"
#line 778 "metalang.met"
            case EXCL : 
#line 778 "metalang.met"
                tokenAhead = 0 ;
#line 778 "metalang.met"
                CommTerm();
#line 778 "metalang.met"
#line 778 "metalang.met"
                {
#line 778 "metalang.met"
                    PPTREE _ptTree0,_ptRes0;
#line 778 "metalang.met"
                    _ptRes0= MakeTree(EXCLA, 1);
#line 778 "metalang.met"
                    {
#line 778 "metalang.met"
                        PPTREE _ptTree1,_ptRes1;
#line 778 "metalang.met"
                        _ptRes1= MakeTree(IDENT, 1);
#line 778 "metalang.met"
                        (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 778 "metalang.met"
                        if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 778 "metalang.met"
                            TOKEN_EXIT(func_follow_exit,"IDENT")
#line 778 "metalang.met"
                        ReplaceTree(_ptRes1, 1, _ptTree1);
#line 778 "metalang.met"
                        _ptTree0=_ptRes1;
#line 778 "metalang.met"
                    }
#line 778 "metalang.met"
                    ReplaceTree(_ptRes0, 1, _ptTree0);
#line 778 "metalang.met"
                    switchTree=_ptRes0;
#line 778 "metalang.met"
                }
#line 778 "metalang.met"
                break;
#line 778 "metalang.met"
#line 779 "metalang.met"
            case META : 
#line 779 "metalang.met"
            case STRING : 
#line 779 "metalang.met"
#line 780 "metalang.met"
                {
#line 780 "metalang.met"
                    PPTREE _ptTree0,_ptRes0;
#line 780 "metalang.met"
                    _ptRes0= MakeTree(STRING, 1);
#line 780 "metalang.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 780 "metalang.met"
                    if ( ! TERM_OR_META(STRING,"STRING") || !(BUILD_TERM_META(_ptTree0))) 
#line 780 "metalang.met"
                        TOKEN_EXIT(func_follow_exit,"STRING")
#line 780 "metalang.met"
                    ReplaceTree(_ptRes0, 1, _ptTree0);
#line 780 "metalang.met"
                    switchTree=_ptRes0;
#line 780 "metalang.met"
                }
#line 780 "metalang.met"
                break;
#line 780 "metalang.met"
#line 782 "metalang.met"
            default : 
#line 782 "metalang.met"
#line 782 "metalang.met"
                if ( (switchTree=NQUICK_CALL(_Tak(expr)(error_free), 7, metalang))== (PPTREE) -1 ) {
#line 782 "metalang.met"
                    PROG_EXIT(func_follow_exit,"func_follow")
#line 782 "metalang.met"
                }
#line 782 "metalang.met"
                break;
#line 782 "metalang.met"
        }
#line 782 "metalang.met"
#line 784 "metalang.met"
        _addlist1 =AddList(_addlist1 ,switchTree );
#line 784 "metalang.met"
#line 784 "metalang.met"
        if (list){
#line 784 "metalang.met"
#line 784 "metalang.met"
            _addlist1 = SonTree (_addlist1 ,2 );
#line 784 "metalang.met"
        } else {
#line 784 "metalang.met"
#line 784 "metalang.met"
            list = _addlist1 ;
#line 784 "metalang.met"
        }
#line 784 "metalang.met"
#line 785 "metalang.met"
        if ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN( VIRG,",")){
#line 785 "metalang.met"
#line 785 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 785 "metalang.met"
            if (  !SEE_TOKEN( VIRG,",") || !(CommTerm(),1)) 
#line 785 "metalang.met"
                TOKEN_EXIT(func_follow_exit,",")
#line 785 "metalang.met"
        }
#line 785 "metalang.met"
    } 
#line 785 "metalang.met"
#line 787 "metalang.met"
    {
#line 787 "metalang.met"
        _retValue = list ;
#line 787 "metalang.met"
        goto func_follow_ret;
#line 787 "metalang.met"
        
#line 787 "metalang.met"
    }
#line 787 "metalang.met"
#line 787 "metalang.met"
#line 787 "metalang.met"

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

#line 788 "metalang.met"
func_follow_exit :
#line 788 "metalang.met"

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

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

#line 788 "metalang.met"
#line 799 "metalang.met"
PPTREE metalang::gen_param ( int error_free)
#line 799 "metalang.met"
{
#line 799 "metalang.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 799 "metalang.met"
    int _value,_nbPre = 0 ;
#line 799 "metalang.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 799 "metalang.met"
    int _Debug = TRACE_RULE("gen_param",TRACE_ENTER,(PPTREE)0);
#line 799 "metalang.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 799 "metalang.met"
#line 799 "metalang.met"
    PPTREE switchTree = (PPTREE) 0,ident = (PPTREE) 0,list = (PPTREE) 0;
#line 799 "metalang.met"
#line 801 "metalang.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 801 "metalang.met"
    switch( lexEl.Value) {
#line 801 "metalang.met"
#line 804 "metalang.met"
        case POUV : 
#line 804 "metalang.met"
            tokenAhead = 0 ;
#line 804 "metalang.met"
            CommTerm();
#line 804 "metalang.met"
#line 803 "metalang.met"
#line 804 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 804 "metalang.met"
            if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 804 "metalang.met"
                TOKEN_EXIT(gen_param_exit,")")
#line 804 "metalang.met"
#line 805 "metalang.met"
            {
#line 805 "metalang.met"
                PPTREE _ptRes0;
#line 805 "metalang.met"
                _ptRes0= MakeTree(NIL, 0);
#line 805 "metalang.met"
                switchTree=_ptRes0;
#line 805 "metalang.met"
            }
#line 805 "metalang.met"
            break;
#line 805 "metalang.met"
#line 807 "metalang.met"
        case TAKE : 
#line 807 "metalang.met"
            tokenAhead = 0 ;
#line 807 "metalang.met"
            CommTerm();
#line 807 "metalang.met"
#line 808 "metalang.met"
            if ( (switchTree=NQUICK_CALL(_Tak(take_follow)(error_free), 21, metalang))== (PPTREE) -1 ) {
#line 808 "metalang.met"
                PROG_EXIT(gen_param_exit,"gen_param")
#line 808 "metalang.met"
            }
#line 808 "metalang.met"
            break;
#line 808 "metalang.met"
#line 809 "metalang.met"
        case STRINGLEX : 
#line 809 "metalang.met"
            tokenAhead = 0 ;
#line 809 "metalang.met"
            CommTerm();
#line 809 "metalang.met"
#line 810 "metalang.met"
            {
#line 810 "metalang.met"
                PPTREE _ptRes0;
#line 810 "metalang.met"
                _ptRes0= MakeTree(STRINGLEX, 0);
#line 810 "metalang.met"
                switchTree=_ptRes0;
#line 810 "metalang.met"
            }
#line 810 "metalang.met"
            break;
#line 810 "metalang.met"
#line 811 "metalang.met"
        case META : 
#line 811 "metalang.met"
        case IDENT : 
#line 811 "metalang.met"
#line 812 "metalang.met"
#line 813 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 813 "metalang.met"
            if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(ident))) 
#line 813 "metalang.met"
                TOKEN_EXIT(gen_param_exit,"IDENT")
#line 813 "metalang.met"
#line 814 "metalang.met"
            if (! ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN( POUV,"("))){
#line 814 "metalang.met"
#line 815 "metalang.met"
                {
#line 815 "metalang.met"
                    PPTREE _ptRes0;
#line 815 "metalang.met"
                    _ptRes0= MakeTree(IDENT, 1);
#line 815 "metalang.met"
                    ReplaceTree(_ptRes0, 1, ident );
#line 815 "metalang.met"
                    switchTree=_ptRes0;
#line 815 "metalang.met"
                }
#line 815 "metalang.met"
            } else {
#line 815 "metalang.met"
#line 817 "metalang.met"
#line 818 "metalang.met"
                (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 818 "metalang.met"
                if (  !SEE_TOKEN( POUV,"(") || !(CommTerm(),1)) 
#line 818 "metalang.met"
                    TOKEN_EXIT(gen_param_exit,"(")
#line 818 "metalang.met"
#line 819 "metalang.met"
                {
#line 819 "metalang.met"
                    PPTREE _ptTree0,_ptRes0;
#line 819 "metalang.met"
                    _ptRes0= MakeTree(FUNC, 2);
#line 819 "metalang.met"
                    {
#line 819 "metalang.met"
                        PPTREE _ptRes1;
#line 819 "metalang.met"
                        _ptRes1= MakeTree(IDENT, 1);
#line 819 "metalang.met"
                        ReplaceTree(_ptRes1, 1, ident );
#line 819 "metalang.met"
                        _ptTree0=_ptRes1;
#line 819 "metalang.met"
                    }
#line 819 "metalang.met"
                    ReplaceTree(_ptRes0, 1, _ptTree0);
#line 819 "metalang.met"
                    if ( (_ptTree0=NQUICK_CALL(_Tak(func_follow)(error_free), 9, metalang))== (PPTREE) -1 ) {
#line 819 "metalang.met"
                        PROG_EXIT(gen_param_exit,"gen_param")
#line 819 "metalang.met"
                    }
#line 819 "metalang.met"
                    ReplaceTree(_ptRes0, 2, _ptTree0);
#line 819 "metalang.met"
                    switchTree=_ptRes0;
#line 819 "metalang.met"
                }
#line 819 "metalang.met"
#line 819 "metalang.met"
            }
#line 819 "metalang.met"
            break;
#line 819 "metalang.met"
#line 823 "metalang.met"
        case MAKETREE : 
#line 823 "metalang.met"
            tokenAhead = 0 ;
#line 823 "metalang.met"
            CommTerm();
#line 823 "metalang.met"
#line 824 "metalang.met"
#line 825 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 825 "metalang.met"
            if (  !SEE_TOKEN( POUV,"(") || !(CommTerm(),1)) 
#line 825 "metalang.met"
                TOKEN_EXIT(gen_param_exit,"(")
#line 825 "metalang.met"
#line 826 "metalang.met"
            {
#line 826 "metalang.met"
                PPTREE _ptTree0,_ptRes0;
#line 826 "metalang.met"
                _ptRes0= MakeTree(MAKETREE, 1);
#line 826 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(maketree_follow)(error_free), 13, metalang))== (PPTREE) -1 ) {
#line 826 "metalang.met"
                    PROG_EXIT(gen_param_exit,"gen_param")
#line 826 "metalang.met"
                }
#line 826 "metalang.met"
                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 826 "metalang.met"
                switchTree=_ptRes0;
#line 826 "metalang.met"
            }
#line 826 "metalang.met"
#line 826 "metalang.met"
            break;
#line 826 "metalang.met"
#line 828 "metalang.met"
        case REPLACETREE : 
#line 828 "metalang.met"
            tokenAhead = 0 ;
#line 828 "metalang.met"
            CommTerm();
#line 828 "metalang.met"
#line 829 "metalang.met"
#line 830 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 830 "metalang.met"
            if (  !SEE_TOKEN( POUV,"(") || !(CommTerm(),1)) 
#line 830 "metalang.met"
                TOKEN_EXIT(gen_param_exit,"(")
#line 830 "metalang.met"
#line 831 "metalang.met"
            {
#line 831 "metalang.met"
                PPTREE _ptTree0;
#line 831 "metalang.met"
                {
#line 831 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 831 "metalang.met"
                    _ptRes1= MakeTree(IDENT, 1);
#line 831 "metalang.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 831 "metalang.met"
                    if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 831 "metalang.met"
                        TOKEN_EXIT(gen_param_exit,"IDENT")
#line 831 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 831 "metalang.met"
                    _ptTree0=_ptRes1;
#line 831 "metalang.met"
                }
#line 831 "metalang.met"
                list =AddList(list , _ptTree0);
#line 831 "metalang.met"
            }
#line 831 "metalang.met"
#line 832 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 832 "metalang.met"
            if (  !SEE_TOKEN( VIRG,",") || !(CommTerm(),1)) 
#line 832 "metalang.met"
                TOKEN_EXIT(gen_param_exit,",")
#line 832 "metalang.met"
#line 833 "metalang.met"
            {
#line 833 "metalang.met"
                PPTREE _ptTree0;
#line 833 "metalang.met"
                {
#line 833 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 833 "metalang.met"
                    _ptRes1= MakeTree(NUMB, 1);
#line 833 "metalang.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 833 "metalang.met"
                    if ( ! TERM_OR_META(NUMB,"NUMB") || !(BUILD_TERM_META(_ptTree1))) 
#line 833 "metalang.met"
                        TOKEN_EXIT(gen_param_exit,"NUMB")
#line 833 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 833 "metalang.met"
                    _ptTree0=_ptRes1;
#line 833 "metalang.met"
                }
#line 833 "metalang.met"
                list =AddList(list , _ptTree0);
#line 833 "metalang.met"
            }
#line 833 "metalang.met"
#line 834 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 834 "metalang.met"
            if (  !SEE_TOKEN( VIRG,",") || !(CommTerm(),1)) 
#line 834 "metalang.met"
                TOKEN_EXIT(gen_param_exit,",")
#line 834 "metalang.met"
#line 835 "metalang.met"
            {
#line 835 "metalang.met"
                PPTREE _ptTree0;
#line 835 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(gen_param)(error_free), 10, metalang))== (PPTREE) -1 ) {
#line 835 "metalang.met"
                    PROG_EXIT(gen_param_exit,"gen_param")
#line 835 "metalang.met"
                }
#line 835 "metalang.met"
                list =AddList(list , _ptTree0);
#line 835 "metalang.met"
            }
#line 835 "metalang.met"
#line 836 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 836 "metalang.met"
            if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 836 "metalang.met"
                TOKEN_EXIT(gen_param_exit,")")
#line 836 "metalang.met"
#line 837 "metalang.met"
            {
#line 837 "metalang.met"
                PPTREE _ptRes0;
#line 837 "metalang.met"
                _ptRes0= MakeTree(REPLACETREE, 1);
#line 837 "metalang.met"
                ReplaceTree(_ptRes0, 1, list );
#line 837 "metalang.met"
                switchTree=_ptRes0;
#line 837 "metalang.met"
            }
#line 837 "metalang.met"
#line 837 "metalang.met"
            break;
#line 837 "metalang.met"
#line 839 "metalang.met"
        case ADDLIST : 
#line 839 "metalang.met"
            tokenAhead = 0 ;
#line 839 "metalang.met"
            CommTerm();
#line 839 "metalang.met"
#line 840 "metalang.met"
#line 841 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 841 "metalang.met"
            if (  !SEE_TOKEN( POUV,"(") || !(CommTerm(),1)) 
#line 841 "metalang.met"
                TOKEN_EXIT(gen_param_exit,"(")
#line 841 "metalang.met"
#line 842 "metalang.met"
            {
#line 842 "metalang.met"
                PPTREE _ptTree0;
#line 842 "metalang.met"
                {
#line 842 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 842 "metalang.met"
                    _ptRes1= MakeTree(IDENT, 1);
#line 842 "metalang.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 842 "metalang.met"
                    if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 842 "metalang.met"
                        TOKEN_EXIT(gen_param_exit,"IDENT")
#line 842 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 842 "metalang.met"
                    _ptTree0=_ptRes1;
#line 842 "metalang.met"
                }
#line 842 "metalang.met"
                list =AddList(list , _ptTree0);
#line 842 "metalang.met"
            }
#line 842 "metalang.met"
#line 843 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 843 "metalang.met"
            if (  !SEE_TOKEN( VIRG,",") || !(CommTerm(),1)) 
#line 843 "metalang.met"
                TOKEN_EXIT(gen_param_exit,",")
#line 843 "metalang.met"
#line 844 "metalang.met"
            {
#line 844 "metalang.met"
                PPTREE _ptTree0;
#line 844 "metalang.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(gen_param)(error_free), 10, metalang))== (PPTREE) -1 ) {
#line 844 "metalang.met"
                    PROG_EXIT(gen_param_exit,"gen_param")
#line 844 "metalang.met"
                }
#line 844 "metalang.met"
                list =AddList(list , _ptTree0);
#line 844 "metalang.met"
            }
#line 844 "metalang.met"
#line 845 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 845 "metalang.met"
            if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 845 "metalang.met"
                TOKEN_EXIT(gen_param_exit,")")
#line 845 "metalang.met"
#line 846 "metalang.met"
            {
#line 846 "metalang.met"
                PPTREE _ptRes0;
#line 846 "metalang.met"
                _ptRes0= MakeTree(ADDLIST, 1);
#line 846 "metalang.met"
                ReplaceTree(_ptRes0, 1, list );
#line 846 "metalang.met"
                switchTree=_ptRes0;
#line 846 "metalang.met"
            }
#line 846 "metalang.met"
#line 846 "metalang.met"
            break;
#line 846 "metalang.met"
#line 852 "metalang.met"
        case DIES : 
#line 852 "metalang.met"
            tokenAhead = 0 ;
#line 852 "metalang.met"
            CommTerm();
#line 852 "metalang.met"
#line 852 "metalang.met"
            {
#line 852 "metalang.met"
                PPTREE _ptTree0,_ptRes0;
#line 852 "metalang.met"
                _ptRes0= MakeTree(TOKEN, 1);
#line 852 "metalang.met"
                {
#line 852 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 852 "metalang.met"
                    _ptRes1= MakeTree(STRING, 1);
#line 852 "metalang.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 852 "metalang.met"
                    if ( ! TERM_OR_META(STRING,"STRING") || !(BUILD_TERM_META(_ptTree1))) 
#line 852 "metalang.met"
                        TOKEN_EXIT(gen_param_exit,"STRING")
#line 852 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 852 "metalang.met"
                    _ptTree0=_ptRes1;
#line 852 "metalang.met"
                }
#line 852 "metalang.met"
                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 852 "metalang.met"
                switchTree=_ptRes0;
#line 852 "metalang.met"
            }
#line 852 "metalang.met"
            break;
#line 852 "metalang.met"
#line 854 "metalang.met"
        case EXCL : 
#line 854 "metalang.met"
            tokenAhead = 0 ;
#line 854 "metalang.met"
            CommTerm();
#line 854 "metalang.met"
#line 854 "metalang.met"
            {
#line 854 "metalang.met"
                PPTREE _ptTree0,_ptRes0;
#line 854 "metalang.met"
                _ptRes0= MakeTree(EXCLA, 1);
#line 854 "metalang.met"
                {
#line 854 "metalang.met"
                    PPTREE _ptTree1,_ptRes1;
#line 854 "metalang.met"
                    _ptRes1= MakeTree(IDENT, 1);
#line 854 "metalang.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 854 "metalang.met"
                    if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 854 "metalang.met"
                        TOKEN_EXIT(gen_param_exit,"IDENT")
#line 854 "metalang.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 854 "metalang.met"
                    _ptTree0=_ptRes1;
#line 854 "metalang.met"
                }
#line 854 "metalang.met"
                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 854 "metalang.met"
                switchTree=_ptRes0;
#line 854 "metalang.met"
            }
#line 854 "metalang.met"
            break;
#line 854 "metalang.met"
#line 855 "metalang.met"
        case STRING : 
#line 855 "metalang.met"
#line 856 "metalang.met"
            {
#line 856 "metalang.met"
                PPTREE _ptTree0,_ptRes0;
#line 856 "metalang.met"
                _ptRes0= MakeTree(STRING, 1);
#line 856 "metalang.met"
                (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 856 "metalang.met"
                if ( ! TERM_OR_META(STRING,"STRING") || !(BUILD_TERM_META(_ptTree0))) 
#line 856 "metalang.met"
                    TOKEN_EXIT(gen_param_exit,"STRING")
#line 856 "metalang.met"
                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 856 "metalang.met"
                switchTree=_ptRes0;
#line 856 "metalang.met"
            }
#line 856 "metalang.met"
            break;
#line 856 "metalang.met"
        default :
#line 856 "metalang.met"
            CASE_EXIT(gen_param_exit,"either ( or take or stringlex or IDENT or maketree or replacetree or addlist or # or ! or STRING")
#line 856 "metalang.met"
            break;
#line 856 "metalang.met"
    }
#line 856 "metalang.met"
#line 858 "metalang.met"
    {
#line 858 "metalang.met"
        _retValue = switchTree ;
#line 858 "metalang.met"
        goto gen_param_ret;
#line 858 "metalang.met"
        
#line 858 "metalang.met"
    }
#line 858 "metalang.met"
#line 859 "metalang.met"
(tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 859 "metalang.met"
if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,(PPTREE) 0,lastTree); else {_lastTree=(PPTREE)0;_funcLevel--;}
#line 859 "metalang.met"
return((PPTREE) 0);
#line 859 "metalang.met"

#line 859 "metalang.met"
gen_param_exit :
#line 859 "metalang.met"

#line 859 "metalang.met"
    {
#line 859 "metalang.met"
        MulFreeTree(3,list,ident,switchTree);
#line 859 "metalang.met"
    }
#line 859 "metalang.met"
    _Debug = TRACE_RULE("gen_param",TRACE_EXIT,(PPTREE)0);
#line 859 "metalang.met"
    _funcLevel--;
#line 859 "metalang.met"
    return((PPTREE) -1) ;
#line 859 "metalang.met"

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

#line 859 "metalang.met"
#line 861 "metalang.met"
PPTREE metalang::grammar_use ( int error_free)
#line 861 "metalang.met"
{
#line 861 "metalang.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 861 "metalang.met"
    int _value,_nbPre = 0 ;
#line 861 "metalang.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 861 "metalang.met"
    int _Debug = TRACE_RULE("grammar_use",TRACE_ENTER,(PPTREE)0);
#line 861 "metalang.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 861 "metalang.met"
#line 861 "metalang.met"
    PPTREE retTree = (PPTREE) 0,string = (PPTREE) 0;
#line 861 "metalang.met"
#line 863 "metalang.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 863 "metalang.met"
    if (  !SEE_TOKEN( USE,"use") || !(CommTerm(),1)) 
#line 863 "metalang.met"
        TOKEN_EXIT(grammar_use_exit,"use")
#line 863 "metalang.met"
#line 864 "metalang.met"
    {
#line 864 "metalang.met"
        PPTREE _ptTree0,_ptRes0;
#line 864 "metalang.met"
        _ptRes0= MakeTree(STRING, 1);
#line 864 "metalang.met"
        (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 864 "metalang.met"
        if ( ! TERM_OR_META(STRING,"STRING") || !(BUILD_TERM_META(_ptTree0))) 
#line 864 "metalang.met"
            TOKEN_EXIT(grammar_use_exit,"STRING")
#line 864 "metalang.met"
        ReplaceTree(_ptRes0, 1, _ptTree0);
#line 864 "metalang.met"
        string=_ptRes0;
#line 864 "metalang.met"
    }
#line 864 "metalang.met"
#line 865 "metalang.met"
    {
#line 865 "metalang.met"
        PPTREE _ptRes0;
#line 865 "metalang.met"
        _ptRes0= MakeTree(GRAMMAR_USE, 1);
#line 865 "metalang.met"
        ReplaceTree(_ptRes0, 1, (TakeUseGrammar (string )));
#line 865 "metalang.met"
        retTree=_ptRes0;
#line 865 "metalang.met"
    }
#line 865 "metalang.met"
#line 867 "metalang.met"
    {
#line 867 "metalang.met"
        _retValue = retTree ;
#line 867 "metalang.met"
        goto grammar_use_ret;
#line 867 "metalang.met"
        
#line 867 "metalang.met"
    }
#line 867 "metalang.met"
#line 867 "metalang.met"
#line 867 "metalang.met"

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

#line 868 "metalang.met"
grammar_use_exit :
#line 868 "metalang.met"

#line 868 "metalang.met"
    {
#line 868 "metalang.met"
        MulFreeTree(2,string,retTree);
#line 868 "metalang.met"
    }
#line 868 "metalang.met"
    _Debug = TRACE_RULE("grammar_use",TRACE_EXIT,(PPTREE)0);
#line 868 "metalang.met"
    _funcLevel--;
#line 868 "metalang.met"
    return((PPTREE) -1) ;
#line 868 "metalang.met"

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

#line 868 "metalang.met"
#line 214 "metalang.met"
PPTREE metalang::langage ( int error_free)
#line 214 "metalang.met"
{
#line 214 "metalang.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 214 "metalang.met"
    int _value,_nbPre = 0 ;
#line 214 "metalang.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 214 "metalang.met"
    int _Debug = TRACE_RULE("langage",TRACE_ENTER,(PPTREE)0);
#line 214 "metalang.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 214 "metalang.met"
#line 214 "metalang.met"
    PPTREE _addlist1 = (PPTREE) 0,_addlist2 = (PPTREE) 0,_addlist3 = (PPTREE) 0;
#line 214 "metalang.met"
#line 214 "metalang.met"
    PPTREE list = (PPTREE) 0,langTree = (PPTREE) 0,listglobal = (PPTREE) 0,nothing = (PPTREE) 0;
#line 214 "metalang.met"
#line 216 "metalang.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 216 "metalang.met"
    if (  !SEE_TOKEN( LANGUAGE,"language") || !(CommTerm(),1)) 
#line 216 "metalang.met"
        TOKEN_EXIT(langage_exit,"language")
#line 216 "metalang.met"
#line 217 "metalang.met"
    {
#line 217 "metalang.met"
        PPTREE _ptTree0,_ptRes0;
#line 217 "metalang.met"
        _ptRes0= MakeTree(LANGUAGE, 2);
#line 217 "metalang.met"
        {
#line 217 "metalang.met"
            PPTREE _ptTree1,_ptRes1;
#line 217 "metalang.met"
            _ptRes1= MakeTree(IDENT, 1);
#line 217 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 217 "metalang.met"
            if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 217 "metalang.met"
                TOKEN_EXIT(langage_exit,"IDENT")
#line 217 "metalang.met"
            ReplaceTree(_ptRes1, 1, _ptTree1);
#line 217 "metalang.met"
            _ptTree0=_ptRes1;
#line 217 "metalang.met"
        }
#line 217 "metalang.met"
        ReplaceTree(_ptRes0, 1, _ptTree0);
#line 217 "metalang.met"
        langTree=_ptRes0;
#line 217 "metalang.met"
    }
#line 217 "metalang.met"
#line 218 "metalang.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 218 "metalang.met"
    if (  !SEE_TOKEN( PVIR,";") || !(CommTerm(),1)) 
#line 218 "metalang.met"
        TOKEN_EXIT(langage_exit,";")
#line 218 "metalang.met"
#line 218 "metalang.met"
    _addlist1 = listglobal ;
#line 218 "metalang.met"
#line 218 "metalang.met"
    _addlist2 = list ;
#line 218 "metalang.met"
#line 219 "metalang.met"
    while ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN( GLOBAL,"global")) { 
#line 219 "metalang.met"
#line 220 "metalang.met"
#line 221 "metalang.met"
        if ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(GLOBAL,"global") && (tokenAhead = 0,CommTerm(),1)){
#line 221 "metalang.met"
#line 222 "metalang.met"
#line 223 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 223 "metalang.met"
            if (  !SEE_TOKEN( BEGIN,"begin") || !(CommTerm(),1)) 
#line 223 "metalang.met"
                TOKEN_EXIT(langage_exit,"begin")
#line 223 "metalang.met"
#line 224 "metalang.met"
            debut:
#line 224 "metalang.met"
#line 225 "metalang.met"
            do {
#line 225 "metalang.met"
#line 226 "metalang.met"
                (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 226 "metalang.met"
                switch( lexEl.Value) {
#line 226 "metalang.met"
#line 227 "metalang.met"
                    case AOUVAOUV : 
#line 227 "metalang.met"
#line 227 "metalang.met"
#line 227 "metalang.met"
                        {
#line 227 "metalang.met"
                            PPTREE _ptTree0;
#line 227 "metalang.met"
                            if ( (_ptTree0=NQUICK_CALL(_Tak(asit)(error_free), 1, metalang))== (PPTREE) -1 ) {
#line 227 "metalang.met"
                                PROG_EXIT(langage_exit,"langage")
#line 227 "metalang.met"
                            }
#line 227 "metalang.met"
                            _addlist1 =AddList(_addlist1 , _ptTree0);
#line 227 "metalang.met"
                        }
#line 227 "metalang.met"
#line 227 "metalang.met"
                        if (listglobal){
#line 227 "metalang.met"
#line 227 "metalang.met"
                            _addlist1 = SonTree (_addlist1 ,2 );
#line 227 "metalang.met"
                        } else {
#line 227 "metalang.met"
#line 227 "metalang.met"
                            listglobal = _addlist1 ;
#line 227 "metalang.met"
                        }
#line 227 "metalang.met"
                        break;
#line 227 "metalang.met"
#line 232 "metalang.met"
                    default : 
#line 232 "metalang.met"
#line 229 "metalang.met"
#line 231 "metalang.met"
                        if (NPUSH_CALL_AFF_VERIF(nothing = ,_Tak(debut_proc), 3, metalang)){
#line 231 "metalang.met"
#line 231 "metalang.met"
                        }
#line 231 "metalang.met"
#line 234 "metalang.met"
                        dumperror ();
#line 234 "metalang.met"
#line 236 "metalang.met"
                        (tokenAhead == 4|| (LexEndLine(),TRACE_LEX(1)));
#line 236 "metalang.met"
                        if ( ! TERM_OR_META(END_LINE,"END_LINE") || !(CommTerm(),1)) 
#line 236 "metalang.met"
                            TOKEN_EXIT(langage_exit,"END_LINE")
#line 236 "metalang.met"
#line 237 "metalang.met"
                         hasGotErrorMeta = 1 ;
#line 237 "metalang.met"
#line 238 "metalang.met"
                        if (! (c == EOF )){
#line 238 "metalang.met"
#line 239 "metalang.met"
                             goto debut ;
#line 239 "metalang.met"
                        }
#line 239 "metalang.met"
#line 239 "metalang.met"
                        break;
#line 239 "metalang.met"
                }
#line 239 "metalang.met"
#line 242 "metalang.met"
                if ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(PVIR,";") && (tokenAhead = 0,CommTerm(),1)){
#line 242 "metalang.met"
#line 242 "metalang.met"
                }
#line 242 "metalang.met"
#line 242 "metalang.met"
#line 243 "metalang.met"
            } while ( !((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(END,"end") && (tokenAhead = 0,CommTerm(),1))) ;
#line 243 "metalang.met"
#line 244 "metalang.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 244 "metalang.met"
            if (  !SEE_TOKEN( PVIR,";") || !(CommTerm(),1)) 
#line 244 "metalang.met"
                TOKEN_EXIT(langage_exit,";")
#line 244 "metalang.met"
#line 245 "metalang.met"
            {
#line 245 "metalang.met"
                PPTREE _ptTree0;
#line 245 "metalang.met"
                {
#line 245 "metalang.met"
                    PPTREE _ptRes1;
#line 245 "metalang.met"
                    _ptRes1= MakeTree(GLOBAL, 1);
#line 245 "metalang.met"
                    ReplaceTree(_ptRes1, 1, listglobal );
#line 245 "metalang.met"
                    _ptTree0=_ptRes1;
#line 245 "metalang.met"
                }
#line 245 "metalang.met"
                _addlist2 =AddList(_addlist2 , _ptTree0);
#line 245 "metalang.met"
            }
#line 245 "metalang.met"
#line 245 "metalang.met"
            if (list){
#line 245 "metalang.met"
#line 245 "metalang.met"
                _addlist2 = SonTree (_addlist2 ,2 );
#line 245 "metalang.met"
            } else {
#line 245 "metalang.met"
#line 245 "metalang.met"
                list = _addlist2 ;
#line 245 "metalang.met"
            }
#line 245 "metalang.met"
#line 245 "metalang.met"
#line 245 "metalang.met"
        }
#line 245 "metalang.met"
#line 245 "metalang.met"
    } 
#line 245 "metalang.met"
#line 245 "metalang.met"
    _addlist3 = list ;
#line 245 "metalang.met"
#line 248 "metalang.met"
    do {
#line 248 "metalang.met"
#line 249 "metalang.met"
         debut1 :
#line 249 "metalang.met"
#line 250 "metalang.met"
        (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 250 "metalang.met"
        switch( lexEl.Value) {
#line 250 "metalang.met"
#line 251 "metalang.met"
            case DEFINE : 
#line 251 "metalang.met"
#line 251 "metalang.met"
#line 251 "metalang.met"
                {
#line 251 "metalang.met"
                    PPTREE _ptTree0;
#line 251 "metalang.met"
                    if ( (_ptTree0=NQUICK_CALL(_Tak(declaration)(error_free), 4, metalang))== (PPTREE) -1 ) {
#line 251 "metalang.met"
                        PROG_EXIT(langage_exit,"langage")
#line 251 "metalang.met"
                    }
#line 251 "metalang.met"
                    _addlist3 =AddList(_addlist3 , _ptTree0);
#line 251 "metalang.met"
                }
#line 251 "metalang.met"
#line 251 "metalang.met"
                if (list){
#line 251 "metalang.met"
#line 251 "metalang.met"
                    _addlist3 = SonTree (_addlist3 ,2 );
#line 251 "metalang.met"
                } else {
#line 251 "metalang.met"
#line 251 "metalang.met"
                    list = _addlist3 ;
#line 251 "metalang.met"
                }
#line 251 "metalang.met"
                break;
#line 251 "metalang.met"
#line 252 "metalang.met"
            case LEXDEFINE : 
#line 252 "metalang.met"
#line 252 "metalang.met"
#line 252 "metalang.met"
                {
#line 252 "metalang.met"
                    PPTREE _ptTree0;
#line 252 "metalang.met"
                    if ( (_ptTree0=NQUICK_CALL(_Tak(definition)(error_free), 5, metalang))== (PPTREE) -1 ) {
#line 252 "metalang.met"
                        PROG_EXIT(langage_exit,"langage")
#line 252 "metalang.met"
                    }
#line 252 "metalang.met"
                    _addlist3 =AddList(_addlist3 , _ptTree0);
#line 252 "metalang.met"
                }
#line 252 "metalang.met"
#line 252 "metalang.met"
                if (list){
#line 252 "metalang.met"
#line 252 "metalang.met"
                    _addlist3 = SonTree (_addlist3 ,2 );
#line 252 "metalang.met"
                } else {
#line 252 "metalang.met"
#line 252 "metalang.met"
                    list = _addlist3 ;
#line 252 "metalang.met"
                }
#line 252 "metalang.met"
                break;
#line 252 "metalang.met"
#line 253 "metalang.met"
            case USE : 
#line 253 "metalang.met"
#line 253 "metalang.met"
#line 253 "metalang.met"
                {
#line 253 "metalang.met"
                    PPTREE _ptTree0;
#line 253 "metalang.met"
                    if ( (_ptTree0=NQUICK_CALL(_Tak(grammar_use)(error_free), 11, metalang))== (PPTREE) -1 ) {
#line 253 "metalang.met"
                        PROG_EXIT(langage_exit,"langage")
#line 253 "metalang.met"
                    }
#line 253 "metalang.met"
                    _addlist3 =AddList(_addlist3 , _ptTree0);
#line 253 "metalang.met"
                }
#line 253 "metalang.met"
#line 253 "metalang.met"
                if (list){
#line 253 "metalang.met"
#line 253 "metalang.met"
                    _addlist3 = SonTree (_addlist3 ,2 );
#line 253 "metalang.met"
                } else {
#line 253 "metalang.met"
#line 253 "metalang.met"
                    list = _addlist3 ;
#line 253 "metalang.met"
                }
#line 253 "metalang.met"
                break;
#line 253 "metalang.met"
#line 254 "metalang.met"
            case AOUVAOUV : 
#line 254 "metalang.met"
#line 254 "metalang.met"
#line 254 "metalang.met"
                {
#line 254 "metalang.met"
                    PPTREE _ptTree0;
#line 254 "metalang.met"
                    if ( (_ptTree0=NQUICK_CALL(_Tak(asit)(error_free), 1, metalang))== (PPTREE) -1 ) {
#line 254 "metalang.met"
                        PROG_EXIT(langage_exit,"langage")
#line 254 "metalang.met"
                    }
#line 254 "metalang.met"
                    _addlist3 =AddList(_addlist3 , _ptTree0);
#line 254 "metalang.met"
                }
#line 254 "metalang.met"
#line 254 "metalang.met"
                if (list){
#line 254 "metalang.met"
#line 254 "metalang.met"
                    _addlist3 = SonTree (_addlist3 ,2 );
#line 254 "metalang.met"
                } else {
#line 254 "metalang.met"
#line 254 "metalang.met"
                    list = _addlist3 ;
#line 254 "metalang.met"
                }
#line 254 "metalang.met"
                break;
#line 254 "metalang.met"
#line 259 "metalang.met"
            default : 
#line 259 "metalang.met"
#line 256 "metalang.met"
#line 258 "metalang.met"
                if (NPUSH_CALL_AFF_VERIF(nothing = ,_Tak(debut_proc), 3, metalang)){
#line 258 "metalang.met"
#line 258 "metalang.met"
                }
#line 258 "metalang.met"
#line 261 "metalang.met"
                dumperror ();
#line 261 "metalang.met"
#line 263 "metalang.met"
                (tokenAhead == 4|| (LexEndLine(),TRACE_LEX(1)));
#line 263 "metalang.met"
                if ( ! TERM_OR_META(END_LINE,"END_LINE") || !(CommTerm(),1)) 
#line 263 "metalang.met"
                    TOKEN_EXIT(langage_exit,"END_LINE")
#line 263 "metalang.met"
#line 264 "metalang.met"
                 hasGotErrorMeta = 1 ;
#line 264 "metalang.met"
#line 265 "metalang.met"
                if (! (c == EOF )){
#line 265 "metalang.met"
#line 266 "metalang.met"
                     goto debut1 ;
#line 266 "metalang.met"
                }
#line 266 "metalang.met"
#line 266 "metalang.met"
                break;
#line 266 "metalang.met"
        }
#line 266 "metalang.met"
#line 266 "metalang.met"
#line 269 "metalang.met"
    } while ( !(! ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN(PVIR,";") && (tokenAhead = 0,CommTerm(),1)))) ;
#line 269 "metalang.met"
#line 270 "metalang.met"
    ReplaceTree(langTree ,2 ,list );
#line 270 "metalang.met"
#line 271 "metalang.met"
    if ((! ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN( POIN,"."))) && 
#line 271 "metalang.met"
       (! (c == EOF ))){
#line 271 "metalang.met"
#line 272 "metalang.met"
#line 273 "metalang.met"
        dumperror ();
#line 273 "metalang.met"
#line 275 "metalang.met"
        (tokenAhead == 4|| (LexEndLine(),TRACE_LEX(1)));
#line 275 "metalang.met"
        if ( ! TERM_OR_META(END_LINE,"END_LINE") || !(CommTerm(),1)) 
#line 275 "metalang.met"
            TOKEN_EXIT(langage_exit,"END_LINE")
#line 275 "metalang.met"
#line 277 "metalang.met"
         hasGotErrorMeta = 1 ;
#line 277 "metalang.met"
#line 278 "metalang.met"
        if (! (c == EOF )){
#line 278 "metalang.met"
#line 279 "metalang.met"
             goto debut1 ;
#line 279 "metalang.met"
        }
#line 279 "metalang.met"
#line 279 "metalang.met"
#line 279 "metalang.met"
    }
#line 279 "metalang.met"
#line 282 "metalang.met"
    if (hasGotErrorMeta == 1 ){
#line 282 "metalang.met"
#line 283 "metalang.met"
        exit(-1);
#line 283 "metalang.met"
    }
#line 283 "metalang.met"
#line 285 "metalang.met"
    {
#line 285 "metalang.met"
        _retValue = langTree ;
#line 285 "metalang.met"
        goto langage_ret;
#line 285 "metalang.met"
        
#line 285 "metalang.met"
    }
#line 285 "metalang.met"
#line 286 "metalang.met"
(tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 286 "metalang.met"
if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,(PPTREE) 0,lastTree); else {_lastTree=(PPTREE)0;_funcLevel--;}
#line 286 "metalang.met"
return((PPTREE) 0);
#line 286 "metalang.met"

#line 286 "metalang.met"
langage_exit :
#line 286 "metalang.met"

#line 286 "metalang.met"
    {
#line 286 "metalang.met"
        MulFreeTree(7,nothing,listglobal,langTree,list,_addlist3,_addlist2,_addlist1);
#line 286 "metalang.met"
    }
#line 286 "metalang.met"
    _Debug = TRACE_RULE("langage",TRACE_EXIT,(PPTREE)0);
#line 286 "metalang.met"
    _funcLevel--;
#line 286 "metalang.met"
    return((PPTREE) -1) ;
#line 286 "metalang.met"

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

#line 286 "metalang.met"
