#ifndef METALANG_PARSER
#define METALANG_PARSER

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


#ifdef __cplusplus
#include "pretty.h"
typedef int (pretty::** _FUNC_MEMB_METALANG) ();
class metalang: public pretty {
    public :
    
    static int init ; 
    
    metalang () {
        ptTokenArray = _tokenArray;
        ptTokenFuncArray =(_FUNC_MEMB_METALANG) _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 =   96 ,
        INTER =     95 ,
        FORGET_SYNTAXIQUE =     94 ,
        RECOVER =   93 ,
        RESETLEX =  92 ,
        BEGINNING =     91 ,
        DPOI =  90 ,
        SWITCH =    89 ,
        ELSE =  88 ,
        THEN =  87 ,
        UNTIL =     86 ,
        WITHOUT_CONTEXT =   85 ,
        DO =    84 ,
        WITH_CONTEXT =  83 ,
        BREAK =     82 ,
        RECOGNIZE_STRING =  81 ,
        FORGET =    80 ,
        RECOVERL =  79 ,
        FORGETL =   78 ,
        RESETL =    77 ,
        AT_BEGINNING =  76 ,
        CASE =  75 ,
        WHILE =     74 ,
        IF =    73 ,
        REPEAT =    72 ,
        WITHOUT =   71 ,
        WITH =  70 ,
        STORE_COMMENT_LINE =    69 ,
        RETURN =    68 ,
        IN_CONTEXT =    67 ,
        CONTEXT =   66 ,
        COND =  65 ,
        EQUAL =     64 ,
        EGAL =  63 ,
        POIN =  62 ,
        BEGIN =     61 ,
        GLOBAL =    60 ,
        GRAMMAR_USE =   59 ,
        NIL =   58 ,
        EXCLA =     57 ,
        TOKEN =     56 ,
        FUNC =  55 ,
        SKIP =  54 ,
        CONSTANT =  53 ,
        VIRG =  52 ,
        CFER =  51 ,
        TREE_ARITY =    50 ,
        DECLARE =   49 ,
        PVIR =  48 ,
        AND =   47 ,
        OR =    46 ,
        ASIT =  45 ,
        AFERAFER =  44 ,
        STOREL =    43 ,
        COUV =  42 ,
        LANGUAGE =  41 ,
        USE =   40 ,
        ADDLIST =   39 ,
        REPLACETREE =   38 ,
        MAKETREE =  37 ,
        STRINGLEX =     36 ,
        EXCL =  35 ,
        DIES =  34 ,
        PFER =  33 ,
        END =   32 ,
        LEXDEFINE =     31 ,
        DEFINE =    30 ,
        DEFAULT =   29 ,
        IN =    28 ,
        POUV =  27 ,
        TAKEL =     26 ,
        SEEL =  25 ,
        NOT =   24 ,
        TAKE =  23 ,
        SEE =   22 ,
        AOUVAOUV =  21 ,
        END_LINE =  20 ,
        ASIT_CONTENT =  19 ,
        NUMB =  18 ,
        CHARACTER =     17 ,
        STRING =    16 ,
        IDENT =     15 ,
        GOTO_REL =  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    96
#define INTER_metalang  95
#define FORGET_SYNTAXIQUE_metalang  94
#define RECOVER_metalang    93
#define RESETLEX_metalang   92
#define BEGINNING_metalang  91
#define DPOI_metalang   90
#define SWITCH_metalang     89
#define ELSE_metalang   88
#define THEN_metalang   87
#define UNTIL_metalang  86
#define WITHOUT_CONTEXT_metalang    85
#define DO_metalang     84
#define WITH_CONTEXT_metalang   83
#define BREAK_metalang  82
#define RECOGNIZE_STRING_metalang   81
#define FORGET_metalang     80
#define RECOVERL_metalang   79
#define FORGETL_metalang    78
#define RESETL_metalang     77
#define AT_BEGINNING_metalang   76
#define CASE_metalang   75
#define WHILE_metalang  74
#define IF_metalang     73
#define REPEAT_metalang     72
#define WITHOUT_metalang    71
#define WITH_metalang   70
#define STORE_COMMENT_LINE_metalang     69
#define RETURN_metalang     68
#define IN_CONTEXT_metalang     67
#define CONTEXT_metalang    66
#define COND_metalang   65
#define EQUAL_metalang  64
#define EGAL_metalang   63
#define POIN_metalang   62
#define BEGIN_metalang  61
#define GLOBAL_metalang     60
#define GRAMMAR_USE_metalang    59
#define NIL_metalang    58
#define EXCLA_metalang  57
#define TOKEN_metalang  56
#define FUNC_metalang   55
#define SKIP_metalang   54
#define CONSTANT_metalang   53
#define VIRG_metalang   52
#define CFER_metalang   51
#define TREE_ARITY_metalang     50
#define DECLARE_metalang    49
#define PVIR_metalang   48
#define AND_metalang    47
#define OR_metalang     46
#define ASIT_metalang   45
#define AFERAFER_metalang   44
#define STOREL_metalang     43
#define COUV_metalang   42
#define LANGUAGE_metalang   41
#define USE_metalang    40
#define ADDLIST_metalang    39
#define REPLACETREE_metalang    38
#define MAKETREE_metalang   37
#define STRINGLEX_metalang  36
#define EXCL_metalang   35
#define DIES_metalang   34
#define PFER_metalang   33
#define END_metalang    32
#define LEXDEFINE_metalang  31
#define DEFINE_metalang     30
#define DEFAULT_metalang    29
#define IN_metalang     28
#define POUV_metalang   27
#define TAKEL_metalang  26
#define SEEL_metalang   25
#define NOT_metalang    24
#define TAKE_metalang   23
#define SEE_metalang    22
#define AOUVAOUV_metalang   21
#define END_LINE_metalang   20
#define ASIT_CONTENT_metalang   19
#define NUMB_metalang   18
#define CHARACTER_metalang  17
#define STRING_metalang     16
#define IDENT_metalang  15
#define GOTO_REL_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
