CodeInterpreter.hh 4.74 KB
Newer Older
1
/*
sebastien's avatar
sebastien committed
2
 * Copyright (C) 2007-2009 Dynare Team
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 *
 * This file is part of Dynare.
 *
 * Dynare is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Dynare is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 */

20
21
#ifndef _CODEINTERPRETER_HH
#define _CODEINTERPRETER_HH
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

const char FLDZ=0;
const char FLDT=1;
const char FLDU=2;
const char FLDV=3;
const char FLDR=4;
const char FLDC=5;
const char FSTPT=6;
const char FSTPV=7;
const char FSTPR=8;
const char FSTPU=9;
const char FSTPG=10;
const char FUNARY=11;
const char FBINARY=12;
const char FCUML=13;
const char FBEGINBLOCK=14;
const char FENDBLOCK=15;
const char FDIMT=16;
const char FEND=17;
const char FOK=18;
const char FENDEQU=19;

sebastien's avatar
sebastien committed
44
45
46
47
48
49
50
51
enum BlockType
  {
    SIMULTANS = 0, //<! Simultaneous time separable block
    PROLOGUE = 1,  //<! Prologue block (one equation at the beginning, later merged)
    EPILOGUE = 2,  //<! Epilogue block (one equation at the beginning, later merged)
    SIMULTAN = 3   //<! Simultaneous time unseparable block
  };

52
/*enum BlockSimulationType
sebastien's avatar
sebastien committed
53
  {
54
55
56
57
58
59
60
61
62
63
64
  UNKNOWN = -1,                      //!< Unknown simulation type
  EVALUATE_FORWARD = 0,             //!< Simple evaluation, normalized variable on left-hand side, forward
  EVALUATE_BACKWARD = 1,             //!< Simple evaluation, normalized variable on left-hand side, backward
  SOLVE_FORWARD_SIMPLE = 2,         //!< Block of one equation, newton solver needed, forward
  SOLVE_BACKWARD_SIMPLE = 3,         //!< Block of one equation, newton solver needed, backward
  SOLVE_TWO_BOUNDARIES_SIMPLE = 4,   //!< Block of one equation, newton solver needed, forward & ackward
  SOLVE_FORWARD_COMPLETE = 5,       //!< Block of several equations, newton solver needed, forward
  SOLVE_BACKWARD_COMPLETE = 6,       //!< Block of several equations, newton solver needed, backward
  SOLVE_TWO_BOUNDARIES_COMPLETE = 7, //!< Block of several equations, newton solver needed, forward and backwar
  EVALUATE_FORWARD_R = 8,           //!< Simple evaluation, normalized variable on right-hand side, forward
  EVALUATE_BACKWARD_R = 9            //!< Simple evaluation, normalized variable on right-hand side, backward
sebastien's avatar
sebastien committed
65
  };
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
*/
enum BlockSimulationType
  {
    UNKNOWN,                      //!< Unknown simulation type
    EVALUATE_FORWARD,             //!< Simple evaluation, normalized variable on left-hand side, forward
    EVALUATE_BACKWARD,             //!< Simple evaluation, normalized variable on left-hand side, backward
    SOLVE_FORWARD_SIMPLE,         //!< Block of one equation, newton solver needed, forward
    SOLVE_BACKWARD_SIMPLE,         //!< Block of one equation, newton solver needed, backward
    SOLVE_TWO_BOUNDARIES_SIMPLE,   //!< Block of one equation, newton solver needed, forward & ackward
    SOLVE_FORWARD_COMPLETE,       //!< Block of several equations, newton solver needed, forward
    SOLVE_BACKWARD_COMPLETE,       //!< Block of several equations, newton solver needed, backward
    SOLVE_TWO_BOUNDARIES_COMPLETE, //!< Block of several equations, newton solver needed, forward and backwar
    EVALUATE_FORWARD_R,           //!< Simple evaluation, normalized variable on right-hand side, forward
    EVALUATE_BACKWARD_R            //!< Simple evaluation, normalized variable on right-hand side, backward
  };
81
82

//! Enumeration of possible symbol types
sebastien's avatar
sebastien committed
83
/*! Warning: do not to change existing values for 0 to 4: the values matter for homotopy_setup command */
84
enum SymbolType
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
  {
    eEndogenous = 0,               //!< Endogenous
    eExogenous = 1,                //!< Exogenous
    eExogenousDet = 2,             //!< Exogenous deterministic
    eParameter = 4,                //!< Parameter
    eModelLocalVariable = 10,      //!< Local variable whose scope is model (pound expression)
    eModFileLocalVariable = 11,    //!< Local variable whose scope is mod file (model excluded)
    eUnknownFunction = 12          //!< Function unknown to the preprocessor
  };

enum UnaryOpcode
  {
    oUminus,
    oExp,
    oLog,
    oLog10,
    oCos,
    oSin,
    oTan,
    oAcos,
    oAsin,
    oAtan,
    oCosh,
    oSinh,
    oTanh,
    oAcosh,
    oAsinh,
    oAtanh,
    oSqrt
  };
sebastien's avatar
sebastien committed
115

116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
enum BinaryOpcode
  {
    oPlus,
    oMinus,
    oTimes,
    oDivide,
    oPower,
    oEqual,
    oMax,
    oMin,
    oLess,
    oGreater,
    oLessEqual,
    oGreaterEqual,
    oEqualEqual,
    oDifferent
  };

#endif