Line data Source code
1 : /*******************************************************************************
2 : * *
3 : * Cosmos:(C)oncept et (O)utils (S)tatistique pour les (Mo)deles *
4 : * (S)tochastiques *
5 : * *
6 : * Copyright (C) 2009-2012 LSV & LACL *
7 : * Authors: Paolo Ballarini BenoƮt Barbot & Hilal Djafri *
8 : * Website: http://www.lsv.ens-cachan.fr/Software/cosmos *
9 : * *
10 : * This program is free software; you can redistribute it and/or modify *
11 : * it under the terms of the GNU General Public License as published by *
12 : * the Free Software Foundation; either version 3 of the License, or *
13 : * (at your option) any later version. *
14 : * *
15 : * This program is distributed in the hope that it will be useful, *
16 : * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 : * GNU General Public License for more details. *
19 : * *
20 : * You should have received a copy of the GNU General Public License along *
21 : * with this program; if not, write to the Free Software Foundation, Inc., *
22 : * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
23 : * file expressionStruct.hpp *
24 : * Created by Benoit Barbot on 17/04/14. *
25 : *******************************************************************************
26 : */
27 :
28 : #ifndef __Cosmos__expressionStruct__
29 : #define __Cosmos__expressionStruct__
30 :
31 : #include <iostream>
32 : #include <memory>
33 : #include <map>
34 : #include <set>
35 : #include <functional>
36 :
37 : enum expType {
38 : Empty,
39 : UnParsed,
40 : ColouredPlaceHolder,
41 :
42 : Bool,
43 : Int,
44 : Real,
45 : PlaceName,
46 : ColorVarName,
47 : Constant,
48 :
49 : Ceil,
50 : Floor,
51 : Exp,
52 :
53 : Plus,
54 : Minus,
55 : Times,
56 : Div,
57 : Min,
58 : Max,
59 : Pow,
60 :
61 : Neg,
62 : And,Or,
63 : Eq, Neq,
64 : Leq,Sl,
65 : Geq,SG,
66 :
67 : In,NotIn,
68 :
69 : Var,Lambda,App,ListContinuation
70 : };
71 :
72 : class expr;
73 :
74 : namespace text_output {
75 : std::ostream& operator<<(std::ostream& os, const expr& e);
76 : }
77 :
78 : namespace xml_output {
79 : std::ostream& operator<<(std::ostream& os, const expr& e);
80 : }
81 :
82 :
83 1041051 : class expr{
84 : public:
85 : expType t;
86 : int intVal;
87 :
88 : private:
89 : double realVal;
90 :
91 : public:
92 : std::string stringVal;
93 :
94 : bool boolVal;
95 :
96 : std::shared_ptr<expr> lhs;
97 : std::shared_ptr<expr> rhs;
98 :
99 3658 : expr():t(Int),intVal(0),realVal(0.0){};
100 1159 : expr(const std::string &p):t(UnParsed),intVal(0),realVal(0.0),stringVal(p){};
101 606 : expr(bool b):t(Bool),boolVal(b){};
102 1566 : expr(int i):t(Int),intVal(i),realVal(0.0){};
103 2141 : expr(double d):t(Real),intVal(0),realVal(d){};
104 :
105 470 : expr(expType et,const std::string &p):t(et),intVal(0),realVal(0.0),stringVal(p){};
106 260 : expr(expType et,expr &l,expr &r):t(et),intVal(0),realVal(0.0),
107 260 : lhs(std::make_shared<expr>(l)),rhs(std::make_shared<expr>(r)){};
108 :
109 : bool empty()const;
110 : bool is_concrete()const;
111 : bool is_markDep()const;
112 : bool is_zero()const;
113 : void get_places(std::set<std::string>&)const;
114 : void rewrite( std::function<void(expr&)> f );
115 : void eval(const std::map<std::string,int>&,const std::map<std::string,double>&);
116 : void eval();
117 :
118 : friend bool operator< (const expr &lhs, const expr &rhs);
119 : friend bool operator== (const expr &lhs, const expr &rhs);
120 : friend bool operator!= (const expr &lhs, const expr &rhs);
121 :
122 : std::string to_string()const;
123 :
124 : friend std::ostream& text_output::operator<<(std::ostream& os, const expr& e);
125 : friend std::ostream& xml_output::operator<<(std::ostream& os, const expr& e);
126 : double get_real()const;
127 : expType mix(const expr &l, const expr &r)const;
128 :
129 : };
130 :
131 :
132 : #endif /* defined(__Cosmos__expressionStruct__) */
|