home *** CD-ROM | disk | FTP | other *** search
/ ftp.sunet.sepub/pictures / 2014.11.ftp.sunet.se-pictures.tar / ftp.sunet.se / pub / pictures / ACiD-artpacks / programs / unix / editors / gimp-plugins-unstable-0_99_23_tar.gz / gimp-plugins-unstable-0_99_23_tar / gimp-plugins-unstable-0.99.23 / mathmap / exprtree.h < prev    next >
C/C++ Source or Header  |  1998-02-19  |  2KB  |  103 lines

  1. #ifndef __EXPRTREE_H__
  2. #define __EXPRTREE_H__
  3.  
  4. #include "vars.h"
  5. #include "builtins.h"
  6.  
  7. #ifdef USE_TREE
  8. typedef double (*function) (double*);
  9. #else
  10. typedef void (*function) (void*);
  11. #endif
  12.  
  13. #define MAX_IDENT_LENGTH    63
  14.  
  15. typedef char ident[MAX_IDENT_LENGTH + 1];
  16.  
  17. typedef struct _exprtree
  18. {
  19.     int type;
  20.  
  21.     union
  22.     {
  23.     double number;
  24.     variable *var;
  25.     struct
  26.     {
  27.         int numArgs;
  28.         function routine;
  29.         struct _exprtree *args;
  30.     } func;
  31.     struct
  32.     {
  33.         struct _exprtree *left;
  34.         struct _exprtree *right;
  35.     } operator;
  36.     struct
  37.     {
  38.         variable *var;
  39.         struct _exprtree *value;
  40.     } assignment;
  41.     struct
  42.     {
  43.         struct _exprtree *condition;
  44.         struct _exprtree *consequence;
  45.         struct _exprtree *alternative;
  46.         int label1;
  47.         int label2;
  48.     } ifExpr;
  49.     struct
  50.     {
  51.         struct _exprtree *invariant;
  52.         struct _exprtree *body;
  53.         int label1;
  54.         int label2;
  55.     } whileExpr;
  56.     } val;
  57.  
  58.     struct _exprtree *next;
  59. } exprtree;
  60.  
  61. #define EXPR_NUMBER        1
  62. #define EXPR_ADD           2
  63. #define EXPR_SUB           3
  64. #define EXPR_MUL           4
  65. #define EXPR_DIV           5
  66. #define EXPR_MOD           6
  67. #define EXPR_NEG           7
  68. #define EXPR_FUNC          8
  69. #define EXPR_VAR_X         9
  70. #define EXPR_VAR_Y        10
  71. #define EXPR_VAR_T        11
  72. #define EXPR_VAR_R        12
  73. #define EXPR_VAR_A        13
  74. #define EXPR_VAR_W        14
  75. #define EXPR_VAR_H        15
  76. #define EXPR_VAR_BIG_R    16
  77. #define EXPR_VAR_BIG_X    17
  78. #define EXPR_VAR_BIG_Y    18
  79. #define EXPR_SEQUENCE     19
  80. #define EXPR_ASSIGNMENT   20
  81. #define EXPR_VARIABLE     21
  82. #define EXPR_IF_THEN      22
  83. #define EXPR_IF_THEN_ELSE 23
  84. #define EXPR_WHILE        24
  85. #define EXPR_DO_WHILE     25
  86.  
  87. exprtree* make_number (double num);
  88. exprtree* make_var (char *name);
  89. exprtree* make_operator (int type, exprtree *left, exprtree *right);
  90. exprtree* make_function (builtin *theBuiltin, exprtree *args);
  91. exprtree* make_sequence (exprtree *left, exprtree *right);
  92. exprtree* make_assignment (char *name, exprtree *value);
  93. exprtree* make_if_then (exprtree *condition, exprtree *conclusion);
  94. exprtree* make_if_then_else (exprtree *condition, exprtree *conclusion, exprtree *alternative);
  95. exprtree* make_while (exprtree *invariant, exprtree *body);
  96. exprtree* make_do_while (exprtree *body, exprtree *invariant);
  97.  
  98. exprtree* arglist_append (exprtree *list1, exprtree *list2);
  99.  
  100. double eval_exprtree (exprtree *tree);
  101.  
  102. #endif
  103.