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

#include "token.h"
#include "metachop.h"


#line 20 "metachop.met"
PPTREE metachop::primary_expression ( int error_free)
#line 20 "metachop.met"
{
#line 20 "metachop.met"
    int  _oldinMakeTree = inMakeTree;
#line 20 "metachop.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 20 "metachop.met"
    int _value,_nbPre = 0 ;
#line 20 "metachop.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 20 "metachop.met"
    int _Debug = TRACE_RULE("primary_expression",TRACE_ENTER,(PPTREE)0);
#line 20 "metachop.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 20 "metachop.met"
#line 20 "metachop.met"
    PPTREE result = (PPTREE) 0,expTree = (PPTREE) 0,list = (PPTREE) 0,statTree = (PPTREE) 0,ret = (PPTREE) 0;
#line 20 "metachop.met"
#line 22 "metachop.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 22 "metachop.met"
    switch( lexEl.Value) {
#line 22 "metachop.met"
#line 23 "metachop.met"
        case INFESUPE : 
#line 23 "metachop.met"
            tokenAhead = 0 ;
#line 23 "metachop.met"
            CommTerm();
#line 23 "metachop.met"
#line 23 "metachop.met"
            {
#line 23 "metachop.met"
                PPTREE _ptTree0;
#line 23 "metachop.met"
                {
#line 23 "metachop.met"
                    PPTREE _ptRes1;
#line 23 "metachop.met"
                    _ptRes1= MakeTree(DEF_IDENT, 0);
#line 23 "metachop.met"
                    _ptTree0=_ptRes1;
#line 23 "metachop.met"
                }
#line 23 "metachop.met"
                _retValue =_ptTree0;
#line 23 "metachop.met"
                goto primary_expression_ret;
#line 23 "metachop.met"
            }
#line 23 "metachop.met"
            break;
#line 23 "metachop.met"
#line 24 "metachop.met"
        case INFE : 
#line 24 "metachop.met"
#line 24 "metachop.met"
            {
#line 24 "metachop.met"
                PPTREE _ptTree0;
#line 24 "metachop.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(take_follow)(error_free), 135, metachop))== (PPTREE) -1 ) {
#line 24 "metachop.met"
                    PROG_EXIT(primary_expression_exit,"primary_expression")
#line 24 "metachop.met"
                }
#line 24 "metachop.met"
                _retValue =_ptTree0;
#line 24 "metachop.met"
                goto primary_expression_ret;
#line 24 "metachop.met"
            }
#line 24 "metachop.met"
            break;
#line 24 "metachop.met"
#line 25 "metachop.met"
        case POINPOINPOIN : 
#line 25 "metachop.met"
            tokenAhead = 0 ;
#line 25 "metachop.met"
            CommTerm();
#line 25 "metachop.met"
#line 25 "metachop.met"
            {
#line 25 "metachop.met"
                PPTREE _ptTree0;
#line 25 "metachop.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(take_follow_list)(error_free), 136, metachop))== (PPTREE) -1 ) {
#line 25 "metachop.met"
                    PROG_EXIT(primary_expression_exit,"primary_expression")
#line 25 "metachop.met"
                }
#line 25 "metachop.met"
                _retValue =_ptTree0;
#line 25 "metachop.met"
                goto primary_expression_ret;
#line 25 "metachop.met"
            }
#line 25 "metachop.met"
            break;
#line 25 "metachop.met"
#line 26 "metachop.met"
        case VALUE : 
#line 26 "metachop.met"
            tokenAhead = 0 ;
#line 26 "metachop.met"
            CommTerm();
#line 26 "metachop.met"
#line 27 "metachop.met"
#line 28 "metachop.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 28 "metachop.met"
            if (  !SEE_TOKEN( POUV,"(") || !(CommTerm(),1)) 
#line 28 "metachop.met"
                TOKEN_EXIT(primary_expression_exit,"(")
