#ifndef METALANG_PARSER
#define METALANG_PARSER

 extern int hasGotErrorMeta;
           extern "C" { extern char * theFileName;}
            extern "C" { PPTREE TakeUseGrammar(PPTREE);} 


#ifdef __cplusplus
#include "pretty.h"
#ifndef FUNC_MEMBER_DEF
#define FUNC_MEMBER_DEF 1
typedef int (pretty::** _FUNC_MEMB) ();
#endif
class metalang: public pretty {
    public :
    
    static int init ; 
    
    metalang () {
        ptTokenArray = _tokenArray;
        ptTokenFuncArray =(_FUNC_MEMB) _tokenFuncArray;
        ptTokenNbFuncArray = _tokenNbFuncArray;
        InitConst ();
        cDef = 0 ;
        keepSpace = 0 ;
        
    }
    
    virtual void * rootGrammar () { return (void *) this;}
    virtual int Lex() ;
    virtual int LexAsitContent() ;
    virtual int LexComment() ;
    virtual int LexEndLine() ;
    virtual int LexMeta() ;
    virtual PPTREE asit ( int error_free) ;
    virtual PPTREE condition ( int error_free) ;
    virtual PPTREE debut_proc ( int error_free) ;
    virtual PPTREE declaration ( int error_free) ;
    virtual PPTREE definition ( int error_free) ;
    virtual PPTREE end_key ( int error_free) ;
    virtual PPTREE expr ( int error_free) ;
    virtual PPTREE func_call ( int error_free) ;
    virtual PPTREE func_follow ( int error_free) ;
    virtual PPTREE gen_param ( int error_free) ;
    virtual PPTREE grammar_use ( int error_free) ;
    virtual PPTREE langage ( int error_free) ;
    virtual PPTREE maketree_follow ( int error_free) ;
    virtual PPTREE one_condition ( int error_free) ;
    virtual PPTREE parse_entry ( int error_free) ;
    virtual PPTREE pattern_rec ( int error_free) ;
    virtual PPTREE see_follow ( int error_free) ;
    virtual PPTREE seel_stat ( int error_free) ;
    virtual PPTREE set ( int error_free) ;
    virtual PPTREE storel_stat ( int error_free) ;
    virtual PPTREE take_follow ( int error_free) ;
    virtual PPTREE takel_stat ( int error_free) ;
    
    
    int cDef;
    int keepSpace;
                        static signed char * _tokenArray [23];
                        static int (metalang::*(_tokenFuncArray [23])) ();
                        static int _tokenNbFuncArray [23];
                    
                        virtual int SortKeyWord (int ret);
                        virtual int UpSortKeyWord (int ret); 
                        virtual void InitConst ();
                        
