#ifndef PGF_DATA_H_ #define PGF_DATA_H_ #include #include #include #include #include #include #include #include #include "pgf.h" #ifdef _WIN32 #include typedef SSIZE_T ssize_t; #endif #ifdef __APPLE__ #include #endif #ifdef EMSCRIPTEN #include #include #endif #ifdef _MSC_VER #include #define alloca _alloca #define strdup _strdup #pragma warning(disable : 4996) #endif class PGF_INTERNAL_DECL pgf_error : public std::runtime_error { public: pgf_error(const char *msg) : std::runtime_error(msg) { this->msg = msg; } virtual const char *what() const throw () { return msg; } private: const char *msg; }; class PGF_INTERNAL_DECL pgf_systemerror : public std::runtime_error { public: pgf_systemerror(int code) : std::runtime_error("pgf_systemerror") { this->m_code = code; this->m_filepath = NULL; } pgf_systemerror(int code, const char *filepath) : std::runtime_error("pgf_systemerror") { this->m_code = code; this->m_filepath = filepath; } virtual int code() const { return m_code; } const char *filepath() const { return m_filepath; } private: int m_code; const char *m_filepath; }; struct PgfPGF; struct PgfAbsFun; struct PgfConcr; #include "db.h" #include "text.h" #include "vector.h" #include "namespace.h" #include "phrasetable.h" #include "probspace.h" #include "expr.h" struct PGF_INTERNAL_DECL PgfFlag { PgfLiteral value; PgfText name; static void release(ref pgf); }; struct PGF_INTERNAL_DECL PgfAbsFun { ref type; int arity; ref bytecode; prob_t prob; PgfText name; static void release(ref cat); }; struct PGF_INTERNAL_DECL PgfAbsCat { ref> context; prob_t prob; PgfText name; static void release(ref cat); }; typedef struct { ref name; Namespace aflags; Namespace funs; Namespace cats; PgfProbspace funs_by_cat; } PgfAbstr; struct PGF_INTERNAL_DECL PgfLParam { size_t i0; size_t n_terms; struct { size_t factor; size_t var; } terms[]; static void release(ref param); }; struct PGF_INTERNAL_DECL PgfVariableRange { size_t var; size_t range; }; struct PGF_INTERNAL_DECL PgfPArg { ref param; }; struct PGF_INTERNAL_DECL PgfPResult { ref> vars; PgfLParam param; static void release(ref res); }; typedef object PgfSymbol; struct PGF_INTERNAL_DECL PgfSequence { Vector syms; static void release(ref seq); }; struct PGF_INTERNAL_DECL PgfSequenceBackref { object container; size_t seq_index; }; struct PGF_INTERNAL_DECL PgfSymbolCat { static const uint8_t tag = 0; size_t d; PgfLParam r; }; struct PGF_INTERNAL_DECL PgfSymbolLit { static const uint8_t tag = 1; size_t d; PgfLParam r; }; struct PGF_INTERNAL_DECL PgfSymbolVar { static const uint8_t tag = 2; size_t d, r; }; struct PGF_INTERNAL_DECL PgfSymbolKS { static const uint8_t tag = 3; PgfText token; }; struct PGF_INTERNAL_DECL PgfAlternative { ref form; /**< The form of this variant as a list of tokens. */ ref>> prefixes; /**< The prefixes of the following symbol that trigger this * form. */ }; struct PGF_INTERNAL_DECL PgfSymbolKP { static const uint8_t tag = 4; ref default_form; Vector alts; }; struct PGF_INTERNAL_DECL PgfSymbolBIND { static const uint8_t tag = 5; }; struct PGF_INTERNAL_DECL PgfSymbolSOFTBIND { static const uint8_t tag = 6; }; struct PGF_INTERNAL_DECL PgfSymbolNE { static const uint8_t tag = 7; }; struct PGF_INTERNAL_DECL PgfSymbolSOFTSPACE { static const uint8_t tag = 8; }; struct PGF_INTERNAL_DECL PgfSymbolCAPIT { static const uint8_t tag = 9; }; struct PGF_INTERNAL_DECL PgfSymbolALLCAPIT { static const uint8_t tag = 10; }; struct PGF_INTERNAL_DECL PgfConcrLincat { static const uint8_t tag = 0; ref abscat; size_t n_lindefs; ref> args; ref>> res; ref>> seqs; ref>> fields; PgfText name; static void release(ref lincat); }; struct PGF_INTERNAL_DECL PgfConcrLin { static const uint8_t tag = 1; ref absfun; ref lincat; ref> args; ref>> res; ref>> seqs; PgfText name; static void release(ref lin); }; struct PGF_INTERNAL_DECL PgfConcrPrintname { ref printname; PgfText name; static void release(ref printname); }; struct PGF_INTERNAL_DECL PgfLRShift { size_t next_state; ref lincat; size_t r; }; struct PGF_INTERNAL_DECL PgfLRShiftKS { size_t next_state; ref seq; size_t sym_idx; }; struct PgfLRReduceArg; struct PGF_INTERNAL_DECL PgfLRProduction { ref lin; size_t index; ref>> args; }; struct PGF_INTERNAL_DECL PgfLRReduceArg { static const uint8_t tag = 2; size_t id; size_t n_prods; PgfLRProduction prods[]; }; struct PGF_INTERNAL_DECL PgfLRReduce { object lin_obj; size_t seq_idx; size_t depth; struct Arg { ref arg; size_t stk_idx; }; ref> args; }; struct PGF_INTERNAL_DECL PgfLRState { ref> shifts; ref> tokens; ref> reductions; }; typedef Vector PgfLRTable; struct PGF_INTERNAL_DECL PgfConcr { static const uint8_t tag = 1; Namespace cflags; Namespace lins; Namespace lincats; PgfPhrasetable phrasetable; Namespace printnames; ref lrtable; PgfText name; static void release(ref pgf); }; struct PGF_INTERNAL_DECL PgfPGF { static const uint8_t tag = 0; uint16_t major_version; uint16_t minor_version; Namespace gflags; PgfAbstr abstract; Namespace concretes; static void release(ref pgf); }; #endif