From 230f309317af6ae79f49091c9580223f756dbfb8 Mon Sep 17 00:00:00 2001 From: "kr.angelov" Date: Mon, 12 Mar 2012 14:25:51 +0000 Subject: libpgf: a new implementation for literals which also allows custom literals. the same mechanism is now used for the metavariables --- src/runtime/c/pgf/data.h | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src/runtime/c/pgf/data.h') diff --git a/src/runtime/c/pgf/data.h b/src/runtime/c/pgf/data.h index 4af0a6614..f1c107efd 100644 --- a/src/runtime/c/pgf/data.h +++ b/src/runtime/c/pgf/data.h @@ -209,6 +209,17 @@ extern GU_DECLARE_TYPE(PgfTransitions, GuStringMap); typedef GuMap PgfEpsilonIdx; extern GU_DECLARE_TYPE(PgfEpsilonIdx, GuMap); +typedef struct PgfLiteralCallback PgfLiteralCallback; +extern GU_DECLARE_TYPE(PgfLiteralCallback, struct); + +struct PgfLiteralCallback { + bool (*match)(PgfLiteralCallback* self, int lin_idx, PgfTokens toks, + PgfExprProb** out_ep, GuPool *pool); +}; + +typedef GuMap PgfCallbacksMap; +extern GU_DECLARE_TYPE(PgfCallbacksMap, GuMap); + struct PgfConcr { PgfFlags* cflags; PgfPrintNames* printnames; @@ -220,6 +231,7 @@ struct PgfConcr { PgfCncFuns* cncfuns; PgfSequences* sequences; PgfCIdMap* cnccats; + PgfCallbacksMap* callbacks; int total_cats; int max_fid; }; @@ -269,7 +281,7 @@ typedef struct PgfSymbolKP typedef enum { PGF_PRODUCTION_APPLY, PGF_PRODUCTION_COERCE, - PGF_PRODUCTION_META + PGF_PRODUCTION_EXTERN } PgfProductionTag; typedef struct PgfPArg PgfPArg; @@ -299,14 +311,10 @@ typedef struct PgfProductionCoerce } PgfProductionCoerce; typedef struct { - PgfExpr expr; // XXX - GuLength n_toks; - GuString toks[]; // XXX -} PgfProductionConst; - -typedef struct { + PgfFunId fun; PgfPArgs args; -} PgfProductionMeta; + PgfLiteralCallback *callback; +} PgfProductionExtern; extern GU_DECLARE_TYPE(PgfPatt, GuVariant); -- cgit v1.2.3