[scn_imp.h] Scanner Implementation

contents



#include "standard.h"
/* all extended ascii */
//#define SCN_CHAR_SET_SIZE (256)
/* all UCS4 character */
#define SCN_CHAR_SET_SIZE   (0xFFFFFFFFu)
//#define SCN_CHAR_SET_SIZE   (~((wc_char)0))
/* token IDs within a dyck scanner */
#define SCN_DYCKTOKEN_PREFIX  1
#define SCN_DYCKTOKEN_SUFFIX  2
#define SCN_DYCKTOKEN_PATTERN 3
#define Scn_IMP(X) ((scn_t)(X))
#define Scn_ADT(X) ((Scn_T)(X))
#define SCN_Edges(X) (Scn_IMP(X)->StaEdg[Scn_IMP(X)->States])
ConcreteType(scn_t)
{
  c_string   Name;     /* lexical language ( or group ) name */
  /* single scanner */
  short      States;   /* number of states or 0              */
  short      Tokens;   /* number of tokens or 0              */
  long      *StaEdg;   /* [States] -> first edge             */
  short     *StaFin;   /* [States] -> (-1 or token)          */
  wc_char   *EdgeC ;   /* [Edges]  -> lower character        */
  long      *EdgeS ;   /* [Edges]  -> State                  */
  c_string  *TokId ;   /* [Tokens] -> string                 */
  c_byte    *Flags ;   /* [Tokens] -> ignore token           */
  /* group scanner  */
  short      Groups;   /* number of groups or 0              */
  scn_t     *GrpScn;   /* group scanners                     */
  short     *Switch;   /* [Tokens] -> Group                  */
  /* dyck token specification */
  short      dyckcnt;  /* number of dyck tokens              */
  short     *dyckidx;  /* [dyckcnt] -> token index           */
  scn_t     *dyckpat;  /* [dyckcnt] -> dyck scanner          */
};
#endif