summaryrefslogtreecommitdiff
path: root/colm/parsedata.h
diff options
context:
space:
mode:
Diffstat (limited to 'colm/parsedata.h')
-rw-r--r--colm/parsedata.h25
1 files changed, 16 insertions, 9 deletions
diff --git a/colm/parsedata.h b/colm/parsedata.h
index f2c382f5..522a7aea 100644
--- a/colm/parsedata.h
+++ b/colm/parsedata.h
@@ -147,6 +147,7 @@ typedef Vector< TokenDef* > TokenDefVect;
struct UniqueType;
typedef Vector<KlangEl*> KlangElVect;
+typedef BstSet<KlangEl*> KlangElSet;
/* A language element class. Can be a nonTerm or a term. */
struct KlangEl : public DListEl<KlangEl>
@@ -178,6 +179,7 @@ struct KlangEl : public DListEl<KlangEl>
bool isRepeat;
bool isOpt;
bool parseStop;
+ bool isEOF;
/* Productions from the language element if it is a non-terminal. */
LelDefList defList;
@@ -185,10 +187,13 @@ struct KlangEl : public DListEl<KlangEl>
TokenDef *tokenDef;
Definition *rootDef;
KlangEl *termDup;
+ KlangEl *eofLel;
PdaGraph *pdaGraph;
PdaTables *pdaTables;
+ PdaState *startState;
+
CodeBlock *transBlock;
ObjectDef *objectDef;
@@ -635,14 +640,14 @@ struct ParseData
void lalr1AddFollow2( PdaGraph *pdaGraph, PdaTrans *trans, long followKey, long prior );
void lalr1AddFollow1( PdaGraph *pdaGraph, PdaTrans *trans );
- void lalr1AddFollowSets( PdaGraph *pdaGraph, KlangEl *rootEl );
+ void lalr1AddFollowSets( PdaGraph *pdaGraph, KlangElSet &parserEls );
void lr0BringInItem( PdaGraph *pdaGraph, PdaState *dest, PdaState *prodState,
PdaTrans *expandFrom, Definition *prod );
void lr0InvokeClosure( PdaGraph *pdaGraph, PdaState *state );
void lr0CloseAllStates( PdaGraph *pdaGraph );
- void lalr1GenerateParser( PdaGraph *pdaGraph, KlangEl *rootEl );
+ void lalr1GenerateParser( PdaGraph *pdaGraph, KlangElSet &parserEls );
void reduceActions( PdaGraph *pdaGraph );
@@ -657,13 +662,13 @@ struct ParseData
PdaState *followProd( PdaState *tabState, PdaState *prodState );
void findFollow( AlphSet &result, PdaState *overTab,
PdaState *overSrc, Definition *parentDef );
- void pdaActionOrder( PdaGraph *pdaGraph, KlangEl *rootEl );
+ void pdaActionOrder( PdaGraph *pdaGraph, KlangElSet &parserEls );
void pdaOrderFollow( KlangEl *rootEl, PdaState *tabState,
PdaTrans *tabTrans, PdaTrans *srcTrans,
Definition *parentDef, Definition *definition, long &time );
void pdaOrderProd( KlangEl *rootEl, PdaState *tabState,
PdaState *srcState, Definition *parentDef, long &time );
- void analyzeMachine( PdaGraph *pdaGraph, KlangEl *rootEl );
+ void analyzeMachine( PdaGraph *pdaGraph, KlangElSet &parserEls );
void makeProdFsms();
void insertUniqueEmptyProductions();
@@ -688,12 +693,11 @@ struct ParseData
void addProdRHSLoads( Definition *prod, CodeVect &code, long &insertPos );
void prepGrammar();
-
- void makePatternParsers();
void parsePatterns();
- void makeParser( KlangEl *rootEl );
- PdaGraph *makePdaGraph( KlangEl *rootEl );
+ void collectParserEls( KlangElSet &parserEls );
+ void makeParser( KlangElSet &parserEls );
+ PdaGraph *makePdaGraph( BstSet<KlangEl*> &parserEls );
PdaTables *makePdaTables( PdaGraph *pdaGraph );
void fillInPatterns( Program *prg );
@@ -702,7 +706,7 @@ struct ParseData
/* Generate and write out the fsm. */
void generateGraphviz();
- void verifyParseStopGrammar( KlangEl *langEl );
+ void verifyParseStopGrammar( KlangEl *langEl, PdaGraph *pdaGraph );
void initFieldInstructions( ObjField *el );
void initLocalInstructions( ObjField *el );
@@ -896,6 +900,9 @@ struct ParseData
bool revertOn;
RedFsm *redFsm;
+
+ PdaGraph *pdaGraph;
+ PdaTables *pdaTables;
};
void afterOpMinimize( FsmGraph *fsm, bool lastInSeq = true );