#line 28 "metachop.met"
#line 29 "metachop.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 29 "metachop.met"
            switch( lexEl.Value) {
#line 29 "metachop.met"
#line 30 "metachop.met"
                case META : 
#line 30 "metachop.met"
                case IDENT : 
#line 30 "metachop.met"
#line 31 "metachop.met"
                    {
#line 31 "metachop.met"
                        PPTREE _ptTree0,_ptRes0;
#line 31 "metachop.met"
                        _ptRes0= MakeTree(VALUE, 1);
#line 31 "metachop.met"
                        {
#line 31 "metachop.met"
                            PPTREE _ptTree1,_ptRes1;
#line 31 "metachop.met"
                            _ptRes1= MakeTree(IDENT, 1);
#line 31 "metachop.met"
                            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 31 "metachop.met"
                            if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 31 "metachop.met"
                                TOKEN_EXIT(primary_expression_exit,"IDENT")
#line 31 "metachop.met"
                            ReplaceTree(_ptRes1, 1, _ptTree1);
#line 31 "metachop.met"
                            _ptTree0=_ptRes1;
#line 31 "metachop.met"
                        }
#line 31 "metachop.met"
                        ReplaceTree(_ptRes0, 1, _ptTree0);
#line 31 "metachop.met"
                        statTree=_ptRes0;
#line 31 "metachop.met"
                    }
#line 31 "metachop.met"
                    break;
#line 31 "metachop.met"
#line 33 "metachop.met"
                case INFESUPE : 
#line 33 "metachop.met"
                    tokenAhead = 0 ;
#line 33 "metachop.met"
                    CommTerm();
#line 33 "metachop.met"
#line 33 "metachop.met"
                    {
#line 33 "metachop.met"
                        PPTREE _ptTree0,_ptRes0;
#line 33 "metachop.met"
                        _ptRes0= MakeTree(VALUE, 1);
#line 33 "metachop.met"
                        {
#line 33 "metachop.met"
                            PPTREE _ptRes1;
#line 33 "metachop.met"
                            _ptRes1= MakeTree(DEF_IDENT, 0);
#line 33 "metachop.met"
                            _ptTree0=_ptRes1;
#line 33 "metachop.met"
                        }
#line 33 "metachop.met"
                        ReplaceTree(_ptRes0, 1, _ptTree0);
#line 33 "metachop.met"
                        statTree=_ptRes0;
#line 33 "metachop.met"
                    }
#line 33 "metachop.met"
                    break;
#line 33 "metachop.met"
                default :
#line 33 "metachop.met"
                    CASE_EXIT(primary_expression_exit,"either IDENT or <>")
#line 33 "metachop.met"
                    break;
#line 33 "metachop.met"
            }
#line 33 "metachop.met"
#line 35 "metachop.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 35 "metachop.met"
            if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 35 "metachop.met"
                TOKEN_EXIT(primary_expression_exit,")")
#line 35 "metachop.met"
#line 36 "metachop.met"
            {
#line 36 "metachop.met"
                _retValue = statTree ;
#line 36 "metachop.met"
                goto primary_expression_ret;
#line 36 "metachop.met"
                
#line 36 "metachop.met"
            }
#line 36 "metachop.met"
#line 36 "metachop.met"
            break;
#line 36 "metachop.met"
#line 38 "metachop.met"
        case NEXTL : 
#line 38 "metachop.met"
            tokenAhead = 0 ;
#line 38 "metachop.met"
            CommTerm();
#line 38 "metachop.met"
#line 39 "metachop.met"
#line 40 "metachop.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 40 "metachop.met"
            if (  !SEE_TOKEN( POUV,"(") || !(CommTerm(),1)) 
#line 40 "metachop.met"
                TOKEN_EXIT(primary_expression_exit,"(")
