"Fossies" - the Fresh Open Source Software Archive

Member "ragel-6.10/ragel/cdcodegen.h" (24 Mar 2017, 8347 Bytes) of package /linux/misc/ragel-6.10.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "cdcodegen.h" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 6.9_vs_6.10.

    1 /*
    2  *  Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
    3  *            2004 Erich Ocean <eric.ocean@ampede.com>
    4  *            2005 Alan West <alan@alanz.com>
    5  */
    6 
    7 /*  This file is part of Ragel.
    8  *
    9  *  Ragel is free software; you can redistribute it and/or modify
   10  *  it under the terms of the GNU General Public License as published by
   11  *  the Free Software Foundation; either version 2 of the License, or
   12  *  (at your option) any later version.
   13  * 
   14  *  Ragel is distributed in the hope that it will be useful,
   15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
   16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   17  *  GNU General Public License for more details.
   18  * 
   19  *  You should have received a copy of the GNU General Public License
   20  *  along with Ragel; if not, write to the Free Software
   21  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
   22  */
   23 
   24 #ifndef _CDCODEGEN_H
   25 #define _CDCODEGEN_H
   26 
   27 #include <iostream>
   28 #include <string>
   29 #include <stdio.h>
   30 #include "common.h"
   31 #include "gendata.h"
   32 
   33 using std::string;
   34 using std::ostream;
   35 
   36 /* Integer array line length. */
   37 #define IALL 8
   38 
   39 /* Forwards. */
   40 struct RedFsmAp;
   41 struct RedStateAp;
   42 struct CodeGenData;
   43 struct GenAction;
   44 struct NameInst;
   45 struct GenInlineItem;
   46 struct GenInlineList;
   47 struct RedAction;
   48 struct LongestMatch;
   49 struct LongestMatchPart;
   50 
   51 string itoa( int i );
   52 
   53 /*
   54  * class FsmCodeGen
   55  */
   56 class FsmCodeGen : public CodeGenData
   57 {
   58 public:
   59     FsmCodeGen( ostream &out );
   60     virtual ~FsmCodeGen() {}
   61 
   62     virtual void finishRagelDef();
   63     virtual void writeInit();
   64     virtual void writeStart();
   65     virtual void writeFirstFinal();
   66     virtual void writeError();
   67 
   68 protected:
   69     string FSM_NAME();
   70     string START_STATE_ID();
   71     ostream &ACTIONS_ARRAY();
   72     string GET_WIDE_KEY();
   73     string GET_WIDE_KEY( RedStateAp *state );
   74     string TABS( int level );
   75     string KEY( Key key );
   76     string WIDE_KEY( RedStateAp *state, Key key );
   77     string LDIR_PATH( char *path );
   78     virtual void ACTION( ostream &ret, GenAction *action, int targState, 
   79             bool inFinish, bool csForced );
   80     void CONDITION( ostream &ret, GenAction *condition );
   81     string ALPH_TYPE();
   82     string WIDE_ALPH_TYPE();
   83     string ARRAY_TYPE( unsigned long maxVal );
   84 
   85     bool isAlphTypeSigned();
   86     bool isWideAlphTypeSigned();
   87 
   88     virtual string ARR_OFF( string ptr, string offset ) = 0;
   89     virtual string CAST( string type ) = 0;
   90     virtual string UINT() = 0;
   91     virtual string NULL_ITEM() = 0;
   92     virtual string POINTER() = 0;
   93     virtual string GET_KEY();
   94     virtual ostream &SWITCH_DEFAULT() = 0;
   95 
   96     string P();
   97     string PE();
   98     string vEOF();
   99 
  100     string ACCESS();
  101     string vCS();
  102     string STACK();
  103     string TOP();
  104     string TOKSTART();
  105     string TOKEND();
  106     string ACT();
  107 
  108     string DATA_PREFIX();
  109     string PM() { return "_" + DATA_PREFIX() + "partition_map"; }
  110     string C() { return "_" + DATA_PREFIX() + "cond_spaces"; }
  111     string CK() { return "_" + DATA_PREFIX() + "cond_keys"; }
  112     string K() { return "_" + DATA_PREFIX() + "trans_keys"; }
  113     string I() { return "_" + DATA_PREFIX() + "indicies"; }
  114     string CO() { return "_" + DATA_PREFIX() + "cond_offsets"; }
  115     string KO() { return "_" + DATA_PREFIX() + "key_offsets"; }
  116     string IO() { return "_" + DATA_PREFIX() + "index_offsets"; }
  117     string CL() { return "_" + DATA_PREFIX() + "cond_lengths"; }
  118     string SL() { return "_" + DATA_PREFIX() + "single_lengths"; }
  119     string RL() { return "_" + DATA_PREFIX() + "range_lengths"; }
  120     string A() { return "_" + DATA_PREFIX() + "actions"; }
  121     string TA() { return "_" + DATA_PREFIX() + "trans_actions"; }
  122     string TT() { return "_" + DATA_PREFIX() + "trans_targs"; }
  123     string TSA() { return "_" + DATA_PREFIX() + "to_state_actions"; }
  124     string FSA() { return "_" + DATA_PREFIX() + "from_state_actions"; }
  125     string EA() { return "_" + DATA_PREFIX() + "eof_actions"; }
  126     string ET() { return "_" + DATA_PREFIX() + "eof_trans"; }
  127     string SP() { return "_" + DATA_PREFIX() + "key_spans"; }
  128     string CSP() { return "_" + DATA_PREFIX() + "cond_key_spans"; }
  129     string START() { return DATA_PREFIX() + "start"; }
  130     string ERROR() { return DATA_PREFIX() + "error"; }
  131     string FIRST_FINAL() { return DATA_PREFIX() + "first_final"; }
  132     string CTXDATA() { return DATA_PREFIX() + "ctxdata"; }
  133 
  134     void EOF_CHECK( ostream &ret );
  135 
  136     void INLINE_LIST( ostream &ret, GenInlineList *inlineList, 
  137             int targState, bool inFinish, bool csForced );
  138     virtual void GOTO( ostream &ret, int gotoDest, bool inFinish ) = 0;
  139     virtual void CALL( ostream &ret, int callDest, int targState, bool inFinish ) = 0;
  140     virtual void NEXT( ostream &ret, int nextDest, bool inFinish ) = 0;
  141     virtual void GOTO_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish ) = 0;
  142     virtual void NEXT_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish ) = 0;
  143     virtual void CALL_EXPR( ostream &ret, GenInlineItem *ilItem, 
  144             int targState, bool inFinish ) = 0;
  145     virtual void RET( ostream &ret, bool inFinish ) = 0;
  146     virtual void BREAK( ostream &ret, int targState, bool csForced ) = 0;
  147     virtual void CURS( ostream &ret, bool inFinish ) = 0;
  148     virtual void TARGS( ostream &ret, bool inFinish, int targState ) = 0;
  149     void EXEC( ostream &ret, GenInlineItem *item, int targState, int inFinish );
  150     void LM_SWITCH( ostream &ret, GenInlineItem *item, int targState, 
  151             int inFinish, bool csForced );
  152     void SET_ACT( ostream &ret, GenInlineItem *item );
  153     void INIT_TOKSTART( ostream &ret, GenInlineItem *item );
  154     void INIT_ACT( ostream &ret, GenInlineItem *item );
  155     void SET_TOKSTART( ostream &ret, GenInlineItem *item );
  156     void SET_TOKEND( ostream &ret, GenInlineItem *item );
  157     void GET_TOKEND( ostream &ret, GenInlineItem *item );
  158     virtual void SUB_ACTION( ostream &ret, GenInlineItem *item, 
  159             int targState, bool inFinish, bool csForced );
  160     void STATE_IDS();
  161 
  162     string ERROR_STATE();
  163     string FIRST_FINAL_STATE();
  164 
  165     virtual string PTR_CONST() = 0;
  166     virtual string PTR_CONST_END() = 0;
  167     virtual ostream &OPEN_ARRAY( string type, string name ) = 0;
  168     virtual ostream &CLOSE_ARRAY() = 0;
  169     virtual ostream &STATIC_VAR( string type, string name ) = 0;
  170 
  171     virtual string CTRL_FLOW() = 0;
  172 
  173     ostream &source_warning(const InputLoc &loc);
  174     ostream &source_error(const InputLoc &loc);
  175 
  176     unsigned int arrayTypeSize( unsigned long maxVal );
  177 
  178     bool outLabelUsed;
  179     bool testEofUsed;
  180     bool againLabelUsed;
  181     bool useIndicies;
  182 
  183     void genLineDirective( ostream &out );
  184 
  185 public:
  186     /* Determine if we should use indicies. */
  187     virtual void calcIndexSize() {}
  188 };
  189 
  190 class CCodeGen : virtual public FsmCodeGen
  191 {
  192 public:
  193     CCodeGen( ostream &out ) : FsmCodeGen(out) {}
  194 
  195     virtual string NULL_ITEM();
  196     virtual string POINTER();
  197     virtual ostream &SWITCH_DEFAULT();
  198     virtual ostream &OPEN_ARRAY( string type, string name );
  199     virtual ostream &CLOSE_ARRAY();
  200     virtual ostream &STATIC_VAR( string type, string name );
  201     virtual string ARR_OFF( string ptr, string offset );
  202     virtual string CAST( string type );
  203     virtual string UINT();
  204     virtual string PTR_CONST();
  205     virtual string PTR_CONST_END();
  206     virtual string CTRL_FLOW();
  207 
  208     virtual void writeExports();
  209 };
  210 
  211 class DCodeGen : virtual public FsmCodeGen
  212 {
  213 public:
  214     DCodeGen( ostream &out ) : FsmCodeGen(out) {}
  215 
  216     virtual string NULL_ITEM();
  217     virtual string POINTER();
  218     virtual ostream &SWITCH_DEFAULT();
  219     virtual ostream &OPEN_ARRAY( string type, string name );
  220     virtual ostream &CLOSE_ARRAY();
  221     virtual ostream &STATIC_VAR( string type, string name );
  222     virtual string ARR_OFF( string ptr, string offset );
  223     virtual string CAST( string type );
  224     virtual string UINT();
  225     virtual string PTR_CONST();
  226     virtual string PTR_CONST_END();
  227     virtual string CTRL_FLOW();
  228 
  229     virtual void writeExports();
  230 };
  231 
  232 class D2CodeGen : virtual public FsmCodeGen
  233 {
  234 public:
  235     D2CodeGen( ostream &out ) : FsmCodeGen(out) {}
  236 
  237     virtual string NULL_ITEM();
  238     virtual string POINTER();
  239     virtual ostream &SWITCH_DEFAULT();
  240     virtual ostream &OPEN_ARRAY( string type, string name );
  241     virtual ostream &CLOSE_ARRAY();
  242     virtual ostream &STATIC_VAR( string type, string name );
  243     virtual string ARR_OFF( string ptr, string offset );
  244     virtual string CAST( string type );
  245     virtual string UINT();
  246     virtual string PTR_CONST();
  247     virtual string PTR_CONST_END();
  248     virtual string CTRL_FLOW();
  249 
  250     virtual void writeExports();
  251     virtual void SUB_ACTION( ostream &ret, GenInlineItem *item, 
  252             int targState, bool inFinish, bool csForced );
  253     virtual void ACTION( ostream &ret, GenAction *action, int targState, 
  254             bool inFinish, bool csForced );
  255 
  256 };
  257 
  258 #endif