view tests/agcl/parsifal/good/xmlp8.h @ 24:a4899cdfc2d6 default tip

Obfuscate the regexps to strip off the IBM compiler's copyright banners. I don't want bots scanning github to think they're real copyright notices because that could cause real problems.
author David A. Holland
date Mon, 13 Jun 2022 00:40:23 -0400
parents 13d2b8934445
children
line wrap: on
line source

#ifndef XMLP8_H
#define XMLP8_H

#ifndef AG_OBJECT_WRAPPER_DEFINED
#define AG_OBJECT_WRAPPER_DEFINED

#ifndef AG_PLACEMENT_DELETE_REQUIRED
#if _MSC_VER >= 1200 || __INTEL_COMPILER
#define AG_PLACEMENT_DELETE_REQUIRED 1
#endif
#endif

template <class Object>
class AgObjectWrapper {
  Object object;
public:
  void operator delete(void *) {}
  void *operator new(size_t, void *p) { return p;}
#if AG_PLACEMENT_DELETE_REQUIRED
  void operator delete(void *, void *) { }
#endif
  AgObjectWrapper(const Object &o) : object(o) {}
  ~AgObjectWrapper() {}
  operator Object &() {return object;}
};

#endif

typedef union {
  long alignment;
  char ag_vt_2[sizeof(int)];
  char ag_vt_4[sizeof(AgObjectWrapper<AttvalPair >)];
  char ag_vt_5[sizeof(AgObjectWrapper<AgString >)];
  char ag_vt_6[sizeof(AgObjectWrapper<AttvalList >)];
  char ag_vt_7[sizeof(AgObjectWrapper<Attribute >)];
  char ag_vt_8[sizeof(AgObjectWrapper<AttributeList >)];
  char ag_vt_9[sizeof(AgObjectWrapper<Default >)];
  char ag_vt_10[sizeof(Attribute::Type)];
} parse_vs_type;

typedef enum {
  parse_document_token = 4, parse_prolog_token, parse_element_token,
  parse_Misc_token, parse_eof_token = 10, parse_S_token,
  parse_SpaceChar_token, parse_Name_token = 14, parse_NameChar_token = 16,
  parse_Names_token, parse_Nmtoken_token, parse_Nmtokens_token = 20,
  parse_EntityValue_token = 24, parse_PEReference_token = 27,
  parse_Reference_token, parse_AttValue_token = 37,
  parse_dq_AttValString_token, parse_sq_AttValString_token,
  parse_CharRef_token = 41, parse_EntityRef_token,
  parse_SystemLiteral_token = 44, parse_PubidLiteral_token = 51,
  parse_PubidChar_token, parse_Comment_token = 58,
  parse_comment_text_token = 60, parse_Char_token = 62, parse_PI_token,
  parse_PITarget_token = 65, parse_CDSect_token = 71, parse_CDStart_token,
  parse_CData_token, parse_CDEnd_token, parse_XMLDecl_token = 80,
  parse_doctypedecl_token = 82, parse_VersionInfo_token = 85,
  parse_VersionDecl_token, parse_EncodingDecl_token = 88,
  parse_SDDecl_token, parse_Eq_token = 91, parse_VersionNum_token,
  parse_ExternalID_token = 98, parse_markupdecl_token = 102,
  parse_elementdecl_token = 108, parse_AttlistDecl_token,
  parse_EntityDecl_token, parse_NotationDecl_token, parse_extSubset_token,
  parse_TextDecl_token, parse_extSubsetDecl_token = 115,
  parse_conditionalSect_token, parse_LanguageId_token = 125,
  parse_Langcode_token, parse_Subcode_token = 128,
  parse_ISO639Code_token = 132, parse_IanaCode_token, parse_UserCode_token,
  parse_EmptyElementTag_token = 140, parse_STag_token, parse_content_token,
  parse_ETag_token, parse_AttributeList_token = 145, parse_Attribute_token,
  parse_content_unit_token = 148, parse_contentspec_token = 153,
  parse_Mixed_token = 156, parse_Children_token, parse_choice_token,
  parse_seq_token, parse_cp_token = 165, parse_AttDefs_token = 182,
  parse_AttDef_token, parse_AttType_token, parse_DefaultDecl_token,
  parse_StringType_token, parse_TokenizedType_token,
  parse_EnumeratedType_token, parse_NotationType_token = 197,
  parse_Enumeration_token, parse_includeSect_token = 209,
  parse_ignoreSect_token, parse_ignoreSectContents_token = 214,
  parse_Ignore_token = 217, parse_decimal_CharRef_token = 221,
  parse_hex_CharRef_token = 223, parse_GEDecl_token = 230,
  parse_PEDecl_token, parse_EntityDef_token = 233, parse_PEDef_token,
  parse_NDataDecl_token, parse_extParsedEnt_token = 241, parse_extPE_token,
  parse_EncName_token = 244, parse_PublicID_token = 251,
  parse__last_token = 264
} parse_token_type;

typedef struct parse_pcb_struct{
  parse_token_type token_number, reduction_token, error_frame_token;
  int input_code;
  int input_value;
  int line, column;
  int ssx, sn, error_frame_ssx;
  int drt, dssx, dsn;
  int ss[128];
  parse_vs_type vs[128];
  int ag_ap;
  const char *error_message;
  char read_flag;
  char exit_flag;
  Context input_context;
  Context cs[128];
  int bts[128], btsx;
  int lab[11], rx, fx;
  const unsigned char *key_sp;
  int save_index, key_state;
  char ag_msg[82];
/*  Line -, xmlp8.syn */
    AgStack<AgString> tagStack;
    AgStack<Symtab> mapStack;
    AgString textStack;
    AgString spaceStack;
    enum TokenType {
      none,
      spaceType,
      textType,
      commentType,
      startType,
      endType,
      emptyType,
      entityRefType,
      //charRefType,
      errorType
    } tokenType;
    AgString currentTagName;
    AgString currentEntityName;
    //int currentCharRef;
    AgString commentString;
    Symtab currentMap;
    AgStack<Warning> warningList;
    AgBaseMapString<Element> elementMap;
    int dtdPresent;

    parse_pcb_struct();
    parse(char *input, AgString *);
    void spaceChar(int);
    void textChar(int);
    void startTag(const Context &, const AgString &, AttvalList &);
    void emptyTag(const Context &, const AgString &, AttvalList &);
    void endTag(const AgString &);
    void registerAttributes(const AgString &name, const AgBaseStack<Attribute> &AttributeList);
    void checkAttributes(const Context &, const AgString &name, Symtab &map);
    int warnAttval(const Context &context, const char *, const AttvalPair &p);
    static void normalize(AgString &s);
  } parse_pcb_type;

#ifndef PRULE_CONTEXT
#define PRULE_CONTEXT(pcb)  (&((pcb).cs[(pcb).ssx]))
#define PERROR_CONTEXT(pcb) ((pcb).cs[(pcb).error_frame_ssx])
#define PCONTEXT(pcb)       ((pcb).cs[(pcb).ssx])
#endif

#ifndef AG_RUNNING_CODE
/* PCB.exit_flag values */
#define AG_RUNNING_CODE         0
#define AG_SUCCESS_CODE         1
#define AG_SYNTAX_ERROR_CODE    2
#define AG_REDUCTION_ERROR_CODE 3
#define AG_STACK_ERROR_CODE     4
#define AG_SEMANTIC_ERROR_CODE  5
#endif
void init_parse(parse_pcb_type *);
void parse(parse_pcb_type *);
#endif