/*
- * Copyright 2001-2007 Adrian Thurston <thurston@cs.queensu.ca>
+ * Copyright 2001-2007 Adrian Thurston <thurston@complang.org>
*/
/* This file is part of Ragel.
#include "config.h"
#include <assert.h>
#include <iostream>
+#include <string>
#include "common.h"
#include "vector.h"
#include "bstset.h"
//#define LOG_CONDS
/* Flags that control merging. */
-#define SB_GRAPH1 0x01
-#define SB_GRAPH2 0x02
-#define SB_BOTH 0x03
-#define SB_ISFINAL 0x04
-#define SB_ISMARKED 0x08
-#define SB_ONLIST 0x10
+#define STB_GRAPH1 0x01
+#define STB_GRAPH2 0x02
+#define STB_BOTH 0x03
+#define STB_ISFINAL 0x04
+#define STB_ISMARKED 0x08
+#define STB_ONLIST 0x10
using std::ostream;
{
public:
- Action( const InputLoc &loc, char *name, InlineList *inlineList, int condId )
+ Action( const InputLoc &loc, const char *name, InlineList *inlineList, int condId )
:
loc(loc),
name(name),
}
/* Key for action dictionary. */
- char *getKey() const { return name; }
+ const char *getKey() const { return name; }
/* Data collected during parse. */
InputLoc loc;
- char *name;
+ const char *name;
InlineList *inlineList;
int actionId;
highKey(other.highKey),
fromState(0), toState(0),
actionTable(other.actionTable),
- priorTable(other.priorTable)
- {
- assert( lmActionTable.length() == 0 && other.lmActionTable.length() == 0 );
- }
+ priorTable(other.priorTable),
+ lmActionTable(other.lmActionTable) {}
Key lowKey, highKey;
StateAp *fromState;
struct CondData
{
- CondData() : nextCondKey(0) {}
+ CondData() : lastCondKey(0) {}
/* Condition info. */
- Key nextCondKey;
+ Key lastCondKey;
CondSpaceMap condSpaceMap;
};
extern CondData *condData;
+struct FsmConstructFail
+{
+ enum Reason
+ {
+ CondNoKeySpace
+ };
+
+ FsmConstructFail( Reason reason )
+ : reason(reason) {}
+ Reason reason;
+};
+
/* State class that implements actions and priorities. */
struct StateAp
{
~StateAp();
/* Is the state final? */
- bool isFinState() { return stateBits & SB_ISFINAL; }
+ bool isFinState() { return stateBits & STB_ISFINAL; }
/* Out transition list and the pointer for the default out trans. */
TransList outList;
/* In transition Lists. */
TransInList inList;
+ /* Set only during scanner construction when actions are added. NFA to DFA
+ * code can ignore this. */
+ StateAp *eofTarget;
+
/* Entry points into the state. */
EntryIdSet entryIds;
void leaveFsmPrior( int ordering, PriorDesc *prior );
/* Action setting support. */
+ void transferOutActions( StateAp *state );
void transferErrorActions( StateAp *state, int transferPoint );
+ void setErrorActions( StateAp *state, const ActionTable &other );
void setErrorAction( StateAp *state, int ordering, Action *action );
/* Fill all spaces in a transition list with an error transition. */