summaryrefslogtreecommitdiff
path: root/src/pdarun.h
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2012-08-01 13:18:02 +0000
committerAdrian Thurston <thurston@complang.org>2012-08-01 13:18:02 +0000
commit6bc9727d3ac615090bf5086cae43d225d3fb552f (patch)
tree695c7894d54b8b9de40e4cf347063e99238b7b0a /src/pdarun.h
parent39c9b4a6f1014cb30ee535d4f534d0dcc4fe5905 (diff)
downloadcolm-6bc9727d3ac615090bf5086cae43d225d3fb552f.tar.gz
revert "moved 'colm' dir to 'src'"
Colm includes a library component with headers installed to a private dir inside include: $prefix/include/colm. We need our headers to reference each other using this colm prefix. This needs to be true for compiling our source and also for compiling external programs. It is conventient to have all the source in a directory called colm and then to use -I <source-root> when building colm. We use $prefix/include when building external programs. This reverts commit 247904a84430b8c9151fa6afb68f01b60afb92c9.
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