5128eecc9f 2011-02-23 kinaba: //--- K.I.LIB --- 5128eecc9f 2011-02-23 kinaba: // kl_rythp.h : interpretor for simple script langauage 'Rythp' 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: #ifndef AFX_KIRYTHPVM_H__4F3C28A9_7EFE_4605_A149_2C0B9A9236E5__INCLUDED_ 5128eecc9f 2011-02-23 kinaba: #define AFX_KIRYTHPVM_H__4F3C28A9_7EFE_4605_A149_2C0B9A9236E5__INCLUDED_ 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/ 5128eecc9f 2011-02-23 kinaba: // kiVar : Rythp用のVariant変数型。ほとんどただのkiStr。 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: class kiVar : public kiStr 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: public: 5128eecc9f 2011-02-23 kinaba: kiVar() : kiStr(20) {} 5128eecc9f 2011-02-23 kinaba: explicit kiVar( const char* s ) : kiStr( s, 20 ){} 5128eecc9f 2011-02-23 kinaba: explicit kiVar( const kiStr& s ) : kiStr( s, 20 ){} 5128eecc9f 2011-02-23 kinaba: explicit kiVar( const kiVar& s ) : kiStr( s, 20 ){} 5128eecc9f 2011-02-23 kinaba: void operator = ( const char* s ){ kiStr::operator =(s); } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: int getInt(); 5128eecc9f 2011-02-23 kinaba: void quote(); 5128eecc9f 2011-02-23 kinaba: }; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/ 5128eecc9f 2011-02-23 kinaba: // kiRythpVM : 最小限Rythp。実用には、派生して独自の exec_function を実装すべし 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: class kiRythpVM 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: public: 5128eecc9f 2011-02-23 kinaba: kiRythpVM(); 5128eecc9f 2011-02-23 kinaba: virtual ~kiRythpVM() {} 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: public: 5128eecc9f 2011-02-23 kinaba: // eval 5128eecc9f 2011-02-23 kinaba: void eval( char* str, kiVar* ans=NULL ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: protected: 5128eecc9f 2011-02-23 kinaba: // 引数を適当にevalや変数置き換えをした形で取得 5128eecc9f 2011-02-23 kinaba: void getarg( char* a, bool b, kiVar* arg ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // function実行。[ bool=処理したか?、 name=function名、 a,b,c=引数、 r=返値 ] 5128eecc9f 2011-02-23 kinaba: virtual bool exec_function( const kiVar& name, 5128eecc9f 2011-02-23 kinaba: const CharArray& a, const BoolArray& b,int c, kiVar* r ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: private: 5128eecc9f 2011-02-23 kinaba: // 変数 5128eecc9f 2011-02-23 kinaba: kiVar ele[256]; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // パラメータ分割 5128eecc9f 2011-02-23 kinaba: static char* split_tonext( char* p ); 5128eecc9f 2011-02-23 kinaba: static char* split_toend( char* p ); 5128eecc9f 2011-02-23 kinaba: static bool split( char* buf, CharArray& argv, BoolArray& argb, int& argc ); 5128eecc9f 2011-02-23 kinaba: }; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: #endif