xc
Lexico.h
1 // -*-c++-*-
2 //----------------------------------------------------------------------------
3 // xc utils library; general purpose classes and functions.
4 //
5 // Copyright (C) Luis C. Pérez Tato
6 //
7 // XC utils is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation, either version 3 of the License, or
10 // (at your option) any later version.
11 //
12 // This software is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program.
19 // If not, see <http://www.gnu.org/licenses/>.
20 //----------------------------------------------------------------------------
21 //Lexico.h
22 
23 #ifndef LEXICO_H
24 #define LEXICO_H
25 
26 #include "OpUnario.h"
27 #include "OpBinario.h"
28 #include "Macaulay.h"
29 #include "OpComparacion.h"
30 #include "OpBooleano.h"
31 #include "OpTrigonometricas.h"
32 #include "Literal.h"
33 #include <string>
34 #include "TablaVariables.h"
35 #include "TablaLiterales.h"
36 #include "Variable.h"
37 #include <iostream>
38 
39 
40 class ArbolExpr;
41 
42 class Lexico
43  {
44  friend class ArbolExpr;
45  protected:
46  TablaLiterales literales;
47  TablaVariables vars; //Variables globales.
48  public:
49  //Paréntesis
50  ParentDcho parentd;
51  ParentIzdo parenti;
52 
53  //Operadores binarios.
54  static OpSuma suma;
55  static OpResta resta;
56  static OpProd prodt;
57  static OpDiv divn;
58  static OpDivEnt dive;
59  static OpMod modulus;
60  static OpPot pot;
61  static OpMenor menor;
62  static OpLessOrEqual op_less_or_equal;
63  static OpEqual equal;
64  static OpMayor mayor;
65  static OpGreaterOrEqual op_greater_or_equal;
66  static OpDistinto distinto;
67  static OpAnd And;
68  static OpOr Or;
69  static OpNot Not;
70  static OpMax max;
71  static OpMin min;
72  static OpMacaulay0 F0;
73  static OpMacaulayN F1;
74  static OpMacaulayN F2;
75  static OpMacaulayN F3;
76  static OpMacaulayN F4;
77 
78  //Operadores unarios.
79  static OpNeg neg;
80  static OpInv inv;
81  static OpSign sign;
82  static OpAbs abs;
83  static OpSqr sqr;
84  static OpSqrt raiz2;
85  static OpExp expn;
86  static OpLn ln;
87  static OpLg lg;
88  static OpPi pi;
89  static OpSin seno;
90  static OpCos cose;
91  static OpTan tang;
92  static OpAtan arctg;
93  static OpSec sec;
94  static OpCosec cosec;
95  static OpCotg cotg;
96  static OpDeg2Rad deg2rad;
97  static OpRad2Deg rad2deg;
98  static OpRound round;
99  static OpTrunc trunc;
100  static OpToNum to_num;
101 
102 /* public: */
103 /* friend class OpSqr; */
104 /* friend class OpNeg; */
105 /* friend class OpSign; */
106 /* friend class OpInv; */
107 /* friend class OpAbs; */
108 /* friend class OpSqrt; */
109 /* friend class OpExp; */
110 /* friend class OpLn; */
111 /* friend class OpLg; */
112 /* friend class OpSin; */
113 /* friend class OpCos; */
114 /* friend class OpTan; */
115 /* friend class OpAtan; */
116 
117 /* friend class OpProd; */
118 /* friend class OpDiv; */
119 
120  Lexico(void);
121  inline TablaLiterales &getTablaLiterales(void)
122  { return literales; }
123  virtual Variable *CalcDirVar(const std::string &nmb);
124  Segnal *CalcDirOpUnario(const std::string &nmb);
125  Segnal *CalcDirOpBinario(const std::string &nmb);
126  virtual Segnal *CalcDir(const std::string &nmb);
127  inline Segnal *CalcularDireccion(const std::string &nmb)
128  {
129  if (nmb.length() <= 0)
130  std::cerr << "Tried to compute the addres"
131  << " of an empty name" << std::endl;
132  else
133  return CalcDir(nmb);
134  return NULL;
135  }
136 /* inline const Literal *NuevoLiteral(const Literal &l) */
137 /* { return literales.Nuevo(l); } */
138  inline const Operando *NuevoLiteral(const double &d)
139  { return literales.NuevoDbl(d); }
140  inline void NuevaRefLiteral(const double &d)
141  { literales.NuevaRef(d); }
142  inline void NuevaRefLiteral(const Segnal *s)
143  { literales.NuevaRef(s); }
144  inline void BorraLiteral(const double &d)
145  { literales.Borra(d); }
146  inline void BorraSiLiteral(const Segnal *s)
147  { literales.BorraSiLiteral(s); }
148  inline NamedOperand *NuevaVar(const Variable &v)
149  { return vars.Nueva(v); }
150  inline NamedOperand *NuevaVar(const std::string &palabra)
151  { return NuevaVar(Variable(palabra)); }
152  void Asigna(const std::string &palabra,const double &d)
153  {
154  Variable *tmp= CalcDirVar(palabra);
155  if(tmp) tmp->Asigna(d);
156  }
157  void DesAsigna(const std::string &palabra)
158  {
159  Variable *tmp= CalcDirVar(palabra);
160  if(tmp) tmp->DesAsigna();
161  }
162  void PrintPrioridades(std::ostream &os) const;
163  virtual ~Lexico(void) {}
164  };
165 
166 #endif
167 
168 
169 
170 
171 
172 
virtual Segnal * CalcDir(const std::string &nmb)
Devuelve un puntero al operador cuyo símbolo se pasa como parámetro.
Definition: Lexico.cc:142
Definition: OpUnario.h:105
Árbol que representa una expresión matemática.
Definition: ArbolExpr.h:41
Definition: OpTrigonometricas.h:29
Definition: NamedOperand.h:28
Cosecant function cosec(x)= 1/sin(x)
Definition: OpTrigonometricas.h:95
Function that converts sexagesimal degrees into radians deg2rad(x)= pi/180*x.
Definition: OpTrigonometricas.h:118
Definition: OpUnario.h:60
void BorraSiLiteral(const Segnal *s)
Quita el literal de la tabla si efectivamente el puntero corresponde a un literal.
Definition: TablaLiterales.cc:121
Operador AND.
Definition: OpBooleano.h:40
Function that converts radians into sexagesimal degrees rad2deg(x)= 180/pi*x.
Definition: OpTrigonometricas.h:132
Operador OR.
Definition: OpBooleano.h:52
static NamedOperand * NuevaVar(const Variable &v)
Creates the variable being passed as parameter.
Definition: ProtoExpr.cc:58
Definition: TablaVariables.h:31
Definition: Variable.h:31
virtual Variable * CalcDirVar(const std::string &nmb)
Return a pointer to the variable which name is being passed as parameter.
Definition: Lexico.cc:136
Segnal * CalcDirOpUnario(const std::string &nmb)
Devuelve un puntero al operador unario cuyo símbolo se pasa como parámetro.
Definition: Lexico.cc:78
Definition: Operador.h:63
static Segnal * CalcularDireccion(const std::string &nmb)
Return a pointer to the signal which name is being passed as parameter.
Definition: ProtoExpr.cc:67
Definition: OpBooleano.h:62
Definition: OpBinario.h:131
Definition: OpTrigonometricas.h:72
Cotangent function cotg(x)= 1/tan(x)
Definition: OpTrigonometricas.h:106
Definition: OpTrigonometricas.h:61
Equal operator Return 1 if the left value is equal to the right one, 0 otherwise. ...
Definition: OpComparacion.h:67
Definition: OpUnario.h:82
Definition: OpUnario.h:139
Macaulay function F0 (See Mecánica de materiales Gere-Timoshenko paragraph 7.9).
Definition: Macaulay.h:35
Operador distinto.
Definition: OpComparacion.h:106
Logaritmo neperiano.
Definition: OpUnario.h:128
Segnal * CalcDirOpBinario(const std::string &nmb)
Devuelve un puntero al operador binario cuyo símbolo se pasa como parámetro.
Definition: Lexico.cc:106
Definition: OpBinario.h:94
Operando.
Definition: Operando.h:42
friend class Lexico
Léxico para interpretar la expresión.
Definition: ArbolExpr.h:44
Definition: OpUnario.h:93
Secant function sec(x)= 1/cos(x)
Definition: OpTrigonometricas.h:84
Definition: OpTrigonometricas.h:50
Operador mayor que.
Definition: OpComparacion.h:80
Definition: OpBinario.h:64
Definition: OpBinario.h:50
Operador menor que.
Definition: OpComparacion.h:41
Definition: OpUnario.h:49
Definition: OpUnario.h:71
Macaulay function Fn (Ver Mecánica de materiales Gere-Timoshenko paragraph 7.9).
Definition: Macaulay.h:55
Componente elemental de una expresión.
Definition: Segnal.h:60
Definition: TablaLiterales.h:29
Operador min.
Definition: OpBinario.h:161
Operador less or equal than.
Definition: OpComparacion.h:54
Definition: OpTrigonometricas.h:39
Definition: OpUnario.h:150
Definition: OpUnario.h:170
Definition: OpBinario.h:119
Operador max.
Definition: OpBinario.h:145
Definition: OpBinario.h:107
Definition: Lexico.h:42
Definition: OpUnario.h:116
Definition: Operador.h:53
Definition: OpUnario.h:160
friend ArbolExpr abs(const ArbolExpr &)
Devuelve el valor absoluto del argumento.
Definition: ArbolExpr.cc:374
Definition: OpBinario.h:77
Operador greater thar or equal to.
Definition: OpComparacion.h:93