casacore
FuncExprData.h
Go to the documentation of this file.
1 //# FuncExprData.h: Data and enumerations for functional expressions
2 //# Copyright (C) 2001,2002
3 //# Associated Universities, Inc. Washington DC, USA.
4 //#
5 //# This library is free software; you can redistribute it and/or modify it
6 //# under the terms of the GNU Library General Public License as published by
7 //# the Free Software Foundation; either version 2 of the License, or (at your
8 //# option) any later version.
9 //#
10 //# This library is distributed in the hope that it will be useful, but WITHOUT
11 //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13 //# License for more details.
14 //#
15 //# You should have received a copy of the GNU Library General Public License
16 //# along with this library; if not, write to the Free Software Foundation,
17 //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18 //#
19 //# Correspondence concerning AIPS++ should be addressed as follows:
20 //# Internet email: aips2-request@nrao.edu.
21 //# Postal address: AIPS++ Project Office
22 //# National Radio Astronomy Observatory
23 //# 520 Edgemont Road
24 //# Charlottesville, VA 22903-2475 USA
25 //#
26 //#
27 //# $Id$
28 
29 #ifndef SCIMATH_FUNCEXPRDATA_H
30 #define SCIMATH_FUNCEXPRDATA_H
31 
32 //# Includes
33 #include <casacore/casa/aips.h>
34 #include <casacore/casa/BasicSL/String.h>
35 #include <casacore/casa/stdmap.h>
36 
37 //# Forward Declarations
38 #include <casacore/casa/iosfwd.h>
39 
40 namespace casacore { //# NAMESPACE CASACORE - BEGIN
41 
42 // <summary> Data and enumerations for functional expressions
43 // </summary>
44 
45 // <use visibility=local>
46 
47 // <reviewed reviewer="" date="yyyy/mm/dd" tests="" demos="">
48 // </reviewed>
49 
50 // <prerequisite>
51 // <li> <linkto class=Function>Function</linkto> class
52 // </prerequisite>
53 //
54 // <synopsis>
55 // This class provides enumerations for expression analysis; and data element
56 // descriptions
57 // </synopsis>
58 //
59 // <example>
60 // </example>
61 //
62 // <motivation>
63 // To tie the Glish language to non-linear fitting procedures
64 // </motivation>
65 //
66 // <thrown>
67 // <li>
68 // </thrown>
69 //
70 // <todo asof="2001/11/21">
71 // <li> nothing directly
72 // </todo>
73 
74 class FuncExprData {
75 public:
76  //# Enumerations
77  // Operations
78  enum opTypes {
79  NOP=0,
82  NON,
83  POW,
84  GTE,
85  LTE,
86  EQ,
87  NEQ,
88  OR,
89  AND,
93  ADD,
94  SUB,
95  MUL,
96  DIV,
97  LT,
98  GT,
128  PI,
129  EE,
142  // Number
144 
145  // Operation category
147  // Unary, binary 1 or 2 character
149  // Special and functions
151  // Number
153  // Special categories
154  enum specAction {
156  // Save environment while compiling
158  // Indicate a GOTO
160  // Final expression codes
161  FINAL };
162  // Special priority levels
164  // Lowest priority at which right-to-left rather than left-to-right
165  // execution
166  RTLPRI = 44,
167  // Priority for specials - start
168  SPCPRI = 60,
169  // Priority for finals
170  FINPRI = 00 };
171 
172  // The compilation state descriptor
173  struct ExprCompState {
174  // Old index of low RPS boundary
176  // # of values available on value stack
178  // Argument count
180  // Previous saved program counter
182  };
183  // The operator description: code; priority; # of arguments; # of arguments
184  // used up (or produced for functions)
185  struct ExprOperator {
186  // The operator code
188  // The name (or characters)
190  // The category
192  // Execution priority
194  // # of arguments necessary (or minimum)
196  // max # of arguments (for function)
198  // # of results produced/used
200  // code info (like par/x index; jump distance
202  // special action
204  // state
206  };
207 
208  //# Constructors
209  // Construct the data for the expression analysis
211 
212  // Destructor
214 
215  //# Member functions
216  // Accessors of the various maps
217  // <group>
218  map<String, ExprOperator> &unary2() { return una2_p; }
219  const map<String, ExprOperator> &unary2() const { return una2_p; }
220  map<String, ExprOperator> &unary1() { return una1_p; }
221  const map<String, ExprOperator> &unary1() const { return una1_p; }
222  map<String, ExprOperator> &binary2() { return bin2_p; }
223  const map<String, ExprOperator> &binary2() const { return bin2_p; }
224  map<String, ExprOperator> &binary1() { return bin1_p; }
225  const map<String, ExprOperator> &binary1() const { return bin1_p; }
226  map<String, ExprOperator> &special() { return spop_p; }
227  const map<String, ExprOperator> &special() const { return spop_p; }
228  map<String, ExprOperator> &function() { return func_p; }
229  const map<String, ExprOperator> &function() const { return func_p; }
230  // </group>
231  // Print an operator map
232  void print(ostream &os,
233  const map<String, FuncExprData::ExprOperator> &m) const;
234  // Print an operation
235  void print(ostream &os, const FuncExprData::ExprOperator &pos) const;
236 
237 private:
238  //# Data
239  // Unary operators of 2 characters
240  map<String, ExprOperator> una2_p;
241  // Unary operators of 1 character
242  map<String, ExprOperator> una1_p;
243  // Binary operators of 2 characters
244  map<String, ExprOperator> bin2_p;
245  // Binary operators of 1 character
246  map<String, ExprOperator> bin1_p;
247  // Special operators
248  map<String, ExprOperator> spop_p;
249  // Function names
250  map<String, ExprOperator> func_p;
251  // All operators
252  map<opTypes, ExprOperator> allop_p;
253 };
254 
255 //# Global Functions
256 
257 // <summary> Output function </summary>
258 
259 // <group name=output>
260 // Show a list of all defined operators and functions
261 ostream &operator<<(ostream &os, const FuncExprData &ed);
262 // </group>
263 
264 
265 } //# NAMESPACE CASACORE - END
266 
267 #endif
268 
269 
270 
casacore::FuncExprData::BIN1
@ BIN1
Definition: FuncExprData.h:148
casacore::FuncExprData::UNA1
@ UNA1
Definition: FuncExprData.h:148
casacore::FuncExprData::ABS
@ ABS
Definition: FuncExprData.h:130
casacore::FuncExprData::EXP10
@ EXP10
Definition: FuncExprData.h:121
casacore::FuncExprData::LOG10
@ LOG10
Definition: FuncExprData.h:124
casacore::FuncExprData::unary2
const map< String, ExprOperator > & unary2() const
Definition: FuncExprData.h:219
casacore::FuncExprData::ExprOperator::category
opCategories category
The category.
Definition: FuncExprData.h:191
casacore::FuncExprData::LT
@ LT
Definition: FuncExprData.h:97
casacore::FuncExprData::GTE
@ GTE
Definition: FuncExprData.h:84
casacore::FuncExprData::special
const map< String, ExprOperator > & special() const
Definition: FuncExprData.h:227
casacore::FuncExprData
Data and enumerations for functional expressions.
Definition: FuncExprData.h:74
casacore::FuncExprData::UNA2
@ UNA2
Unary, binary 1 or 2 character.
Definition: FuncExprData.h:148
casacore::FuncExprData::GOTOPC
@ GOTOPC
Indicate a GOTO.
Definition: FuncExprData.h:159
casacore::FuncExprData::RBRACE
@ RBRACE
Definition: FuncExprData.h:104
casacore::FuncExprData::ExprCompState::nval
uInt nval
Definition: FuncExprData.h:177
casacore::FuncExprData::NopCategories
@ NopCategories
Number.
Definition: FuncExprData.h:152
casacore::FuncExprData::FINPRI
@ FINPRI
Priority for finals.
Definition: FuncExprData.h:170
casacore::FuncExprData::PI
@ PI
Definition: FuncExprData.h:128
casacore::FuncExprData::BIN2
@ BIN2
Definition: FuncExprData.h:148
casacore::FuncExprData::LTE
@ LTE
Definition: FuncExprData.h:85
casacore::FuncExprData::binary1
const map< String, ExprOperator > & binary1() const
Definition: FuncExprData.h:225
casacore::FuncExprData::SIN
@ SIN
Definition: FuncExprData.h:114
casacore::FuncExprData::RTLPRI
@ RTLPRI
Lowest priority at which right-to-left rather than left-to-right execution.
Definition: FuncExprData.h:166
casacore::FuncExprData::CONDEX
@ CONDEX
Definition: FuncExprData.h:90
casacore::FuncExprData::special
map< String, ExprOperator > & special()
Definition: FuncExprData.h:226
casacore::FuncExprData::ARG
@ ARG
Definition: FuncExprData.h:101
casacore::FuncExprData::EQ
@ EQ
Definition: FuncExprData.h:86
casacore::FuncExprData::specPriority
specPriority
Special priority levels.
Definition: FuncExprData.h:163
casacore::FuncExprData::una1_p
map< String, ExprOperator > una1_p
Unary operators of 1 character.
Definition: FuncExprData.h:242
casacore::FuncExprData::ATAN2
@ ATAN2
Definition: FuncExprData.h:117
casacore::FuncExprData::FINAL
@ FINAL
Final expression codes.
Definition: FuncExprData.h:161
casacore::FuncExprData::EXP2
@ EXP2
Definition: FuncExprData.h:122
casacore::FuncExprData::opTypes
opTypes
Operations.
Definition: FuncExprData.h:78
casacore::FuncExprData::ExprCompState::argcnt
uInt argcnt
Argument count.
Definition: FuncExprData.h:179
casacore::FuncExprData::ASIN
@ ASIN
Definition: FuncExprData.h:118
casacore::FuncExprData::REAL
@ REAL
Definition: FuncExprData.h:138
casacore::FuncExprData_global_functions_output::operator<<
ostream & operator<<(ostream &os, const FuncExprData &ed)
Show a list of all defined operators and functions.
casacore::FuncExprData::NopTypes
@ NopTypes
Number.
Definition: FuncExprData.h:143
casacore::FuncExprData::unary2
map< String, ExprOperator > & unary2()
Accessors of the various maps.
Definition: FuncExprData.h:218
casacore::FuncExprData::TOIMAG
@ TOIMAG
Definition: FuncExprData.h:102
casacore::FuncExprData::COMPLEX
@ COMPLEX
Definition: FuncExprData.h:137
casacore::FuncExprData::FINISH
@ FINISH
Definition: FuncExprData.h:110
casacore::FuncExprData::ROUND
@ ROUND
Definition: FuncExprData.h:133
casacore::FuncExprData::SUB
@ SUB
Definition: FuncExprData.h:94
casacore::FuncExprData::MUL
@ MUL
Definition: FuncExprData.h:95
casacore::FuncExprData::ExprOperator::state
ExprCompState state
state
Definition: FuncExprData.h:205
casacore::FuncExprData::~FuncExprData
~FuncExprData()
Destructor.
Definition: FuncExprData.h:213
casacore::FuncExprData::specAction
specAction
Special categories.
Definition: FuncExprData.h:154
casacore::FuncExprData::LPAREN
@ LPAREN
Definition: FuncExprData.h:105
casacore::FuncExprData::INT
@ INT
Definition: FuncExprData.h:134
casacore::FuncExprData::una2_p
map< String, ExprOperator > una2_p
Unary operators of 2 characters.
Definition: FuncExprData.h:240
casacore::FuncExprData::AMPL
@ AMPL
Definition: FuncExprData.h:140
casacore::FuncExprData::ExprOperator::info
Int info
code info (like par/x index; jump distance
Definition: FuncExprData.h:201
casacore::FuncExprData::LBRACE
@ LBRACE
Definition: FuncExprData.h:103
casacore::FuncExprData::ACOS
@ ACOS
Definition: FuncExprData.h:119
casacore::FuncExprData::GT
@ GT
Definition: FuncExprData.h:98
casacore::FuncExprData::OR
@ OR
Definition: FuncExprData.h:88
casacore::uInt
unsigned int uInt
Definition: aipstype.h:51
casacore::FuncExprData::IMAG
@ IMAG
Definition: FuncExprData.h:139
casacore::FuncExprData::SPEC
@ SPEC
Special and functions.
Definition: FuncExprData.h:150
casacore::FuncExprData::DIV
@ DIV
Definition: FuncExprData.h:96
casacore::FuncExprData::unary1
const map< String, ExprOperator > & unary1() const
Definition: FuncExprData.h:221
casacore::FuncExprData::ExprOperator::code
opTypes code
The operator code.
Definition: FuncExprData.h:187
casacore::FuncExprData::LOG
@ LOG
Definition: FuncExprData.h:123
casacore::FuncExprData::ExprCompState::rpslow
uInt rpslow
Old index of low RPS boundary.
Definition: FuncExprData.h:175
casacore::FuncExprData::ExprOperator::name
String name
The name (or characters)
Definition: FuncExprData.h:189
casacore::FuncExprData_global_functions_output
Output function.
Definition: FuncExprData.h:260
casacore::FuncExprData::ERF
@ ERF
Definition: FuncExprData.h:126
casacore::FuncExprData::RPAREN
@ RPAREN
Definition: FuncExprData.h:106
casacore::FuncExprData::spop_p
map< String, ExprOperator > spop_p
Special operators.
Definition: FuncExprData.h:248
casacore::FuncExprData::UNAPLUS
@ UNAPLUS
Definition: FuncExprData.h:81
casacore::FuncExprData::print
void print(ostream &os, const FuncExprData::ExprOperator &pos) const
Print an operation.
casacore::FuncExprData::bin1_p
map< String, ExprOperator > bin1_p
Binary operators of 1 character.
Definition: FuncExprData.h:246
casacore::Int
int Int
Definition: aipstype.h:50
casacore
this file contains all the compiler specific defines
Definition: mainpage.dox:28
casacore::FuncExprData::NOP
@ NOP
Definition: FuncExprData.h:79
casacore::FuncExprData::COMMA
@ COMMA
Definition: FuncExprData.h:109
casacore::FuncExprData::binary2
const map< String, ExprOperator > & binary2() const
Definition: FuncExprData.h:223
casacore::FuncExprData::CONST
@ CONST
Definition: FuncExprData.h:99
casacore::FuncExprData::FRACT
@ FRACT
Definition: FuncExprData.h:135
casacore::FuncExprData::ATAN
@ ATAN
Definition: FuncExprData.h:116
casacore::FuncExprData::opCategories
opCategories
Operation category.
Definition: FuncExprData.h:146
casacore::FuncExprData::AND
@ AND
Definition: FuncExprData.h:89
casacore::FuncExprData::unary1
map< String, ExprOperator > & unary1()
Definition: FuncExprData.h:220
casacore::FuncExprData::FUNC
@ FUNC
Definition: FuncExprData.h:150
casacore::FuncExprData::GOTOT
@ GOTOT
Definition: FuncExprData.h:113
casacore::FuncExprData::SAVENV
@ SAVENV
Save environment while compiling.
Definition: FuncExprData.h:157
casacore::FuncExprData::NONE
@ NONE
Definition: FuncExprData.h:155
casacore::FuncExprData::ERFC
@ ERFC
Definition: FuncExprData.h:127
casacore::FuncExprData::GOTO
@ GOTO
Definition: FuncExprData.h:111
casacore::FuncExprData::LBR
@ LBR
Definition: FuncExprData.h:107
casacore::FuncExprData::ExprOperator::special
specAction special
special action
Definition: FuncExprData.h:203
casacore::FuncExprData::CONDEX3
@ CONDEX3
Definition: FuncExprData.h:92
casacore::FuncExprData::EE
@ EE
Definition: FuncExprData.h:129
casacore::FuncExprData::ExprOperator::nresult
Int nresult
Definition: FuncExprData.h:199
casacore::FuncExprData::ADD
@ ADD
Definition: FuncExprData.h:93
casacore::FuncExprData::EXP
@ EXP
Definition: FuncExprData.h:120
casacore::FuncExprData::SPCPRI
@ SPCPRI
Priority for specials - start.
Definition: FuncExprData.h:168
casacore::String
String: the storage and methods of handling collections of characters.
Definition: String.h:223
casacore::FuncExprData::ExprOperator::priority
uInt priority
Execution priority.
Definition: FuncExprData.h:193
casacore::FuncExprData::CONDEX2
@ CONDEX2
Definition: FuncExprData.h:91
casacore::operator<<
ostream & operator<<(ostream &os, const IComplex &)
Show on ostream.
casacore::FuncExprData::LOG2
@ LOG2
Definition: FuncExprData.h:125
casacore::FuncExprData::UNAMIN
@ UNAMIN
Definition: FuncExprData.h:80
casacore::FuncExprData::NEQ
@ NEQ
Definition: FuncExprData.h:87
casacore::FuncExprData::CEIL
@ CEIL
Definition: FuncExprData.h:132
casacore::FuncExprData::ExprCompState
The compilation state descriptor.
Definition: FuncExprData.h:173
casacore::FuncExprData::allop_p
map< opTypes, ExprOperator > allop_p
All operators.
Definition: FuncExprData.h:252
casacore::FuncExprData::GOTOF
@ GOTOF
Definition: FuncExprData.h:112
casacore::FuncExprData::func_p
map< String, ExprOperator > func_p
Function names.
Definition: FuncExprData.h:250
casacore::FuncExprData::binary1
map< String, ExprOperator > & binary1()
Definition: FuncExprData.h:224
casacore::FuncExprData::PARAM
@ PARAM
Definition: FuncExprData.h:100
casacore::FuncExprData::binary2
map< String, ExprOperator > & binary2()
Definition: FuncExprData.h:222
casacore::FuncExprData::ExprOperator
The operator description: code; priority; # of arguments; # of arguments used up (or produced for fun...
Definition: FuncExprData.h:185
casacore::FuncExprData::FLOOR
@ FLOOR
Definition: FuncExprData.h:131
casacore::FuncExprData::NON
@ NON
Definition: FuncExprData.h:82
casacore::FuncExprData::FuncExprData
FuncExprData()
Construct the data for the expression analysis.
casacore::FuncExprData::print
void print(ostream &os, const map< String, FuncExprData::ExprOperator > &m) const
Print an operator map.
casacore::FuncExprData::SQRT
@ SQRT
Definition: FuncExprData.h:136
casacore::FuncExprData::RBR
@ RBR
Definition: FuncExprData.h:108
casacore::FuncExprData::COS
@ COS
Definition: FuncExprData.h:115
casacore::FuncExprData::bin2_p
map< String, ExprOperator > bin2_p
Binary operators of 2 characters.
Definition: FuncExprData.h:244
casacore::FuncExprData::POW
@ POW
Definition: FuncExprData.h:83
casacore::FuncExprData::ExprOperator::narg
uInt narg
Definition: FuncExprData.h:195
casacore::FuncExprData::PHASE
@ PHASE
Definition: FuncExprData.h:141
casacore::FuncExprData::ExprCompState::pcptr
uInt pcptr
Previous saved program counter.
Definition: FuncExprData.h:181
casacore::FuncExprData::ExprOperator::nmaxarg
uInt nmaxarg
max # of arguments (for function)
Definition: FuncExprData.h:197