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