Artifact Content

Not logged in

Artifact 3d5e049ef53978157eec494fe64ab18ae50613a9


     1  //--- K.I.LIB ---
     2  // kl_rythp.h : interpretor for simple script langauage 'Rythp'
     3  
     4  #ifndef AFX_KIRYTHPVM_H__4F3C28A9_7EFE_4605_A149_2C0B9A9236E5__INCLUDED_
     5  #define AFX_KIRYTHPVM_H__4F3C28A9_7EFE_4605_A149_2C0B9A9236E5__INCLUDED_
     6  
     7  /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
     8  // kiVar : Rythp用のVariant変数型。ほとんどただのkiStr。
     9  
    10  class kiVar : public kiStr
    11  {
    12  public:
    13  	kiVar() : kiStr(20) {}
    14  	explicit kiVar( const char* s ) : kiStr( s, 20 ){}
    15  	explicit kiVar( const kiStr& s ) : kiStr( s, 20 ){}
    16  	explicit kiVar( const kiVar& s ) : kiStr( s, 20 ){}
    17  	void operator = ( const char* s ){ kiStr::operator =(s); }
    18  
    19  	int getInt();
    20  	kiVar& quote();
    21  	kiVar& unquote();
    22  };
    23  
    24  /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
    25  // kiRythpVM : 最小限Rythp。実用には、派生して独自の exec_function を実装すべし
    26  
    27  class kiRythpVM
    28  {
    29  public:
    30  	kiRythpVM();
    31  	virtual ~kiRythpVM() {}
    32  
    33  public:
    34  	// eval
    35  	void eval( char* str, kiVar* ans=NULL );
    36  
    37  protected:
    38  	// 引数を適当にevalや変数置き換えをした形で取得
    39  	void getarg( char* a, bool b, kiVar* arg );
    40  
    41  	// function実行。[ bool=処理したか?、 name=function名、 a,b,c=引数、 r=返値 ]
    42  	virtual bool exec_function( const kiVar& name,
    43  		const CharArray& a, const BoolArray& b,int c, kiVar* r );
    44  
    45  private:
    46  	// 変数
    47  	kiVar ele[256];
    48  
    49  	// パラメータ分割
    50  	static char* split_tonext( char* p );
    51  	static char* split_toend( char* p );
    52  	static bool split( char* buf, CharArray& argv, BoolArray& argb, int& argc );
    53  };
    54  
    55  #endif