view tests/agcl/parsifal/good/xmlp8.h @ 21:1c9dac05d040

Add lint-style FALLTHROUGH annotations to fallthrough cases. (in the parse engine and thus the output code) Document this, because the old output causes warnings with gcc10.
author David A. Holland
date Mon, 13 Jun 2022 00:04:38 -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