summaryrefslogtreecommitdiff
path: root/colm/fsmcodegen.h
diff options
context:
space:
mode:
Diffstat (limited to 'colm/fsmcodegen.h')
-rw-r--r--colm/fsmcodegen.h212
1 files changed, 0 insertions, 212 deletions
diff --git a/colm/fsmcodegen.h b/colm/fsmcodegen.h
deleted file mode 100644
index 41cd88ec..00000000
--- a/colm/fsmcodegen.h
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright 2001-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 _FSMCODEGEN_H
-#define _FSMCODEGEN_H
-
-#include <iostream>
-#include <string>
-#include <stdio.h>
-#include "keyops.h"
-#include "parsedata.h"
-#include "redfsm.h"
-#include "fsmrun.h"
-
-using std::string;
-using std::ostream;
-
-/* Integer array line length. */
-#define IALL 8
-
-/* Forwards. */
-struct RedFsm;
-struct RedState;
-struct GenAction;
-struct NameInst;
-struct RedAction;
-struct LongestMatch;
-struct TokenDef;
-struct InlineList;
-struct InlineItem;
-struct NameInst;
-struct FsmCodeGen;
-
-typedef unsigned long ulong;
-typedef unsigned char uchar;
-
-
-/*
- * The interface to the parser
- */
-
-std::ostream *openOutput( char *inputFile );
-
-inline string itoa( int i )
-{
- char buf[16];
- sprintf( buf, "%i", i );
- return buf;
-}
-
-/*
- * class FsmCodeGen
- */
-class FsmCodeGen
-{
-public:
- FsmCodeGen( const char *sourceFileName, const char *fsmName, ostream &out,
- RedFsm *redFsm, FsmTables *fsmTables );
-
-protected:
- string FSM_NAME();
- string START_STATE_ID();
- ostream &ACTIONS_ARRAY();
- string GET_WIDE_KEY();
- string GET_WIDE_KEY( RedState *state );
- string TABS( int level );
- string KEY( Key key );
- string LDIR_PATH( char *path );
- void ACTION( ostream &ret, GenAction *action, int targState, bool inFinish );
- void CONDITION( ostream &ret, GenAction *condition );
- string ALPH_TYPE();
- string WIDE_ALPH_TYPE();
- string ARRAY_TYPE( unsigned long maxVal );
-
- string ARR_OFF( string ptr, string offset );
- string CAST( string type );
- string UINT();
- string GET_KEY();
-
- string ACCESS() { return "fsmRun->"; }
-
- string P() { return ACCESS() + "p"; }
- string PE() { return ACCESS() + "pe"; }
- string PEOF() { return ACCESS() + "peof"; }
-
- string CS();
- string TOP() { return ACCESS() + "top"; }
- string TOKSTART() { return ACCESS() + "tokstart"; }
- string TOKEND() { return ACCESS() + "tokend"; }
- string ACT() { return ACCESS() + "act"; }
- string MATCHED_TOKEN() { return ACCESS() + "matchedToken"; }
-
- string DATA_PREFIX();
-
- string START() { return DATA_PREFIX() + "start"; }
- string ERROR() { return DATA_PREFIX() + "error"; }
- string FIRST_FINAL() { return DATA_PREFIX() + "first_final"; }
-
- string ENTRY_BY_REGION() { return DATA_PREFIX() + "entryByRegion"; }
-
-
- void INLINE_LIST( ostream &ret, InlineList *inlineList,
- int targState, bool inFinish );
- void EXEC_TOKEND( ostream &ret, InlineItem *item, int targState, int inFinish );
- void EXECTE( ostream &ret, InlineItem *item, int targState, int inFinish );
- void LM_SWITCH( ostream &ret, InlineItem *item, int targState, int inFinish );
- void SET_ACT( ostream &ret, InlineItem *item );
- void INIT_TOKSTART( ostream &ret, InlineItem *item );
- void INIT_ACT( ostream &ret, InlineItem *item );
- void SET_TOKSTART( ostream &ret, InlineItem *item );
- void SET_TOKEND( ostream &ret, InlineItem *item );
- void GET_TOKEND( ostream &ret, InlineItem *item );
- void SUB_ACTION( ostream &ret, InlineItem *item, int targState, bool inFinish );
- void LM_ON_LAST( ostream &ret, InlineItem *item );
- void LM_ON_NEXT( ostream &ret, InlineItem *item );
- void LM_ON_LAG_BEHIND( ostream &ret, InlineItem *item );
- void EXEC_TOKEND( ostream &ret );
- void EMIT_TOKEN( ostream &ret, LangEl *token );
-
- string ERROR_STATE();
- string FIRST_FINAL_STATE();
-
- string PTR_CONST();
- ostream &OPEN_ARRAY( string type, string name );
- ostream &CLOSE_ARRAY();
- ostream &STATIC_VAR( string type, string name );
-
- string CTRL_FLOW();
-
- ostream &source_warning(const InputLoc &loc);
- ostream &source_error(const InputLoc &loc);
-
- unsigned int arrayTypeSize( unsigned long maxVal );
-
-/* subclass */
-
-public:
- const char *sourceFileName;
- const char *fsmName;
- ostream &out;
- RedFsm *redFsm;
- FsmTables *fsmTables;
- int codeGenErrCount;
-
- /* Write options. */
- bool dataPrefix;
- bool writeFirstFinal;
- bool writeErr;
-
- std::ostream &TO_STATE_ACTION_SWITCH();
- std::ostream &FROM_STATE_ACTION_SWITCH();
- std::ostream &ACTION_SWITCH();
- std::ostream &STATE_GOTOS();
- std::ostream &TRANSITIONS();
- std::ostream &EXEC_FUNCS();
-
- unsigned int TO_STATE_ACTION( RedState *state );
- unsigned int FROM_STATE_ACTION( RedState *state );
-
- std::ostream &TO_STATE_ACTIONS();
- std::ostream &FROM_STATE_ACTIONS();
-
- void COND_TRANSLATE( GenStateCond *stateCond, int level );
- void emitCondBSearch( RedState *state, int level, int low, int high );
- void STATE_CONDS( RedState *state, bool genDefault );
-
- void emitSingleSwitch( RedState *state );
- void emitRangeBSearch( RedState *state, int level, int low, int high );
-
- std::ostream &EXIT_STATES();
- std::ostream &TRANS_GOTO( RedTrans *trans, int level );
- std::ostream &FINISH_CASES();
-
- void writeIncludes();
- void writeData();
- void writeInit();
- void writeExec();
- void writeCode();
- void writeMain();
-
-protected:
- bool useAgainLabel();
-
- /* Called from GotoCodeGen::STATE_GOTOS just before writing the gotos for
- * each state. */
- bool IN_TRANS_ACTIONS( RedState *state );
- void GOTO_HEADER( RedState *state );
- void STATE_GOTO_ERROR();
-
- /* Set up labelNeeded flag for each state. */
- void setLabelsNeeded();
-};
-
-#endif /* _FSMCODEGEN_H */