summaryrefslogtreecommitdiff
path: root/src/pdarun.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/pdarun.h')
-rw-r--r--src/pdarun.h473
1 files changed, 0 insertions, 473 deletions
diff --git a/src/pdarun.h b/src/pdarun.h
deleted file mode 100644
index 1bdf651c..00000000
--- a/src/pdarun.h
+++ /dev/null
@@ -1,473 +0,0 @@
-/*
- * Copyright 2007-2012 Adrian Thurston <thurston@complang.org>
- */
-
-/* This file is part of Colm.
- *
- * Colm is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Colm is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Colm; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __COLM_PDARUN_H
-#define __COLM_PDARUN_H
-
-#include <input.h>
-#include <fsmrun.h>
-#include <defs.h>
-#include <tree.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct ColmProgram;
-
-#define MARK_SLOTS 32
-
-typedef struct _FsmTables
-{
- long *actions;
- long *keyOffsets;
- char *transKeys;
- long *singleLengths;
- long *rangeLengths;
- long *indexOffsets;
- long *transTargsWI;
- long *transActionsWI;
- long *toStateActions;
- long *fromStateActions;
- long *eofActions;
- long *eofTargs;
- long *entryByRegion;
-
- long numStates;
- long numActions;
- long numTransKeys;
- long numSingleLengths;
- long numRangeLengths;
- long numIndexOffsets;
- long numTransTargsWI;
- long numTransActionsWI;
- long numRegions;
-
- long startState;
- long firstFinal;
- long errorState;
-
- struct GenAction **actionSwitch;
- long numActionSwitch;
-} FsmTables;
-
-typedef struct _FsmRun
-{
- FsmTables *tables;
-
- RunBuf *runBuf;
-
- /* FsmRun State. */
- long region, preRegion;
- long cs, ncs, act;
- char *tokstart, *tokend;
- char *p, *pe, *peof;
- int returnResult;
- char *mark[MARK_SLOTS];
- long matchedToken;
-
- InputStream *attachedInput;
- SourceStream *attachedSource;
-} FsmRun;
-
-void initFsmRun( FsmRun *fsmRun, struct ColmProgram *prg );
-void clearFsmRun( struct ColmProgram *prg, FsmRun *fsmRun );
-void updatePosition( InputStream *inputStream, const char *data, long length );
-void undoPosition( InputStream *inputStream, const char *data, long length );
-void sendBackRunBufHead( FsmRun *fsmRun, InputStream *inputStream );
-void undoStreamPull( FsmRun *fsmRun, InputStream *inputStream, const char *data, long length );
-
-
-#if SIZEOF_LONG != 4 && SIZEOF_LONG != 8
- #error "SIZEOF_LONG contained an unexpected value"
-#endif
-
-struct _Execution;
-
-typedef struct _RtCodeVect
-{
- Code *data;
- long tabLen;
- long allocLen;
-
- /* FIXME: leak when freed. */
-} RtCodeVect;
-
-void listAddAfter( List *list, ListEl *prev_el, ListEl *new_el );
-void listAddBefore( List *list, ListEl *next_el, ListEl *new_el );
-
-void listPrepend( List *list, ListEl *new_el );
-void listAppend( List *list, ListEl *new_el );
-
-ListEl *listDetach( List *list, ListEl *el );
-ListEl *listDetachFirst(List *list );
-ListEl *listDetachLast(List *list );
-
-long listLength(List *list);
-
-typedef struct _FunctionInfo
-{
- const char *name;
- long frameId;
- long argSize;
- long frameSize;
-} FunctionInfo;
-
-/*
- * Program Data.
- */
-
-typedef struct _PatReplInfo
-{
- long offset;
- long numBindings;
-} PatReplInfo;
-
-typedef struct _PatReplNode
-{
- long id;
- long prodNum;
- long next;
- long child;
- long bindId;
- const char *data;
- long length;
- long leftIgnore;
- long rightIgnore;
-
- /* Just match nonterminal, don't go inside. */
- unsigned char stop;
-} PatReplNode;
-
-/* FIXME: should have a descriptor for object types to give the length. */
-
-typedef struct _LangElInfo
-{
- const char *name;
- const char *xmlTag;
- unsigned char repeat;
- unsigned char list;
- unsigned char literal;
- unsigned char ignore;
-
- long frameId;
-
- long objectTypeId;
- long ofiOffset;
- long objectLength;
-
-// long contextTypeId;
-// long contextLength;
-
- long termDupId;
- long genericId;
- long markId;
- long captureAttr;
- long numCaptureAttr;
-} LangElInfo;
-
-typedef struct _ObjFieldInfo
-{
- int typeId;
-} ObjFieldInfo;
-
-typedef struct _ProdInfo
-{
- unsigned long lhsId;
- short prodNum;
- long length;
- const char *name;
- long frameId;
- unsigned char lhsUpref;
- unsigned char *copy;
- long copyLen;
-} ProdInfo;
-
-typedef struct _FrameInfo
-{
- Code *codeWV;
- long codeLenWV;
- Code *codeWC;
- long codeLenWC;
- char *trees;
- long treesLen;
- long argSize;
- long frameSize;
-} FrameInfo;
-
-typedef struct _RegionInfo
-{
- const char *name;
- long defaultToken;
- long eofFrameId;
- int isIgnoreOnly;
- int isCiOnly;
- int ciLelId;
-} RegionInfo;
-
-typedef struct _CaptureAttr
-{
- long mark_enter;
- long mark_leave;
- long offset;
-} CaptureAttr;
-
-typedef struct _PdaTables
-{
- /* Parser table data. */
- int *indicies;
- int *owners;
- int *keys;
- unsigned int *offsets;
- unsigned int *targs;
- unsigned int *actInds;
- unsigned int *actions;
- int *commitLen;
- int *tokenRegionInds;
- int *tokenRegions;
- int *tokenPreRegions;
-
- int numIndicies;
- int numKeys;
- int numStates;
- int numTargs;
- int numActInds;
- int numActions;
- int numCommitLen;
- int numRegionItems;
- int numPreRegionItems;
-} PdaTables;
-
-typedef struct _PoolBlock
-{
- void *data;
- struct _PoolBlock *next;
-} PoolBlock;
-
-typedef struct _PoolItem
-{
- struct _PoolItem *next;
-} PoolItem;
-
-typedef struct _PoolAlloc
-{
- PoolBlock *head;
- long nextel;
- PoolItem *pool;
- int sizeofT;
-} PoolAlloc;
-
-typedef struct _PdaRun
-{
- int numRetry;
- ParseTree *stackTop;
- Ref *tokenList;
- int cs;
- int nextRegionInd;
-
- PdaTables *tables;
- int parserId;
-
- /* Reused. */
- RtCodeVect rcodeCollect;
- RtCodeVect reverseCode;
-
- int stopParsing;
- long stopTarget;
-
- ParseTree *accumIgnore;
-
- Kid *btPoint;
-
- struct Bindings *bindings;
-
- int revertOn;
-
- Tree *context;
-
- int stop;
- int parseError;
-
- long steps;
- long targetSteps;
-
- int onDeck;
-
- /*
- * Data we added when refactoring the parsing engine into a coroutine.
- */
-
- ParseTree *parseInput;
- FrameInfo *fi;
- int reduction;
- ParseTree *redLel;
- int curState;
- ParseTree *lel;
- int triggerUndo;
-
- int tokenId;
- Head *tokdata;
- int frameId;
- int next;
- ParseTree *undoLel;
-
- int checkNext;
- int checkStop;
-
- /* The lhs is sometimes saved before reduction actions in case it is
- * replaced and we need to restore it on backtracking */
- Tree *parsed;
-
- int reject;
-
- /* Instruction pointer to use when we stop parsing and execute code. */
- Code *code;
-
- int rcBlockCount;
-} PdaRun;
-
-void rtCodeVectReplace( RtCodeVect *vect, long pos, const Code *val, long len );
-void rtCodeVectEmpty( RtCodeVect *vect );
-void rtCodeVectRemove( RtCodeVect *vect, long pos, long len );
-
-void initRtCodeVect( RtCodeVect *codeVect );
-
-//inline static void remove( RtCodeVect *vect, long pos );
-inline static void append( RtCodeVect *vect, const Code val );
-inline static void append2( RtCodeVect *vect, const Code *val, long len );
-inline static void appendHalf( RtCodeVect *vect, Half half );
-inline static void appendWord( RtCodeVect *vect, Word word );
-
-inline static void append2( RtCodeVect *vect, const Code *val, long len )
-{
- rtCodeVectReplace( vect, vect->tabLen, val, len );
-}
-
-inline static void append( RtCodeVect *vect, const Code val )
-{
- rtCodeVectReplace( vect, vect->tabLen, &val, 1 );
-}
-
-inline static void appendHalf( RtCodeVect *vect, Half half )
-{
- /* not optimal. */
- append( vect, half & 0xff );
- append( vect, (half>>8) & 0xff );
-}
-
-inline static void appendWord( RtCodeVect *vect, Word word )
-{
- /* not optimal. */
- append( vect, word & 0xff );
- append( vect, (word>>8) & 0xff );
- append( vect, (word>>16) & 0xff );
- append( vect, (word>>24) & 0xff );
- #if SIZEOF_LONG == 8
- append( vect, (word>>32) & 0xff );
- append( vect, (word>>40) & 0xff );
- append( vect, (word>>48) & 0xff );
- append( vect, (word>>56) & 0xff );
- #endif
-}
-
-void incrementSteps( PdaRun *pdaRun );
-void decrementSteps( PdaRun *pdaRun );
-
-int makeReverseCode( PdaRun *pdaRun );
-void transferReverseCode( PdaRun *pdaRun, ParseTree *tree );
-
-void initPdaRun( PdaRun *pdaRun, struct ColmProgram *prg, PdaTables *tables,
- FsmRun *fsmRun, int parserId, long stopTarget, int revertOn, Tree *context );
-void clearPdaRun( struct ColmProgram *prg, Tree **root, PdaRun *pdaRun );
-
-void initInputStream( InputStream *inputStream );
-void clearInputStream( struct ColmProgram *prg, Tree **sp, InputStream *inputStream );
-void initSourceStream( SourceStream *in );
-void clearSourceStream( struct ColmProgram *prg, Tree **sp, SourceStream *sourceStream );
-
-
-void clearContext( PdaRun *pdaRun, Tree **sp );
-Kid *extractIgnore( PdaRun *pdaRun );
-long stackTopTarget( struct ColmProgram *prg, PdaRun *pdaRun );
-void runCommit( PdaRun *pdaRun );
-int isParserStopFinished( PdaRun *pdaRun );
-void pdaRunMatch( PdaRun *pdaRun, Kid *tree, Kid *pattern );
-
-/* Offset can be used to look at the next nextRegionInd. */
-int pdaRunGetNextRegion( PdaRun *pdaRun, int offset );
-int pdaRunGetNextPreRegion( PdaRun *pdaRun );
-
-#define PcrStart 1
-#define PcrDone 2
-#define PcrReduction 3
-#define PcrGeneration 4
-#define PcrPreEof 5
-#define PcrReverse 6
-
-long parseToken( struct ColmProgram *prg, Tree **sp, PdaRun *pdaRun,
- FsmRun *fsmRun, InputStream *inputStream, long entry );
-
-long undoParse( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream, Tree *tree );
-
-Head *streamPull( struct ColmProgram *prg, FsmRun *fsmRun, InputStream *inputStream, long length );
-Head *stringAllocPointer( struct ColmProgram *prg, const char *data, long length );
-
-void streamPushText( FsmRun *fsmRun, InputStream *inputStream, const char *data, long length );
-void streamPushTree( FsmRun *fsmRun, InputStream *inputStream, Tree *tree, int ignore );
-void undoStreamPush( struct ColmProgram *prg, Tree **sp, FsmRun *fsmRun, InputStream *inputStream, long length );
-void undoStreamAppend( struct ColmProgram *prg, Tree **sp, FsmRun *fsmRun, InputStream *inputStream, struct ColmTree *tree, long length );
-Kid *makeTokenWithData( struct ColmProgram *prg, PdaRun *pdaRun, FsmRun *fsmRun,
- InputStream *inputStream, int id, Head *tokdata );
-
-void pushBinding( PdaRun *pdaRun, ParseTree *parseTree );
-void popBinding( PdaRun *pdaRun, ParseTree *parseTree );
-
-void executeGenerationAction( struct ColmProgram *prg, Tree **sp, FsmRun *fsmRun, PdaRun *pdaRun,
- InputStream *inputStream, int frameId, Code *code, long id, Head *tokdata );
-Kid *extractIgnore( PdaRun *pdaRun );
-long sendBackQueuedIgnore( struct ColmProgram *prg, Tree **sp, InputStream *inputStream,
- FsmRun *fsmRun, PdaRun *pdaRun, long entry );
-void clearIgnoreList( struct ColmProgram *prg, Tree **sp, Kid *kid );
-Head *extractMatch( struct ColmProgram *prg, FsmRun *fsmRun, InputStream *inputStream );
-Head *extractMatch( struct ColmProgram *prg, FsmRun *fsmRun, InputStream *inputStream );
-void newToken( struct ColmProgram *prg, PdaRun *pdaRun, FsmRun *fsmRun );
-void fsmExecute( FsmRun *fsmRun, InputStream *inputStream );
-void sendNamedLangEl( struct ColmProgram *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream );
-long parseLoop( struct ColmProgram *prg, Tree **sp, PdaRun *pdaRun,
- FsmRun *fsmRun, InputStream *inputStream, long entry );
-void initBindings( PdaRun *pdaRun );
-Tree *getParsedRoot( PdaRun *pdaRun, int stop );
-void undoParseStream( struct ColmProgram *prg, Tree **sp, InputStream *inputStream, FsmRun *fsmRun,
- PdaRun *pdaRun, long steps );
-
-void clearBuffered( FsmRun *fsmRun );
-void resetToken( FsmRun *fsmRun );
-
-void detachInput( FsmRun *fsmRun, InputStream *is );
-void attachInput( FsmRun *fsmRun, InputStream *is );
-void detachSource( FsmRun *fsmRun, SourceStream *ss );
-void attachSource( FsmRun *fsmRun, SourceStream *ss );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif