More work on the direct connection between frontend and backend. Now appears to
[external/ragel.git] / ragel / xmlcodegen.h
index 0809e80..22d6dec 100644 (file)
 #include "avltree.h"
 #include "fsmgraph.h"
 #include "parsedata.h"
+#include "redfsm.h"
 
 /* Forwards. */
 struct TransAp;
 struct FsmAp;
 struct ParseData;
+struct GenInlineList;
 
 struct RedActionTable
 :
@@ -76,15 +78,31 @@ struct NextRedTrans
        }
 };
 
-class XMLCodeGen
+struct GenBase
+{
+       GenBase( char *fsmName, ParseData *pd, FsmAp *fsm, XmlParser &xmlParser );
+
+       void appendTrans( TransListVect &outList, Key lowKey, Key highKey, TransAp *trans );
+       void reduceActionTables();
+
+       char *fsmName;
+       ParseData *pd;
+       FsmAp *fsm;
+       XmlParser &xmlParser;
+
+       ActionTableMap actionTableMap;
+       int nextActionTableId;
+};
+
+class XMLCodeGen : protected GenBase
 {
 public:
        XMLCodeGen( char *fsmName, ParseData *pd, FsmAp *fsm, 
                        std::ostream &out, XmlParser &xmlParser );
+
        void writeXML( );
 
 private:
-       void appendTrans( TransListVect &outList, Key lowKey, Key highKey, TransAp *trans );
        void writeStateActions( StateAp *state );
        void writeStateList();
        void writeStateConditions( StateAp *state );
@@ -98,7 +116,6 @@ private:
        void writeNext( InlineItem *item );
        void writeNextExpr( InlineItem *item );
        void writeEntry( InlineItem *item );
-       void writeLmSetActId( InlineItem *item );
        void writeLmOnLast( InlineItem *item );
        void writeLmOnNext( InlineItem *item );
        void writeLmOnLagBehind( InlineItem *item );
@@ -111,7 +128,6 @@ private:
        void writeActionList();
        void writeActionTableList();
        void reduceTrans( TransAp *trans );
-       void reduceActionTables();
        void writeTransList( StateAp *state );
        void writeEofTrans( StateAp *state );
        void writeTrans( Key lowKey, Key highKey, TransAp *defTrans );
@@ -120,14 +136,45 @@ private:
        void writeMachine();
        void writeActionExec( InlineItem *item );
 
-       char *fsmName;
-       ParseData *pd;
-       FsmAp *fsm;
        std::ostream &out;
-       XmlParser &xmlParser;
+};
 
-       ActionTableMap actionTableMap;
-       int nextActionTableId;
+class BackendGen : protected GenBase
+{
+public:
+       BackendGen( char *fsmName, ParseData *pd, FsmAp *fsm, XmlParser &xmlParser );
+       void makeBackend( );
+
+private:
+       void makeGenInlineList( GenInlineList *outList, InlineList *inList );
+       void makeKey( GenInlineList *outList, Key key );
+       void makeText( GenInlineList *outList, InlineItem *item );
+       void makeLmOnLast( GenInlineList *outList, InlineItem *item );
+       void makeLmOnNext( GenInlineList *outList, InlineItem *item );
+       void makeLmOnLagBehind( GenInlineList *outList, InlineItem *item );
+       void makeActionExec( GenInlineList *outList, InlineItem *item );
+       void makeLmSwitch( GenInlineList *outList, InlineItem *item );
+       void makeSetTokend( GenInlineList *outList, long offset );
+       void makeSetAct( GenInlineList *outList, long lmId );
+       void makeSubList( GenInlineList *outList, InlineList *inlineList, 
+                       GenInlineItem::Type type );
+       void makeTargetItem( GenInlineList *outList, long targetId, GenInlineItem::Type type );
+       void makeExecGetTokend( GenInlineList *outList );
+       void makeExports();
+       void makeMachine();
+       void makeActionList();
+       void makeAction( Action *action );
+       void makeActionTableList();
+       void makeConditions();
+       void makeEntryPoints();
+       bool makeNameInst( std::string &out, NameInst *nameInst );
+       void makeStateList();
+
+       void makeStateActions( StateAp *state );
+       void makeEofTrans( StateAp *state );
+       void makeStateConditions( StateAp *state );
+       void makeTransList( StateAp *state );
+       void makeTrans( Key lowKey, Key highKey, TransAp *trans );
 };