KSGSBefehl.h 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. #ifndef KSGSBefehl_H
  2. #define KSGSBefehl_H
  3. #include <Array.h>
  4. #include <Text.h>
  5. using namespace Framework;
  6. namespace KSGScript
  7. {
  8. class KSGScriptObj; // ../Main/KSGScriptObj.h
  9. struct KSGSLeseBefehl; // ../Leser/KSGSLeser.h
  10. struct KSGSLeseDebug; // ../Leser/KSGSLeser.h
  11. struct KSGSBefehlParameter; // aus dieser Datei
  12. class KSGSCompKlassTable; // ../Leser/Compile.h
  13. class KSGSCompFuncTable; // ../Leser/Compile.h
  14. class KSGSCompVarTable; // ../Leser/Compile.h
  15. class KSGSBefehl; // aus dieser Datei
  16. class KSGSFunktionInstanz; // KSGSFunktion
  17. class KSGSVariable; // KSGSKlasse.h
  18. struct KSGSBefehlVariable
  19. {
  20. int varId;
  21. int varSichtbar; // 0 = global, 1 = klasse, 2 = parameter, 3 = lokal
  22. // Konstruktor
  23. __declspec( dllexport ) KSGSBefehlVariable( Text *txt, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT, KSGSCompVarTable *zVT,
  24. const char *klassName, const char *funktionName, int *typId, bool *ok );
  25. };
  26. struct KSGSBefehlFunktion
  27. {
  28. int funcId;
  29. int funkSichtbar;
  30. Array< KSGSBefehlParameter* > parameter;
  31. // Konstruktor
  32. __declspec( dllexport ) KSGSBefehlFunktion( KSGScriptObj *zObj, Text *txt, KSGSLeseDebug *dbg, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT, KSGSCompVarTable *zVT,
  33. const char *klassName, const char *funktionName, int *typId, bool *ok );
  34. // Destruktor
  35. ~KSGSBefehlFunktion();
  36. };
  37. struct KSGSBefehlMember
  38. {
  39. enum Typ
  40. {
  41. BEFEHL,
  42. FUNKTION,
  43. VARIABLE
  44. };
  45. Typ typ;
  46. KSGSBefehl *bef;
  47. KSGSBefehlFunktion *funk;
  48. KSGSBefehlVariable *var;
  49. // Konstruktor
  50. __declspec( dllexport ) KSGSBefehlMember( KSGScriptObj *zObj, Text *txt, KSGSLeseDebug *dbg, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  51. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName, int *typId, bool *ok );
  52. // Destruktor
  53. __declspec( dllexport ) ~KSGSBefehlMember();
  54. };
  55. struct KSGSBefehlParameter
  56. {
  57. enum Typ
  58. {
  59. WERT,
  60. OBJEKT
  61. };
  62. Typ typ;
  63. Text wert;
  64. Array< KSGSBefehlMember* > objekt;
  65. // Konstruktor
  66. __declspec( dllexport ) KSGSBefehlParameter( KSGScriptObj *zObj, Text *txt, KSGSLeseDebug *dbg, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  67. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName, int *typId, bool *ok );
  68. // Destruktor
  69. __declspec( dllexport ) ~KSGSBefehlParameter();
  70. };
  71. struct KSGSBefehlErstell
  72. {
  73. int id;
  74. int typId;
  75. bool konstruktor;
  76. KSGSBefehlParameter *param;
  77. // Konstruktor
  78. __declspec( dllexport ) KSGSBefehlErstell( KSGScriptObj *zObj, Text *txt, KSGSLeseDebug *dbg, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  79. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName, bool *ok );
  80. // Destruktor
  81. __declspec( dllexport ) ~KSGSBefehlErstell();
  82. };
  83. class KSGSBefehl
  84. {
  85. public:
  86. enum Typ
  87. {
  88. CALL,
  89. OPERATOR,
  90. IF,
  91. FOR,
  92. WHILE,
  93. RETURN,
  94. BREAK,
  95. CONTINUE,
  96. VARIABLE
  97. };
  98. protected:
  99. Typ typ;
  100. bool fehler;
  101. int returnTyp;
  102. int ref;
  103. public:
  104. // Konstruktor
  105. __declspec( dllexport ) KSGSBefehl( Typ typ );
  106. // Destruktor
  107. __declspec( dllexport ) virtual ~KSGSBefehl();
  108. // constant
  109. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const;
  110. __declspec( dllexport ) bool hatFehler() const;
  111. __declspec( dllexport ) int getReturnTyp() const;
  112. __declspec( dllexport ) bool istTyp( Typ t ) const;
  113. // Reference Counting
  114. __declspec( dllexport ) KSGSBefehl *getThis();
  115. __declspec( dllexport ) virtual KSGSBefehl *release();
  116. // static
  117. __declspec( dllexport ) static KSGSVariable *prozessVariable( KSGSVariable *zVorObj, KSGSBefehlVariable *zVar, KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI );
  118. __declspec( dllexport ) static KSGSVariable *prozessFunktion( KSGSVariable *zVorObj, KSGSBefehlFunktion *zFunk, KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI );
  119. __declspec( dllexport ) static KSGSVariable *prozessMember( KSGSVariable *zVorObj, KSGSBefehlMember *zMem, KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI );
  120. __declspec( dllexport ) static KSGSVariable *prozessParameter( KSGSBefehlParameter *zParam, KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI );
  121. __declspec( dllexport ) static KSGSVariable *prozessErstell( KSGSBefehlErstell *zErst, KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI );
  122. };
  123. class KSGSCallBefehl : public KSGSBefehl
  124. {
  125. private:
  126. Array< KSGSBefehlMember* > objekt;
  127. public:
  128. // Konstruktor
  129. __declspec( dllexport ) KSGSCallBefehl( KSGScriptObj *zObj, KSGSLeseBefehl *bef, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  130. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName );
  131. // Destruktor
  132. __declspec( dllexport ) ~KSGSCallBefehl();
  133. // constant
  134. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const override;
  135. };
  136. class KSGSOperatorBefehl : public KSGSBefehl
  137. {
  138. private:
  139. KSGSBefehlParameter *paramL;
  140. int operatorId;
  141. KSGSBefehlParameter *paramR;
  142. public:
  143. // Konstruktor
  144. __declspec( dllexport ) KSGSOperatorBefehl( KSGScriptObj *zObj, KSGSLeseBefehl *bef, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  145. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName );
  146. // Destruktor
  147. __declspec( dllexport ) ~KSGSOperatorBefehl();
  148. // constant
  149. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const override;
  150. };
  151. class KSGSIfBefehl : public KSGSBefehl
  152. {
  153. private:
  154. KSGSBefehlParameter *bedingung;
  155. RCArray< KSGSBefehl > bTrue;
  156. RCArray< KSGSBefehl > bFalse;
  157. public:
  158. // Konstruktor
  159. __declspec( dllexport ) KSGSIfBefehl( KSGScriptObj *zObj, KSGSLeseBefehl *bef, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  160. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName );
  161. // Destruktor
  162. __declspec( dllexport ) ~KSGSIfBefehl();
  163. // constant
  164. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const override;
  165. };
  166. class KSGSForBefehl : public KSGSBefehl
  167. {
  168. private:
  169. KSGSBefehl *links;
  170. KSGSBefehlParameter *bedingung;
  171. KSGSBefehl *rechts;
  172. RCArray< KSGSBefehl > schleife;
  173. public:
  174. // Konstruktor
  175. __declspec( dllexport ) KSGSForBefehl( KSGScriptObj *zObj, KSGSLeseBefehl *bef, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  176. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName );
  177. // Destruktor
  178. __declspec( dllexport ) ~KSGSForBefehl();
  179. // constant
  180. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const override;
  181. };
  182. class KSGSWhileBefehl : public KSGSBefehl
  183. {
  184. private:
  185. KSGSBefehlParameter *bedingung;
  186. RCArray< KSGSBefehl > schleife;
  187. public:
  188. // Konstruktor
  189. __declspec( dllexport ) KSGSWhileBefehl( KSGScriptObj *zObj, KSGSLeseBefehl *bef, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  190. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName );
  191. // Destruktor
  192. __declspec( dllexport ) ~KSGSWhileBefehl();
  193. // constant
  194. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const override;
  195. };
  196. class KSGSReturnBefehl : public KSGSBefehl
  197. {
  198. private:
  199. KSGSBefehlParameter *param;
  200. public:
  201. // Konstruktor
  202. __declspec( dllexport ) KSGSReturnBefehl( KSGScriptObj *zObj, KSGSLeseBefehl *bef, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  203. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName );
  204. // Destruktor
  205. __declspec( dllexport ) ~KSGSReturnBefehl();
  206. // constant
  207. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const override;
  208. };
  209. class KSGSBreakBefehl : public KSGSBefehl
  210. {
  211. private:
  212. public:
  213. // Konstruktor
  214. __declspec( dllexport ) KSGSBreakBefehl( KSGSLeseBefehl *bef, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  215. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName );
  216. // Destruktor
  217. __declspec( dllexport ) ~KSGSBreakBefehl();
  218. // constant
  219. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const override;
  220. };
  221. class KSGSContinueBefehl : public KSGSBefehl
  222. {
  223. private:
  224. public:
  225. // Konstruktor
  226. __declspec( dllexport ) KSGSContinueBefehl( KSGSLeseBefehl *bef, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  227. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName );
  228. // Destruktor
  229. __declspec( dllexport ) ~KSGSContinueBefehl();
  230. // constant
  231. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const override;
  232. };
  233. class KSGSVariableBefehl : public KSGSBefehl
  234. {
  235. private:
  236. KSGSBefehlErstell *erstell;
  237. public:
  238. // Konstruktor
  239. __declspec( dllexport ) KSGSVariableBefehl( KSGScriptObj *zObj, KSGSLeseBefehl *bef, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  240. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName );
  241. // Destruktor
  242. __declspec( dllexport ) ~KSGSVariableBefehl();
  243. // constant
  244. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const override;
  245. };
  246. }
  247. #endif