#line 40 "metachop.met"
#line 41 "metachop.met"
            if ((tokenAhead == 1|| (Lex(),TRACE_LEX(1)))&&SEE_TOKEN( IDENT,"IDENT")){
#line 41 "metachop.met"
#line 42 "metachop.met"
                {
#line 42 "metachop.met"
                    PPTREE _ptTree0,_ptRes0;
#line 42 "metachop.met"
                    _ptRes0= MakeTree(NEXT, 1);
#line 42 "metachop.met"
                    {
#line 42 "metachop.met"
                        PPTREE _ptTree1,_ptRes1;
#line 42 "metachop.met"
                        _ptRes1= MakeTree(IDENT, 1);
#line 42 "metachop.met"
                        (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 42 "metachop.met"
                        if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 42 "metachop.met"
                            TOKEN_EXIT(primary_expression_exit,"IDENT")
#line 42 "metachop.met"
                        ReplaceTree(_ptRes1, 1, _ptTree1);
#line 42 "metachop.met"
                        _ptTree0=_ptRes1;
#line 42 "metachop.met"
                    }
#line 42 "metachop.met"
                    ReplaceTree(_ptRes0, 1, _ptTree0);
#line 42 "metachop.met"
                    statTree=_ptRes0;
#line 42 "metachop.met"
                }
#line 42 "metachop.met"
            } else {
#line 42 "metachop.met"
#line 44 "metachop.met"
#line 45 "metachop.met"
                (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 45 "metachop.met"
                if (  !SEE_TOKEN( INFESUPE,"<>") || !(CommTerm(),1)) 
#line 45 "metachop.met"
                    TOKEN_EXIT(primary_expression_exit,"<>")
#line 45 "metachop.met"
#line 46 "metachop.met"
                {
#line 46 "metachop.met"
                    PPTREE _ptTree0,_ptRes0;
#line 46 "metachop.met"
                    _ptRes0= MakeTree(NEXT, 1);
#line 46 "metachop.met"
                    {
#line 46 "metachop.met"
                        PPTREE _ptRes1;
#line 46 "metachop.met"
                        _ptRes1= MakeTree(DEF_IDENT, 0);
#line 46 "metachop.met"
                        _ptTree0=_ptRes1;
#line 46 "metachop.met"
                    }
#line 46 "metachop.met"
                    ReplaceTree(_ptRes0, 1, _ptTree0);
#line 46 "metachop.met"
                    statTree=_ptRes0;
#line 46 "metachop.met"
                }
#line 46 "metachop.met"
#line 46 "metachop.met"
            }
#line 46 "metachop.met"
#line 48 "metachop.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 48 "metachop.met"
            if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 48 "metachop.met"
                TOKEN_EXIT(primary_expression_exit,")")
#line 48 "metachop.met"
#line 49 "metachop.met"
            {
#line 49 "metachop.met"
                _retValue = statTree ;
#line 49 "metachop.met"
                goto primary_expression_ret;
#line 49 "metachop.met"
                
#line 49 "metachop.met"
            }
#line 49 "metachop.met"
#line 49 "metachop.met"
            break;
#line 49 "metachop.met"
#line 51 "metachop.met"
        case PARSE : 
#line 51 "metachop.met"
            tokenAhead = 0 ;
#line 51 "metachop.met"
            CommTerm();
#line 51 "metachop.met"
#line 52 "metachop.met"
#line 53 "metachop.met"
             { char * theLanguage = currentLanguage;
#line 53 "metachop.met"
#line 54 "metachop.met"
            {
#line 54 "metachop.met"
                PPTREE _ptRes0;
#line 54 "metachop.met"
                _ptRes0= MakeTree(IN_LANGUAGE, 2);
#line 54 "metachop.met"
                statTree=_ptRes0;
#line 54 "metachop.met"
            }
#line 54 "metachop.met"
#line 55 "metachop.met"
            ReplaceTree(statTree,1,MakeString(parseLanguage));
#line 55 "metachop.met"
#line 56 "metachop.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 56 "metachop.met"
            if (  !SEE_TOKEN( POUV,"(") || !(CommTerm(),1)) 
#line 56 "metachop.met"
                TOKEN_EXIT(primary_expression_exit,"(")
#line 56 "metachop.met"
#line 57 "metachop.met"
            SwitchLang(parseLanguage);
#line 57 "metachop.met"
#line 58 "metachop.met"
            if ( (ret = the_parse_entry (error_free)) != (PPTREE) -1 ){
#line 58 "metachop.met"
#line 59 "metachop.met"
                ReplaceTree(statTree ,2 ,ret );
#line 59 "metachop.met"
#line 59 "metachop.met"
            } else {
#line 59 "metachop.met"
#line 61 "metachop.met"
#line 62 "metachop.met"
                _lastTree = (PPTREE) 0;
#line 62 "metachop.met"
#line 63 "metachop.met"
                SwitchLang(theLanguage);
#line 63 "metachop.met"
#line 64 "metachop.met"
                LEX_EXIT ("",0);
#line 64 "metachop.met"
                goto primary_expression_exit;
#line 64 "metachop.met"
#line 64 "metachop.met"
            }
#line 64 "metachop.met"
#line 66 "metachop.met"
            _lastTree = (PPTREE) 0;
#line 66 "metachop.met"
#line 67 "metachop.met"
            SwitchLang(theLanguage);
#line 67 "metachop.met"
#line 68 "metachop.met"
            ExtUnputBuf();
#line 68 "metachop.met"
#line 68 "metachop.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 68 "metachop.met"
            if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 68 "metachop.met"
                TOKEN_EXIT(primary_expression_exit,")")
#line 68 "metachop.met"
#line 70 "metachop.met"
             } 
#line 70 "metachop.met"
#line 71 "metachop.met"
            {
#line 71 "metachop.met"
                PPTREE _ptTree0;
#line 71 "metachop.met"
                {
#line 71 "metachop.met"
                    PPTREE _ptRes1;
#line 71 "metachop.met"
                    _ptRes1= MakeTree(PARSE, 1);
#line 71 "metachop.met"
                    ReplaceTree(_ptRes1, 1, statTree );
#line 71 "metachop.met"
                    _ptTree0=_ptRes1;
#line 71 "metachop.met"
                }
#line 71 "metachop.met"
                _retValue =_ptTree0;
#line 71 "metachop.met"
                goto primary_expression_ret;
#line 71 "metachop.met"
            }
#line 71 "metachop.met"
#line 71 "metachop.met"
            break;
#line 71 "metachop.met"
#line 73 "metachop.met"
        case IN : 
#line 73 "metachop.met"
            tokenAhead = 0 ;
#line 73 "metachop.met"
            CommTerm();
#line 73 "metachop.met"
#line 74 "metachop.met"
#line 75 "metachop.met"
             { char * oldParseLanguage = parseLanguage;
#line 75 "metachop.met"
#line 76 "metachop.met"
            {
#line 76 "metachop.met"
                PPTREE _ptTree0,_ptRes0;
#line 76 "metachop.met"
                _ptRes0= MakeTree(IN_LANG, 2);
#line 76 "metachop.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(expression)(error_free), 47, metachop))== (PPTREE) -1 ) {
#line 76 "metachop.met"
                    PROG_EXIT(primary_expression_exit,"primary_expression")
#line 76 "metachop.met"
                }
#line 76 "metachop.met"
                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 76 "metachop.met"
                statTree=_ptRes0;
#line 76 "metachop.met"
            }
#line 76 "metachop.met"
#line 77 "metachop.met"
            parseLanguage = AllocString(Value(statTree));
#line 77 "metachop.met"
#line 78 "metachop.met"
            {
#line 78 "metachop.met"
                PPTREE _ptTree0;
#line 78 "metachop.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(statement)(error_free), 112, metachop))== (PPTREE) -1 ) {
#line 78 "metachop.met"
                    PROG_EXIT(primary_expression_exit,"primary_expression")
#line 78 "metachop.met"
                }
#line 78 "metachop.met"
                ReplaceTree(statTree , 2 , _ptTree0);
#line 78 "metachop.met"
            }
#line 78 "metachop.met"
#line 79 "metachop.met"
            free (parseLanguage);
#line 79 "metachop.met"
#line 80 "metachop.met"
            parseLanguage = oldParseLanguage;
#line 80 "metachop.met"
#line 81 "metachop.met"
             } 
