https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Parser.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#pragma once
11
12#include "MooseTypes.h"
13
14#include "hit/hit.h"
15
16#include <vector>
17#include <string>
18#include <iomanip>
19#include <optional>
20#include <filesystem>
21
22class FuncParseEvaler : public hit::Evaler
23{
24public:
25 virtual std::string
26 eval(hit::Field * n, const std::list<std::string> & args, hit::BraceExpander & exp);
27};
28
29class UnitsConversionEvaler : public hit::Evaler
30{
31public:
32 virtual std::string
33 eval(hit::Field * n, const std::list<std::string> & args, hit::BraceExpander & exp);
34};
35
36class EnumerateEvaler : public hit::Evaler
37{
38public:
39 virtual std::string
40 eval(hit::Field * n, const std::list<std::string> & args, hit::BraceExpander & exp);
41};
42
43class RepeatEvaler : public hit::Evaler
44{
45public:
46 virtual std::string
47 eval(hit::Field * n, const std::list<std::string> & args, hit::BraceExpander & exp);
48};
49
50class DupParamWalker : public hit::Walker
51{
52public:
53 virtual void
54 walk(const std::string & fullpath, const std::string & /*nodepath*/, hit::Node * n) override;
55
56 std::vector<hit::ErrorMessage> errors;
57
58private:
59 std::map<std::string, hit::Node *> _have;
60};
61
62class BadActiveWalker : public hit::Walker
63{
64public:
65 virtual void walk(const std::string & /*fullpath*/,
66 const std::string & /*nodepath*/,
67 hit::Node * section) override;
68 std::vector<hit::ErrorMessage> errors;
69};
70
71class CompileParamWalker : public hit::Walker
72{
73public:
74 typedef std::map<std::string, hit::Node *> ParamMap;
76
77 virtual void
78 walk(const std::string & fullpath, const std::string & /*nodepath*/, hit::Node * n) override;
79
80private:
82};
83
84class OverrideParamWalker : public hit::Walker
85{
86public:
88
89 void walk(const std::string & fullpath, const std::string & /*nodepath*/, hit::Node * n) override;
90 std::vector<std::string> warnings;
91
92private:
94};
95
102{
103public:
109 Parser(const std::vector<std::string> & input_filenames,
110 const std::optional<std::vector<std::string>> & input_text = {});
116 Parser(const std::string & input_filename, const std::optional<std::string> & input_text = {});
117
118 struct Error : public hit::Error
119 {
120 Error() = delete;
121 Error(const std::vector<hit::ErrorMessage> & error_messages);
122 };
123
127 void parse();
128
135 const hit::Node * queryRoot() const { return _root.get(); }
136 hit::Node * queryRoot() { return _root.get(); }
138
144 hit::Node & getRoot();
145
152 const hit::Node * queryCommandLineRoot() const { return _cli_root.get(); }
153 hit::Node * queryCommandLineRoot() { return _cli_root.get(); }
155
162 const hit::Node & getCommandLineRoot() const;
163 hit::Node & getCommandLineRoot();
165
169 const std::vector<std::string> & getInputFileNames() const { return _input_filenames; }
170
174 const std::vector<std::string> & getInputText() const { return _input_text; }
175
176 /*
177 * Get extracted application type from parser
178 */
179 const std::string & getAppType() const { return _app_type; }
180
181 /*
182 * Set the application type in parser
183 */
184 void setAppType(const std::string & app_type) { _app_type = app_type; }
185
189 void setCommandLineParams(const std::vector<std::string> & params);
190
194 const std::string & getLastInputFileName() const;
195
199 std::filesystem::path getLastInputFilePath() const { return getLastInputFileName(); }
200
206 void setThrowOnError(const bool throw_on_error) { _throw_on_error = throw_on_error; }
207
213 bool getThrowOnError() const { return _throw_on_error; }
214
220 const std::set<std::string> & getExtractedVars() const { return _extracted_vars; }
225 static void appendErrorMessages(std::vector<hit::ErrorMessage> & to,
226 const std::vector<hit::ErrorMessage> & from);
227 static void appendErrorMessages(std::vector<hit::ErrorMessage> & to, const hit::Error & error);
229
233 static std::string joinErrorMessages(const std::vector<hit::ErrorMessage> & error_messages);
234
241 void parseError(std::vector<hit::ErrorMessage> messages) const;
242
243private:
245 std::unique_ptr<hit::Node> _root;
246
248 const std::vector<std::string> _input_filenames;
249
251 std::vector<std::string> _input_text;
252
254 std::unique_ptr<hit::Node> _cli_root;
255
257 std::string _app_type;
258
261
263 std::optional<std::vector<std::string>> _command_line_params;
264
266 std::set<std::string> _extracted_vars;
267};
std::vector< hit::ErrorMessage > errors
Definition Parser.h:68
virtual void walk(const std::string &, const std::string &, hit::Node *section) override
Definition Parser.C:282
CompileParamWalker(ParamMap &map)
Definition Parser.h:75
std::map< std::string, hit::Node * > ParamMap
Definition Parser.h:74
virtual void walk(const std::string &fullpath, const std::string &, hit::Node *n) override
Definition Parser.C:257
ParamMap & _map
Definition Parser.h:81
std::map< std::string, hit::Node * > _have
Definition Parser.h:59
virtual void walk(const std::string &fullpath, const std::string &, hit::Node *n) override
Definition Parser.C:236
std::vector< hit::ErrorMessage > errors
Definition Parser.h:56
virtual std::string eval(hit::Field *n, const std::list< std::string > &args, hit::BraceExpander &exp)
Definition Parser.C:144
virtual std::string eval(hit::Field *n, const std::list< std::string > &args, hit::BraceExpander &exp)
Definition Parser.C:29
const CompileParamWalker::ParamMap & _map
Definition Parser.h:93
OverrideParamWalker(const CompileParamWalker::ParamMap &map)
Definition Parser.h:87
std::vector< std::string > warnings
Definition Parser.h:90
void walk(const std::string &fullpath, const std::string &, hit::Node *n) override
Definition Parser.C:266
Class for parsing input files.
Definition Parser.h:102
std::set< std::string > _extracted_vars
Variables that have been extracted during brace expansion.
Definition Parser.h:266
static void appendErrorMessages(std::vector< hit::ErrorMessage > &to, const std::vector< hit::ErrorMessage > &from)
Helper for accumulating errors from a walker into an accumulation of errors.
Definition Parser.C:547
const std::string & getLastInputFileName() const
Definition Parser.C:358
void setThrowOnError(const bool throw_on_error)
Set whether or not to throw Parse::Error on errors.
Definition Parser.h:206
void setAppType(const std::string &app_type)
Definition Parser.h:184
const hit::Node & getCommandLineRoot() const
Definition Parser.C:533
const hit::Node * queryRoot() const
Definition Parser.h:135
void setCommandLineParams(const std::vector< std::string > &params)
Sets the HIT parameters from the command line.
Definition Parser.C:351
const std::vector< std::string > & getInputText() const
Definition Parser.h:174
std::vector< std::string > _input_text
The input text (may be filled during parse())
Definition Parser.h:251
const std::vector< std::string > & getInputFileNames() const
Definition Parser.h:169
const std::string & getAppType() const
Definition Parser.h:179
std::filesystem::path getLastInputFilePath() const
Definition Parser.h:199
const std::vector< std::string > _input_filenames
The input file names.
Definition Parser.h:248
std::string _app_type
The application types extracted from [Application] block.
Definition Parser.h:257
std::optional< std::vector< std::string > > _command_line_params
The command line HIT parameters (if any)
Definition Parser.h:263
std::unique_ptr< hit::Node > _cli_root
The root node for command line hit arguments.
Definition Parser.h:254
std::unique_ptr< hit::Node > _root
The root node, which owns the whole tree.
Definition Parser.h:245
bool getThrowOnError() const
Definition Parser.h:213
hit::Node * queryRoot()
Definition Parser.h:136
void parseError(std::vector< hit::ErrorMessage > messages) const
Helper for throwing an error with the given messages.
Definition Parser.C:569
bool _throw_on_error
Whether or not to throw on error.
Definition Parser.h:260
hit::Node & getRoot()
Definition Parser.C:525
hit::Node * queryCommandLineRoot()
Definition Parser.h:153
const hit::Node * queryCommandLineRoot() const
Definition Parser.h:152
void parse()
Parses the inputs.
Definition Parser.C:371
const std::set< std::string > & getExtractedVars() const
Definition Parser.h:220
static std::string joinErrorMessages(const std::vector< hit::ErrorMessage > &error_messages)
Helper for combining error messages into a single, newline separated message.
Definition Parser.C:560
virtual std::string eval(hit::Field *n, const std::list< std::string > &args, hit::BraceExpander &exp)
Definition Parser.C:190
virtual std::string eval(hit::Field *n, const std::list< std::string > &args, hit::BraceExpander &exp)
Definition Parser.C:83
Error()=delete