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