#line 81 "metachop.met"
#line 82 "metachop.met"
            {
#line 82 "metachop.met"
                _retValue = statTree ;
#line 82 "metachop.met"
                goto primary_expression_ret;
#line 82 "metachop.met"
                
#line 82 "metachop.met"
            }
#line 82 "metachop.met"
#line 82 "metachop.met"
            break;
#line 82 "metachop.met"
#line 87 "metachop.met"
        case POUV : 
#line 87 "metachop.met"
            tokenAhead = 0 ;
#line 87 "metachop.met"
            CommTerm();
#line 87 "metachop.met"
#line 85 "metachop.met"
            {
#line 85 "metachop.met"
                inMakeTree = 0 ;
#line 85 "metachop.met"
#line 86 "metachop.met"
#line 87 "metachop.met"
                if (NPUSH_CALL_AFF_VERIF(expTree = ,_Tak(expression), 47, metachop)){
#line 87 "metachop.met"
#line 88 "metachop.met"
#line 89 "metachop.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 89 "metachop.met"
                    if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 89 "metachop.met"
                        TOKEN_EXIT(primary_expression_exit,")")
#line 89 "metachop.met"
#line 90 "metachop.met"
                    {
#line 90 "metachop.met"
                        PPTREE _ptRes0;
#line 90 "metachop.met"
                        _ptRes0= MakeTree(EXP, 1);
#line 90 "metachop.met"
                        ReplaceTree(_ptRes0, 1, expTree );
#line 90 "metachop.met"
                        expTree=_ptRes0;
#line 90 "metachop.met"
                    }
#line 90 "metachop.met"
#line 91 "metachop.met"
                } else {
#line 91 "metachop.met"
#line 93 "metachop.met"
#line 94 "metachop.met"
                    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 94 "metachop.met"
                    if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 94 "metachop.met"
                        TOKEN_EXIT(primary_expression_exit,")")
#line 94 "metachop.met"
#line 95 "metachop.met"
                    {
#line 95 "metachop.met"
                        PPTREE _ptRes0;
#line 95 "metachop.met"
                        _ptRes0= MakeTree(NIL, 0);
#line 95 "metachop.met"
                        expTree=_ptRes0;
#line 95 "metachop.met"
                    }
#line 95 "metachop.met"
#line 95 "metachop.met"
                }
#line 95 "metachop.met"
#line 97 "metachop.met"
                {
#line 97 "metachop.met"
                    _retValue = expTree ;
#line 97 "metachop.met"
                    goto primary_expression_ret;
#line 97 "metachop.met"
                    
#line 97 "metachop.met"
                }
#line 97 "metachop.met"
#line 97 "metachop.met"
                inMakeTree =  _oldinMakeTree;
#line 97 "metachop.met"
            }
