OPALX (Object Oriented Parallel Accelerator Library for Exascal) MINIorX
OPALX
MSLang.cpp
Go to the documentation of this file.
1#include "Utilities/MSLang.h"
3#include "Physics/Physics.h"
18#include "Utilities/Mesher.h"
20
21#include <boost/regex.hpp>
22
23#include <cmath>
24#include <cstdlib>
25#include <fstream>
26#include <iostream>
27#include <streambuf>
28#include <string>
29
30namespace mslang {
31 const std::string Function::UDouble = "([0-9]+\\.?[0-9]*([Ee][+-]?[0-9]+)?)";
32 const std::string Function::Double = "(-?[0-9]+\\.?[0-9]*([Ee][+-]?[0-9]+)?)";
33 const std::string Function::UInt = "([0-9]+)";
34 const std::string Function::FCall = "([a-z_]*)\\((.*)";
35
36 bool parse(std::string str, Function*& fun) {
37 iterator it = str.begin();
38 iterator end = str.end();
39 if (!Function::parse(it, end, fun)) {
40 std::cout << "parsing failed here:" << std::string(it, end) << std::endl;
41 return false;
42 }
43
44 return true;
45 }
46
47 bool Function::parse(iterator& it, const iterator& end, Function*& fun) {
48 boost::regex functionCall(Function::FCall);
49 boost::smatch what;
50
51 std::string str(it, end);
52 if (!boost::regex_match(str, what, functionCall))
53 return false;
54
55 std::string identifier = what[1];
56 std::string arguments = what[2];
57 unsigned int shift = identifier.size() + 1;
58
59 if (identifier == "rectangle") {
60 fun = new Rectangle;
61 it += shift;
62 if (!Rectangle::parse_detail(it, end, fun))
63 return false;
64
65 return true;
66 } else if (identifier == "ellipse") {
67 fun = new Ellipse;
68 it += shift;
69 if (!Ellipse::parse_detail(it, end, fun))
70 return false;
71
72 return true;
73 } else if (identifier == "polygon") {
74 fun = new Polygon;
75 it += shift;
76 if (!Polygon::parse_detail(it, end, fun))
77 return false;
78
79 return true;
80 } else if (identifier == "mask") {
81 fun = new Mask;
82 it += shift;
83
84 return Mask::parse_detail(it, end, fun);
85 } else if (identifier == "repeat") {
86 fun = new Repeat;
87 it += shift;
88 if (!Repeat::parse_detail(it, end, fun))
89 return false;
90
91 return true;
92 } else if (identifier == "rotate") {
93 fun = new Rotation;
94 it += shift;
95 if (!Rotation::parse_detail(it, end, fun))
96 return false;
97
98 return true;
99 } else if (identifier == "translate") {
100 fun = new Translation;
101 it += shift;
102 if (!Translation::parse_detail(it, end, fun))
103 return false;
104
105 return true;
106 } else if (identifier == "shear") {
107 fun = new Shear;
108 it += shift;
109 if (!Shear::parse_detail(it, end, fun))
110 return false;
111
112 return true;
113 } else if (identifier == "union") {
114 fun = new Union;
115 it += shift;
116 if (!Union::parse_detail(it, end, fun))
117 return false;
118
119 return true;
120 } else if (identifier == "difference") {
121 fun = new Difference;
122 it += shift;
123 if (!Difference::parse_detail(it, end, fun))
124 return false;
125
126 return true;
127 } else if (identifier == "symmetric_difference") {
128 fun = new SymmetricDifference;
129 it += shift;
131 return false;
132
133 return true;
134 } else if (identifier == "intersection") {
135 fun = new Intersection;
136 it += shift;
137 if (!Intersection::parse_detail(it, end, fun))
138 return false;
139
140 return true;
141 }
142
143 return (it == end);
144 }
145} // namespace mslang
PartBunch< T, Dim >::ConstIterator end(PartBunch< T, Dim > const &bunch)
std::string::iterator iterator
Definition MSLang.h:15
bool parse(std::string str, Function *&fun)
Definition MSLang.cpp:36
static const std::string FCall
Definition MSLang.h:36
static const std::string Double
Definition MSLang.h:34
static const std::string UDouble
Definition MSLang.h:33
static bool parse(iterator &it, const iterator &end, Function *&fun)
Definition MSLang.cpp:47
static const std::string UInt
Definition MSLang.h:35
static bool parse_detail(iterator &it, const iterator &end, Function *&fun)
static bool parse_detail(iterator &it, const iterator &end, Function *fun)
Definition Ellipse.cpp:120
static bool parse_detail(iterator &it, const iterator &end, Function *&fun)
static bool parse_detail(iterator &it, const iterator &end, Function *&fun)
Definition Mask.cpp:120
static bool parse_detail(iterator &it, const iterator &end, Function *&fun)
Definition Polygon.cpp:15
static bool parse_detail(iterator &it, const iterator &end, Function *fun)
static bool parse_detail(iterator &it, const iterator &end, Function *&fun)
Definition Repeat.cpp:36
static bool parse_detail(iterator &it, const iterator &end, Function *&fun)
Definition Rotation.cpp:38
static bool parse_detail(iterator &it, const iterator &end, Function *&fun)
Definition Shear.cpp:42
static bool parse_detail(iterator &it, const iterator &end, Function *&fun)
static bool parse_detail(iterator &it, const iterator &end, Function *&fun)
static bool parse_detail(iterator &it, const iterator &end, Function *&fun)
Definition Union.cpp:31