KSGSBefehl.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  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 ) ~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. // Reference Counting
  136. __declspec( dllexport ) virtual KSGSBefehl *release() override;
  137. };
  138. class KSGSOperatorBefehl : public KSGSBefehl
  139. {
  140. private:
  141. KSGSBefehlParameter *paramL;
  142. int operatorId;
  143. KSGSBefehlParameter *paramR;
  144. public:
  145. // Konstruktor
  146. __declspec( dllexport ) KSGSOperatorBefehl( KSGScriptObj *zObj, KSGSLeseBefehl *bef, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  147. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName );
  148. // Destruktor
  149. __declspec( dllexport ) ~KSGSOperatorBefehl();
  150. // constant
  151. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const override;
  152. // Reference Counting
  153. __declspec( dllexport ) virtual KSGSBefehl *release() override;
  154. };
  155. class KSGSIfBefehl : public KSGSBefehl
  156. {
  157. private:
  158. KSGSBefehlParameter *bedingung;
  159. RCArray< KSGSBefehl > bTrue;
  160. RCArray< KSGSBefehl > bFalse;
  161. public:
  162. // Konstruktor
  163. __declspec( dllexport ) KSGSIfBefehl( KSGScriptObj *zObj, KSGSLeseBefehl *bef, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  164. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName );
  165. // Destruktor
  166. __declspec( dllexport ) ~KSGSIfBefehl();
  167. // constant
  168. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const override;
  169. // Reference Counting
  170. __declspec( dllexport ) virtual KSGSBefehl *release() override;
  171. };
  172. class KSGSForBefehl : public KSGSBefehl
  173. {
  174. private:
  175. KSGSBefehl *links;
  176. KSGSBefehlParameter *bedingung;
  177. KSGSBefehl *rechts;
  178. RCArray< KSGSBefehl > schleife;
  179. public:
  180. // Konstruktor
  181. __declspec( dllexport ) KSGSForBefehl( KSGScriptObj *zObj, KSGSLeseBefehl *bef, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  182. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName );
  183. // Destruktor
  184. __declspec( dllexport ) ~KSGSForBefehl();
  185. // constant
  186. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const override;
  187. // Reference Counting
  188. __declspec( dllexport ) virtual KSGSBefehl *release() override;
  189. };
  190. class KSGSWhileBefehl : public KSGSBefehl
  191. {
  192. private:
  193. KSGSBefehlParameter *bedingung;
  194. RCArray< KSGSBefehl > schleife;
  195. public:
  196. // Konstruktor
  197. __declspec( dllexport ) KSGSWhileBefehl( KSGScriptObj *zObj, KSGSLeseBefehl *bef, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  198. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName );
  199. // Destruktor
  200. __declspec( dllexport ) ~KSGSWhileBefehl();
  201. // constant
  202. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const override;
  203. // Reference Counting
  204. __declspec( dllexport ) virtual KSGSBefehl *release() override;
  205. };
  206. class KSGSReturnBefehl : public KSGSBefehl
  207. {
  208. private:
  209. KSGSBefehlParameter *param;
  210. public:
  211. // Konstruktor
  212. __declspec( dllexport ) KSGSReturnBefehl( KSGScriptObj *zObj, KSGSLeseBefehl *bef, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  213. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName );
  214. // Destruktor
  215. __declspec( dllexport ) ~KSGSReturnBefehl();
  216. // constant
  217. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const override;
  218. // Reference Counting
  219. __declspec( dllexport ) virtual KSGSBefehl *release() override;
  220. };
  221. class KSGSBreakBefehl : public KSGSBefehl
  222. {
  223. private:
  224. public:
  225. // Konstruktor
  226. __declspec( dllexport ) KSGSBreakBefehl( KSGSLeseBefehl *bef, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  227. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName );
  228. // Destruktor
  229. __declspec( dllexport ) ~KSGSBreakBefehl();
  230. // constant
  231. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const override;
  232. // Reference Counting
  233. __declspec( dllexport ) virtual KSGSBefehl *release() override;
  234. };
  235. class KSGSContinueBefehl : public KSGSBefehl
  236. {
  237. private:
  238. public:
  239. // Konstruktor
  240. __declspec( dllexport ) KSGSContinueBefehl( KSGSLeseBefehl *bef, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  241. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName );
  242. // Destruktor
  243. __declspec( dllexport ) ~KSGSContinueBefehl();
  244. // constant
  245. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const override;
  246. // Reference Counting
  247. __declspec( dllexport ) virtual KSGSBefehl *release() override;
  248. };
  249. class KSGSVariableBefehl : public KSGSBefehl
  250. {
  251. private:
  252. KSGSBefehlErstell *erstell;
  253. public:
  254. // Konstruktor
  255. __declspec( dllexport ) KSGSVariableBefehl( KSGScriptObj *zObj, KSGSLeseBefehl *bef, KSGSCompKlassTable *zKT, KSGSCompFuncTable *zFT,
  256. KSGSCompVarTable *zVT, const char *klassName, const char *funktionName );
  257. // Destruktor
  258. __declspec( dllexport ) ~KSGSVariableBefehl();
  259. // constant
  260. __declspec( dllexport ) virtual KSGSVariable *ausführen( KSGScriptObj *zObj, KSGSFunktionInstanz *zFI, KSGSVariable *zKI ) const override;
  261. // Reference Counting
  262. __declspec( dllexport ) virtual KSGSBefehl *release() override;
  263. };
  264. }
  265. #endif