#line 97 "metachop.met"
            break;
#line 97 "metachop.met"
#line 99 "metachop.met"
        case OPERATOR : 
#line 99 "metachop.met"
#line 100 "metachop.met"
            {
#line 100 "metachop.met"
                PPTREE _ptTree0;
#line 100 "metachop.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(operator_function_name)(error_free), 81, metachop))== (PPTREE) -1 ) {
#line 100 "metachop.met"
                    PROG_EXIT(primary_expression_exit,"primary_expression")
#line 100 "metachop.met"
                }
#line 100 "metachop.met"
                _retValue =_ptTree0;
#line 100 "metachop.met"
                goto primary_expression_ret;
#line 100 "metachop.met"
            }
#line 100 "metachop.met"
            break;
#line 100 "metachop.met"
#line 101 "metachop.met"
        case TILD : 
#line 101 "metachop.met"
#line 101 "metachop.met"
            {
#line 101 "metachop.met"
                PPTREE _ptTree0;
#line 101 "metachop.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(qualified_name)(error_free), 93, metachop))== (PPTREE) -1 ) {
#line 101 "metachop.met"
                    PROG_EXIT(primary_expression_exit,"primary_expression")
#line 101 "metachop.met"
                }
#line 101 "metachop.met"
                _retValue =_ptTree0;
#line 101 "metachop.met"
                goto primary_expression_ret;
#line 101 "metachop.met"
            }
#line 101 "metachop.met"
            break;
#line 101 "metachop.met"
#line 102 "metachop.met"
        case META : 
#line 102 "metachop.met"
#line 103 "metachop.met"
#line 104 "metachop.met"
            {
#line 104 "metachop.met"
                PPTREE _ptTree0;
#line 104 "metachop.met"
                {
#line 104 "metachop.met"
                    PPTREE _ptTree1,_ptRes1;
#line 104 "metachop.met"
                    _ptRes1= MakeTree(META, 1);
#line 104 "metachop.met"
                    (tokenAhead == 7|| (LexMeta(),TRACE_LEX(1)));
#line 104 "metachop.met"
                    if ( ! TERM_OR_META(META,"META") || !(BUILD_TERM_META(_ptTree1))) 
#line 104 "metachop.met"
                        TOKEN_EXIT(primary_expression_exit,"META")
#line 104 "metachop.met"
                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 104 "metachop.met"
                    _ptTree0=_ptRes1;
#line 104 "metachop.met"
                }
#line 104 "metachop.met"
                _retValue =_ptTree0;
#line 104 "metachop.met"
                goto primary_expression_ret;
#line 104 "metachop.met"
            }
#line 104 "metachop.met"
#line 104 "metachop.met"
            break;
#line 104 "metachop.met"
#line 106 "metachop.met"
        case IDENT : 
