19#ifndef _PARSER_CONTEXT_H
20#define _PARSER_CONTEXT_H
29#define PARSER_CONTEXT_MAX_RECURSION 20
44 std::string assign_expr;
47 typedef std::pair<std::string, std::string> ParserAssignExpr;
48 typedef std::list<ParserAssignExpr> ParserAssignList;
60 ParserError(std::string
const &,
int,
int, std::string
const &);
74 inline std::string
const &
80 inline std::string
const &
91 std::list<std::string>,
94 RecipeContextType> BaseValueType;
97 using BaseValueType::BaseValueType;
113 inline operator T()
const
115 return std::get<T>(*
this);
121 return std::get<T>(*
this);
127 return value<std::string>();
130 inline std::list<std::string> &
133 return value<std::list<std::string>>();
147 std::string m_file =
"<no file>";
149 Recipe *m_rootRecipe =
nullptr;
150 Recipe *m_recipe =
nullptr;
152 std::string m_lastToken;
153 std::list<std::set<std::string>> m_includeOnceContexts;
154 std::set<std::string> m_includeOnce;
155 std::list<std::string> m_searchPaths;
160 bool m_newLine =
false;
163 bool m_commentFound =
false;
164 bool m_escaped =
false;
165 bool m_havePrevious =
false;
169 std::list<ValueType> m_values;
171 bool isTerminator(
int)
const;
172 static bool isOperatorChar(
int);
173 static bool isIdStartChar(
int);
174 static bool isIdChar(
int);
175 static bool isValidStartChar(
int);
176 static void parseDOFDecl(
ParserDOFDecl const &, Real &, Real &, Real &);
177 static bool looksLikeNumber(std::string
const &);
181 bool lexNonString(
int c);
182 bool lexString(
int c);
183 std::string resolvePath(std::string
const &path);
188 void pushIncludeOnce();
189 bool popIncludeOnce();
192 int tokenType()
const;
193 std::string token()
const;
195 void error(
const char *msg);
197 void import(std::string
const &);
198 void script(std::string
const &);
201 void registerVariable(ParserAssignExpr
const &);
202 void registerPath(std::string
const &name, std::list<std::string>
const &);
203 void pushFrame(RecipeContextType, std::string
const &name, ParserAssignList
const & );
204 void pushOnPort(std::string
const &name, std::string
const &port);
205 void pushPort(std::string
const &port);
206 void pushElementDefinition(std::string
const &);
207 void popElementDefinition();
209 void defineElement(std::string
const &name, std::string
const &factory, ParserAssignList
const & = ParserAssignList());
210 void debugParamList(ParserAssignList
const &);
211 bool alreadyImported(std::string
const &path)
const;
212 void addImportOnce(std::string
const &path);
217 m_values.push_back(T());
218 return m_values.back();
223 std::string
const &name,
224 std::string
const &min =
"",
225 std::string
const &max =
"")
227 auto &decl = value<ParserDOFDecl>();
235 pathList(std::string
const &first)
237 auto &val = value<std::list<std::string>>();
238 val.value<std::list<std::string>>().push_back(first);
243 contextType(RecipeContextType ctxType)
245 auto &val = value<RecipeContextType>();
251 assignExpr(std::string
const ¶m, std::string
const &expr)
253 auto &val = value<ParserAssignExpr>();
254 val.value<ParserAssignExpr>().first = param;
255 val.value<ParserAssignExpr>().second = expr;
260 assignString(std::string
const ¶m, std::string
const &str)
262 auto &val = value<ParserAssignExpr>();
263 val.value<ParserAssignExpr>().first = param;
264 val.value<ParserAssignExpr>().second =
"\"" + str +
"\"";
269 assignExprList(ParserAssignExpr
const &expr)
271 auto &val = value<ParserAssignList>();
272 val.value<ParserAssignList>().push_back(expr);
277 assignExprList(std::string
const ¶m, std::string
const &expr)
279 auto &val = value<ParserAssignList>();
280 val.value<ParserAssignList>().push_back(ParserAssignExpr(param, expr));
285 assignStringList(std::string
const ¶m, std::string
const &str)
287 auto &val = value<ParserAssignList>();
288 val.value<ParserAssignList>().push_back(
289 ParserAssignExpr(param,
'"' + str +
'"'));
309 void setFile(std::string
const &);
311 void addSearchPath(std::string
const &path);
313 virtual int read() = 0;
318 using ParserContext::ParserContext;
322 void setFile(FILE *fp, std::string
const &name);
323 virtual int read()
override;
328 using ParserContext::ParserContext;
329 std::string m_contents;
330 unsigned int m_ptr = 0;
333 void setContents(std::string
const &contents, std::string
const &name);
334 virtual int read()
override;
Definition: ParserContext.h:317
Definition: ParserContext.h:146
Definition: ParserContext.h:52
Definition: ParserContext.h:327
Definition: ParserContext.h:96
Definition: ParserContext.h:40
Definition: ParserContext.h:50