                        enum constants {
                            SET =   95 ,
                            INTER =     94 ,
                            FORGET_SYNTAXIQUE =     93 ,
                            RECOVER =   92 ,
                            RESETLEX =  91 ,
                            BEGINNING =     90 ,
                            DPOI =  89 ,
                            SWITCH =    88 ,
                            ELSE =  87 ,
                            THEN =  86 ,
                            UNTIL =     85 ,
                            WITHOUT_CONTEXT =   84 ,
                            DO =    83 ,
                            WITH_CONTEXT =  82 ,
                            BREAK =     81 ,
                            RECOGNIZE_STRING =  80 ,
                            FORGET =    79 ,
                            RECOVERL =  78 ,
                            FORGETL =   77 ,
                            RESETL =    76 ,
                            AT_BEGINNING =  75 ,
                            CASE =  74 ,
                            WHILE =     73 ,
                            IF =    72 ,
                            REPEAT =    71 ,
                            WITHOUT =   70 ,
                            WITH =  69 ,
                            STORE_COMMENT_LINE =    68 ,
                            RETURN =    67 ,
                            IN_CONTEXT =    66 ,
                            CONTEXT =   65 ,
                            COND =  64 ,
                            EQUAL =     63 ,
                            EGAL =  62 ,
                            POIN =  61 ,
                            BEGIN =     60 ,
                            GLOBAL =    59 ,
                            GRAMMAR_USE =   58 ,
                            NIL =   57 ,
                            EXCLA =     56 ,
                            TOKEN =     55 ,
                            FUNC =  54 ,
                            SKIP =  53 ,
                            CONSTANT =  52 ,
                            VIRG =  51 ,
                            CFER =  50 ,
                            TREE_ARITY =    49 ,
                            DECLARE =   48 ,
                            PVIR =  47 ,
                            AND =   46 ,
                            OR =    45 ,
                            ASIT =  44 ,
                            AFERAFER =  43 ,
                            STOREL =    42 ,
                            COUV =  41 ,
                            LANGUAGE =  40 ,
                            USE =   39 ,
                            ADDLIST =   38 ,
                            REPLACETREE =   37 ,
                            MAKETREE =  36 ,
                            STRINGLEX =     35 ,
                            EXCL =  34 ,
                            DIES =  33 ,
                            PFER =  32 ,
                            END =   31 ,
                            LEXDEFINE =     30 ,
                            DEFINE =    29 ,
                            DEFAULT =   28 ,
                            IN =    27 ,
                            POUV =  26 ,
                            TAKEL =     25 ,
                            SEEL =  24 ,
                            NOT =   23 ,
                            TAKE =  22 ,
                            SEE =   21 ,
                            AOUVAOUV =  20 ,
                            END_LINE =  19 ,
                            ASIT_CONTENT =  18 ,
                            NUMB =  17 ,
                            CHARACTER =     16 ,
                            STRING =    15 ,
                            IDENT =     14 ,
                            GOTO =  13 ,
                            STR =   12 ,
                            UNMARK =    11 ,
                            MARK =  10 ,
                            TAB_VIRT =  9 ,
                            TAB =   8 ,
                            NEWLINE =   7 ,
                            ATTRIBUTS =     6 ,
                            PLACE_HOLD_CONST
                        } ; 
                    } ; 
                    
                    extern metalang * parser_metalang;
                    
                    #endif
                    #define SET_metalang    95
                    #define INTER_metalang  94
                    #define FORGET_SYNTAXIQUE_metalang  93
                    #define RECOVER_metalang    92
                    #define RESETLEX_metalang   91
                    #define BEGINNING_metalang  90
                    #define DPOI_metalang   89
                    #define SWITCH_metalang     88
                    #define ELSE_metalang   87
                    #define THEN_metalang   86
                    #define UNTIL_metalang  85
                    #define WITHOUT_CONTEXT_metalang    84
                    #define DO_metalang     83
                    #define WITH_CONTEXT_metalang   82
                    #define BREAK_metalang  81
                    #define RECOGNIZE_STRING_metalang   80
                    #define FORGET_metalang     79
                    #define RECOVERL_metalang   78
                    #define FORGETL_metalang    77
                    #define RESETL_metalang     76
                    #define AT_BEGINNING_metalang   75
                    #define CASE_metalang   74
                    #define WHILE_metalang  73
                    #define IF_metalang     72
                    #define REPEAT_metalang     71
                    #define WITHOUT_metalang    70
                    #define WITH_metalang   69
                    #define STORE_COMMENT_LINE_metalang     68
                    #define RETURN_metalang     67
                    #define IN_CONTEXT_metalang     66
                    #define CONTEXT_metalang    65
                    #define COND_metalang   64
                    #define EQUAL_metalang  63
                    #define EGAL_metalang   62
                    #define POIN_metalang   61
                    #define BEGIN_metalang  60
                    #define GLOBAL_metalang     59
                    #define GRAMMAR_USE_metalang    58
                    #define NIL_metalang    57
                    #define EXCLA_metalang  56
                    #define TOKEN_metalang  55
                    #define FUNC_metalang   54
                    #define SKIP_metalang   53
                    #define CONSTANT_metalang   52
                    #define VIRG_metalang   51
                    #define CFER_metalang   50
                    #define TREE_ARITY_metalang     49
                    #define DECLARE_metalang    48
                    #define PVIR_metalang   47
                    #define AND_metalang    46
                    #define OR_metalang     45
                    #define ASIT_metalang   44
                    #define AFERAFER_metalang   43
                    #define STOREL_metalang     42
                    #define COUV_metalang   41
                    #define LANGUAGE_metalang   40
                    #define USE_metalang    39
                    #define ADDLIST_metalang    38
                    #define REPLACETREE_metalang    37
                    #define MAKETREE_metalang   36
                    #define STRINGLEX_metalang  35
                    #define EXCL_metalang   34
                    #define DIES_metalang   33
                    #define PFER_metalang   32
                    #define END_metalang    31
                    #define LEXDEFINE_metalang  30
                    #define DEFINE_metalang     29
                    #define DEFAULT_metalang    28
                    #define IN_metalang     27
                    #define POUV_metalang   26
                    #define TAKEL_metalang  25
                    #define SEEL_metalang   24
                    #define NOT_metalang    23
                    #define TAKE_metalang   22
                    #define SEE_metalang    21
                    #define AOUVAOUV_metalang   20
                    #define END_LINE_metalang   19
                    #define ASIT_CONTENT_metalang   18
                    #define NUMB_metalang   17
                    #define CHARACTER_metalang  16
                    #define STRING_metalang     15
                    #define IDENT_metalang  14
                    #define GOTO_metalang   13
                    #define STR_metalang    12
                    #define UNMARK_metalang     11
                    #define MARK_metalang   10
                    #define TAB_VIRT_metalang   9
                    #define TAB_metalang    8
                    #define NEWLINE_metalang    7
                    #define ATTRIBUTS_metalang  6
                    #undef _Tak
                    #define _Tak(func) func 
                    #endif
