[prs_imp.h] LALR(1) Parser/Generator: implementation types

contents



#include "standard.h"
/*
  Implementation of grammar symbols
  Each grammar symbol is numbered uniquely in the following order:
    token, nonterminal - starting with 0.
  The first startsymbol refers to the whole grammar.
*/
typedef struct _KFGHEAD {
/* Grammar header */
  c_string  language;  /* Language short name                */
                       /* ( Prefix for code generation )     */
  int       TkCnt;     /* Number of tokens                   */
  int       NtCnt;     /* Number of nonterminals             */
  c_string* SNames;    /* Token and nonterminal names        */
  int       StartCnt;  /* Number of startsymbols             */
  int*      StartIds;  /* Indexes of startsymbols            */
                       /* ( 1. index : CFG startsymbol )     */
  int*      TokKind;   /* Token types                        */
  int*      NtClass;   /* Nonterminal Classes ( Indexes )    */
  c_bool*   ErrorNt;   /* ErrorNt[NTIndex] --> Reparse Point */
} KFGHEAD;
typedef struct _KFGPROD {
/* Production */
  c_string pname;   /* Production name[@<dsymidx>=<dsymsym>]      */
  int      method;  /* Production layout hint                     */
  int      id;      /* Nonterminal ( left production side )       */
  int      symcnt;  /* Number of production symbols               */
  int*     symbols; /* Production symbols ( Token, Nonterminals ) */
  int*     symfrms; /* Production symbol layout hints             */
                    /* ( != 0 ==> new line )                      */
  int      dsymidx; /* Index of dynamic production symbol or -1   */
  int      dsymsym; /* Introduced dynamic production symbol or -1 */
} KFGPROD;
typedef struct _LALR_1 {
/* LALR(1) syntax analysis tables */
  int  MstShiftCnt; /* Number of MstShift's */
  int* MstShift;    /* Master shift table   */
  int  DtlShiftCnt; /* Number of DtlShift's */
  int* DtlShift;    /* Detail shift table   */
  int  GoToCnt;     /* Number of GoTo's     */
  int* GoTo;        /* GoTo table           */
  int  GoToDftCnt;  /* Number of GoToDft's  */
  int* GoToDft;     /* Default GoTo table   */
  int  ActDftCnt;   /* Number of ActDft's   */
  int* ActDft;      /* Default action table */
  int  ActExpCnt;   /* Number of ActExp's   */
  int* ActExp;      /* Execpetion table     */
} LALR_1;
typedef struct _PARSETAB {
/* Parse table */
  KFGHEAD* Kfg;       /* Grammar header                        */
  int      ProdCnt;   /* Number of nonterminals                */
                      /* with productions, used for reductions */
  KFGPROD* Prod;      /* Productions                           */
  LALR_1   tabs;      /* LALR(1) syntax analysis tables        */
  int      Conflicts; /* Number of Conflicts                   */
} PARSETAB;
#define PLR_T_IMP(ptab) ( (PARSETAB*)(ptab) )
#endif