#line 106 "metachop.met"
#line 107 "metachop.met"
            if ((tokenAhead == 12|| (PushFunction(),TRACE_LEX(1)))&&TERM_OR_META(PUSH_FUNCTION,"PUSH_FUNCTION") && !(tokenAhead = 0) && ( BUILD_TERM_META(result))) {
#line 107 "metachop.met"
#line 108 "metachop.met"
#line 109 "metachop.met"
                (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 109 "metachop.met"
                if (  !SEE_TOKEN( POUV,"(") || !(CommTerm(),1)) 
#line 109 "metachop.met"
                    TOKEN_EXIT(primary_expression_exit,"(")
#line 109 "metachop.met"
#line 110 "metachop.met"
                {
#line 110 "metachop.met"
                    PPTREE _ptTree0;
#line 110 "metachop.met"
                    {
#line 110 "metachop.met"
                        PPTREE _ptTree1,_ptRes1;
#line 110 "metachop.met"
                        _ptRes1= MakeTree(IDENT, 1);
#line 110 "metachop.met"
                        (tokenAhead == 11|| (PushArgument(),TRACE_LEX(1)));
#line 110 "metachop.met"
                        if ( ! TERM_OR_META(PUSH_ARGUMENT,"PUSH_ARGUMENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 110 "metachop.met"
                            TOKEN_EXIT(primary_expression_exit,"PUSH_ARGUMENT")
#line 110 "metachop.met"
                        ReplaceTree(_ptRes1, 1, _ptTree1);
#line 110 "metachop.met"
                        _ptTree0=_ptRes1;
#line 110 "metachop.met"
                    }
#line 110 "metachop.met"
                    list =AddList(list , _ptTree0);
#line 110 "metachop.met"
                }
#line 110 "metachop.met"
#line 111 "metachop.met"
                (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 111 "metachop.met"
                if (  !SEE_TOKEN( VIRG,",") || !(CommTerm(),1)) 
#line 111 "metachop.met"
                    TOKEN_EXIT(primary_expression_exit,",")
#line 111 "metachop.met"
#line 112 "metachop.met"
                {
#line 112 "metachop.met"
                    PPTREE _ptTree0;
#line 112 "metachop.met"
                    if ( (_ptTree0=NQUICK_CALL(_Tak(expression)(error_free), 47, metachop))== (PPTREE) -1 ) {
#line 112 "metachop.met"
                        PROG_EXIT(primary_expression_exit,"primary_expression")
#line 112 "metachop.met"
                    }
#line 112 "metachop.met"
                    list =AddList(list , _ptTree0);
#line 112 "metachop.met"
                }
#line 112 "metachop.met"
#line 113 "metachop.met"
                {
#line 113 "metachop.met"
                    PPTREE _ptRes0;
#line 113 "metachop.met"
                    _ptRes0= MakeTree(EXP_SEQ, 1);
#line 113 "metachop.met"
                    ReplaceTree(_ptRes0, 1, list );
#line 113 "metachop.met"
                    expTree=_ptRes0;
#line 113 "metachop.met"
                }
#line 113 "metachop.met"
#line 114 "metachop.met"
                (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 114 "metachop.met"
                if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 114 "metachop.met"
                    TOKEN_EXIT(primary_expression_exit,")")
#line 114 "metachop.met"
#line 115 "metachop.met"
                {
#line 115 "metachop.met"
                    PPTREE _ptTree0;
#line 115 "metachop.met"
                    {
#line 115 "metachop.met"
                        PPTREE _ptTree1,_ptRes1;
#line 115 "metachop.met"
                        _ptRes1= MakeTree(EXP_LIST, 2);
#line 115 "metachop.met"
                        {
#line 115 "metachop.met"
                            PPTREE _ptRes2;
#line 115 "metachop.met"
                            _ptRes2= MakeTree(IDENT, 1);
#line 115 "metachop.met"
                            ReplaceTree(_ptRes2, 1, result );
#line 115 "metachop.met"
                            _ptTree1=_ptRes2;
#line 115 "metachop.met"
                        }
#line 115 "metachop.met"
                        ReplaceTree(_ptRes1, 1, _ptTree1);
#line 115 "metachop.met"
                        ReplaceTree(_ptRes1, 2, expTree );
#line 115 "metachop.met"
                        _ptTree0=_ptRes1;
#line 115 "metachop.met"
                    }
#line 115 "metachop.met"
                    _retValue =_ptTree0;
#line 115 "metachop.met"
                    goto primary_expression_ret;
#line 115 "metachop.met"
                }
#line 115 "metachop.met"
#line 115 "metachop.met"
#line 115 "metachop.met"
            } else {
#line 115 "metachop.met"
#line 118 "metachop.met"
                {
#line 118 "metachop.met"
                    PPTREE _ptTree0;
#line 118 "metachop.met"
                    if ( (_ptTree0=NQUICK_CALL(_Tak(qualified_name)(error_free), 93, metachop))== (PPTREE) -1 ) {
#line 118 "metachop.met"
                        PROG_EXIT(primary_expression_exit,"primary_expression")
#line 118 "metachop.met"
                    }
#line 118 "metachop.met"
                    _retValue =_ptTree0;
#line 118 "metachop.met"
                    goto primary_expression_ret;
#line 118 "metachop.met"
                }
#line 118 "metachop.met"
            }
#line 118 "metachop.met"
            break;
#line 118 "metachop.met"
#line 119 "metachop.met"
        case STRING : 
#line 119 "metachop.met"
#line 120 "metachop.met"
            {
#line 120 "metachop.met"
                PPTREE _ptTree0;
#line 120 "metachop.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(string_list)(error_free), 113, metachop))== (PPTREE) -1 ) {
#line 120 "metachop.met"
                    PROG_EXIT(primary_expression_exit,"primary_expression")
#line 120 "metachop.met"
                }
#line 120 "metachop.met"
                _retValue =_ptTree0;
#line 120 "metachop.met"
                goto primary_expression_ret;
#line 120 "metachop.met"
            }
#line 120 "metachop.met"
            break;
#line 120 "metachop.met"
#line 121 "metachop.met"
        case VA_ARG : 
#line 121 "metachop.met"
            tokenAhead = 0 ;
#line 121 "metachop.met"
            CommTerm();
#line 121 "metachop.met"
#line 122 "metachop.met"
#line 123 "metachop.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 123 "metachop.met"
            if (  !SEE_TOKEN( POUV,"(") || !(CommTerm(),1)) 
#line 123 "metachop.met"
                TOKEN_EXIT(primary_expression_exit,"(")
#line 123 "metachop.met"
#line 124 "metachop.met"
            {
#line 124 "metachop.met"
                PPTREE _ptTree0,_ptRes0;
#line 124 "metachop.met"
                _ptRes0= MakeTree(VA_ARG, 2);
#line 124 "metachop.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(assignment_expression)(error_free), 11, metachop))== (PPTREE) -1 ) {
#line 124 "metachop.met"
                    PROG_EXIT(primary_expression_exit,"primary_expression")
#line 124 "metachop.met"
                }
#line 124 "metachop.met"
                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 124 "metachop.met"
                expTree=_ptRes0;
#line 124 "metachop.met"
            }
#line 124 "metachop.met"
#line 125 "metachop.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 125 "metachop.met"
            if (  !SEE_TOKEN( VIRG,",") || !(CommTerm(),1)) 
#line 125 "metachop.met"
                TOKEN_EXIT(primary_expression_exit,",")
#line 125 "metachop.met"
#line 126 "metachop.met"
            {
#line 126 "metachop.met"
                PPTREE _ptTree0;
#line 126 "metachop.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(type_name)(error_free), 118, metachop))== (PPTREE) -1 ) {
#line 126 "metachop.met"
                    PROG_EXIT(primary_expression_exit,"primary_expression")
#line 126 "metachop.met"
                }
#line 126 "metachop.met"
                ReplaceTree(expTree , 2 , _ptTree0);
#line 126 "metachop.met"
            }
#line 126 "metachop.met"
#line 127 "metachop.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 127 "metachop.met"
            if (  !SEE_TOKEN( PFER,")") || !(CommTerm(),1)) 
#line 127 "metachop.met"
                TOKEN_EXIT(primary_expression_exit,")")
#line 127 "metachop.met"
#line 128 "metachop.met"
            {
#line 128 "metachop.met"
                _retValue = expTree ;
#line 128 "metachop.met"
                goto primary_expression_ret;
#line 128 "metachop.met"
                
#line 128 "metachop.met"
            }
#line 128 "metachop.met"
#line 128 "metachop.met"
            break;
#line 128 "metachop.met"
#line 131 "metachop.met"
        default : 
#line 131 "metachop.met"
#line 131 "metachop.met"
            {
#line 131 "metachop.met"
                PPTREE _ptTree0;
#line 131 "metachop.met"
                if ( (_ptTree0=NQUICK_CALL(_Tak(constan)(error_free), 25, metachop))== (PPTREE) -1 ) {
#line 131 "metachop.met"
                    PROG_EXIT(primary_expression_exit,"primary_expression")
#line 131 "metachop.met"
                }
#line 131 "metachop.met"
                _retValue =_ptTree0;
#line 131 "metachop.met"
                goto primary_expression_ret;
#line 131 "metachop.met"
            }
#line 131 "metachop.met"
            break;
#line 131 "metachop.met"
    }
#line 131 "metachop.met"
#line 133 "metachop.met"
(tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1)));
#line 133 "metachop.met"
if (_nbPre || listComm) AddComm(_ptPreComm,_nbPre,(PPTREE) 0,lastTree); else {_lastTree=(PPTREE)0;_funcLevel--;}
#line 133 "metachop.met"
inMakeTree =  _oldinMakeTree;
#line 133 "metachop.met"
return((PPTREE) 0);
#line 133 "metachop.met"

