# [cfg_abs.h] Abstract Context Free Grammar

## contents

#include "standard.h"
#include "hset.h"
#include "prs.h"

[cfg_abs] provides functions that derives the nonterminal and production classes which constitutes the abstract context free grammar from a given parse table.

For further documentation of the definition of an abstract context free grammar follow the reference to module [prs_gen].

## Macros

Properties of nonterminals and their classes

    #define ACFG_NTTYP_LIST     1
    #define ACFG_NTTYP_CLASS    2
    #define ACFG_NTTYP_OPT      4
    #define ACFG_NTTYP_NIL      8
    #define ACFG_NTTYP_RECTYP   16
    #define ACFG_NTTYP_REF0     32
    #define ACFG_NTTYP_REF1     64
    #define ACFG_NTTYP_START    128
    #define ACFG_NTTYP_PRIM     256
    #define ACFG_NTTYP_PRIMC    512
    #define ACFG_NTTYP_EMPTY    1024
    #define ACFG_NTTYP_RECREF   2048
    #define ACFG_NTTYP_CONSREF  4096
    #define ACFG_HAS_NTTYP(v,t) ( (((int)(v)) & ((int)(t))) > 0 )

## API

    c_bool acfg_init
         (
           PLR_Tab PTab, int** aPol, HS_Set** aNtm, HS_Set** aPrd, c_bool errmsg
         )

creates & fills 'aPol', 'aNtm', 'aPrd' from parse table 'PTab'
'aPol' :- polymorph 'cons' classes
'aNtm' :- nonterminal partition
'aPrd' :- nonterminal class productions

    c_bool acfg_init_doc
         (
           PLR_Tab PTab, int** aPol, HS_Set** aNtm, HS_Set** aPrd
         )

creates & fills 'aPol', 'aNtm', 'aPrd' from parse table 'PTab',
as needed for the generation of a refernce document
'aPol' :- nonterminal/class types/properties
'aNtm' :- nonterminal partition
'aPrd' :- nonterminal productions

    void acfg_quit(PLR_Tab PTab,int* aPol, HS_Set* aNtm, HS_Set* aPrd)

deletes 'aPol', 'aNtm' and 'aPrd'
( originally created from parse table 'PTab' )