#line 133 "metachop.met"
primary_expression_exit :
#line 133 "metachop.met"

#line 133 "metachop.met"
    {
#line 133 "metachop.met"
        MulFreeTree(5,ret,statTree,list,expTree,result);
#line 133 "metachop.met"
    }
#line 133 "metachop.met"
    _Debug = TRACE_RULE("primary_expression",TRACE_EXIT,(PPTREE)0);
#line 133 "metachop.met"
    _funcLevel--;
#line 133 "metachop.met"
    inMakeTree =  _oldinMakeTree;
#line 133 "metachop.met"
    return((PPTREE) -1) ;
#line 133 "metachop.met"

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

#line 133 "metachop.met"
#line 10 "metachop.met"
PPTREE metachop::prog ( int error_free)
#line 10 "metachop.met"
{
#line 10 "metachop.met"
    PFILE_POSITION _filePosition = (PFILE_POSITION) 0;

#line 10 "metachop.met"
    int _value,_nbPre = 0 ;
#line 10 "metachop.met"
    PCOMM_ELEM _ptPreComm = ((tokenAhead|| (LexComment(),tokenAhead=-1,TRACE_LEX(1))),listComm?LookComm(&_nbPre):(_funcLevel++,(PCOMM_ELEM)0));
#line 10 "metachop.met"
    int _Debug = TRACE_RULE("prog",TRACE_ENTER,(PPTREE)0);
#line 10 "metachop.met"
    PPTREE lastTree = _lastTree,_retValue ;
#line 10 "metachop.met"
#line 10 "metachop.met"
    PPTREE langTree = (PPTREE) 0;
#line 10 "metachop.met"
#line 12 "metachop.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 12 "metachop.met"
    if (  !SEE_TOKEN( LANGUAGE,"language") || !(CommTerm(),1)) 
#line 12 "metachop.met"
        TOKEN_EXIT(prog_exit,"language")
#line 12 "metachop.met"
#line 13 "metachop.met"
    {
#line 13 "metachop.met"
        PPTREE _ptTree0,_ptRes0;
#line 13 "metachop.met"
        _ptRes0= MakeTree(CHOP_DEF, 2);
#line 13 "metachop.met"
        {
#line 13 "metachop.met"
            PPTREE _ptTree1,_ptRes1;
#line 13 "metachop.met"
            _ptRes1= MakeTree(IDENT, 1);
#line 13 "metachop.met"
            (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 13 "metachop.met"
            if ( ! TERM_OR_META(IDENT,"IDENT") || !(BUILD_TERM_META(_ptTree1))) 
#line 13 "metachop.met"
                TOKEN_EXIT(prog_exit,"IDENT")
#line 13 "metachop.met"
            ReplaceTree(_ptRes1, 1, _ptTree1);
#line 13 "metachop.met"
            _ptTree0=_ptRes1;
#line 13 "metachop.met"
        }
#line 13 "metachop.met"
        ReplaceTree(_ptRes0, 1, _ptTree0);
#line 13 "metachop.met"
        langTree=_ptRes0;
#line 13 "metachop.met"
    }
#line 13 "metachop.met"
#line 14 "metachop.met"
    parseLanguage = AllocString(Value(langTree));
#line 14 "metachop.met"
#line 15 "metachop.met"
    (tokenAhead == 1|| (Lex(),TRACE_LEX(1)));
#line 15 "metachop.met"
    if (  !SEE_TOKEN( PVIR,";") || !(CommTerm(),1)) 
#line 15 "metachop.met"
        TOKEN_EXIT(prog_exit,";")
#line 15 "metachop.met"
#line 16 "metachop.met"
    {
#line 16 "metachop.met"
        PPTREE _ptTree0;
#line 16 "metachop.met"
        if ( (_ptTree0=NQUICK_CALL(_Tak(program)(error_free), 90, metachop))== (PPTREE) -1 ) {
#line 16 "metachop.met"
            PROG_EXIT(prog_exit,"prog")
#line 16 "metachop.met"
        }
#line 16 "metachop.met"
        ReplaceTree(langTree , 2 , _ptTree0);
#line 16 "metachop.met"
    }
#line 16 "metachop.met"
#line 17 "metachop.met"
    {
#line 17 "metachop.met"
        _retValue = langTree ;
#line 17 "metachop.met"
        goto prog_ret;
#line 17 "metachop.met"
        
#line 17 "metachop.met"
    }
#line 17 "metachop.met"
#line 17 "metachop.met"
#line 17 "metachop.met"

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

#line 18 "metachop.met"
prog_exit :
#line 18 "metachop.met"

#line 18 "metachop.met"
    {
#line 18 "metachop.met"
        MulFreeTree(1,langTree);
#line 18 "metachop.met"
    }
#line 18 "metachop.met"
    _Debug = TRACE_RULE("prog",TRACE_EXIT,(PPTREE)0);
#line 18 "metachop.met"
    _funcLevel--;
#line 18 "metachop.met"
    return((PPTREE) -1) ;
#line 18 "metachop.met"

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

#line 18 "metachop.met"
