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 RangeEvaler : 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 RepeatEvaler : public hit::Evaler
51{
52public:
53 virtual std::string
54 eval(hit::Field * n, const std::list<std::string> & args, hit::BraceExpander & exp);
55};
56
57class DupParamWalker : public hit::Walker
58{
59public:
60 virtual void
61 walk(const std::string & fullpath, const std::string & /*nodepath*/, hit::Node * n) override;
62
63 std::vector<hit::ErrorMessage> errors;
64
65private:
66 std::map<std::string, hit::Node *> _have;
67};
68
69class BadActiveWalker : public hit::Walker
70{
71public:
72 virtual void walk(const std::string & /*fullpath*/,
73 const std::string & /*nodepath*/,
74 hit::Node * section) override;
75 std::vector<hit::ErrorMessage> errors;
76};
77
78class CompileParamWalker : public hit::Walker
79{
80public:
81 typedef std::map<std::string, hit::Node *> ParamMap;
83
84 virtual void
85 walk(const std::string & fullpath, const std::string & /*nodepath*/, hit::Node * n) override;
86
87private:
89};
90
91class OverrideParamWalker : public hit::Walker
92{
93public:
95
96 void walk(const std::string & fullpath, const std::string & /*nodepath*/, hit::Node * n) override;
97 std::vector<std::string> warnings;
98
99private:
101};
102
109{
110public:
116 Parser(const std::vector<std::string> & input_filenames,
117 const std::optional<std::vector<std::string>> & input_text = {});
123 Parser(const std::string & input_filename, const std::optional<std::string> & input_text = {});
124
125 struct Error : public hit::Error
126 {
127 Error() = delete;
128 Error(const std::vector<hit::ErrorMessage> & error_messages);
129 };
130
134 void parse();
135
142 const hit::Node * queryRoot() const { return _root.get(); }
143 hit::Node * queryRoot() { return _root.get(); }
145
151 hit::Node & getRoot();
152
159 const hit::Node * queryCommandLineRoot() const { return _cli_root.get(); }
160 hit::Node * queryCommandLineRoot() { return _cli_root.get(); }
162
169 const hit::Node & getCommandLineRoot() const;
170 hit::Node & getCommandLineRoot();
172
176 const std::vector<std::string> & getInputFileNames() const { return _input_filenames; }
177
181 const std::vector<std::string> & getInputText() const { return _input_text; }
182
183 /*
184 * Get extracted application type from parser
185 */
186 const std::string & getAppType() const { return _app_type; }
187
188 /*
189 * Set the application type in parser
190 */
191 void setAppType(const std::string & app_type) { _app_type = app_type; }
192
196 void setCommandLineParams(const std::vector<std::string> & params);
197
201 const std::string & getLastInputFileName() const;
202
206 std::filesystem::path getLastInputFilePath() const { return getLastInputFileName(); }
207
213 void setThrowOnError(const bool throw_on_error) { _throw_on_error = throw_on_error; }
214
220 bool getThrowOnError() const { return _throw_on_error; }
221
227 const std::set<std::string> & getExtractedVars() const { return _extracted_vars; }
232 static void appendErrorMessages(std::vector<hit::ErrorMessage> & to,
233 const std::vector<hit::ErrorMessage> & from);
234 static void appendErrorMessages(std::vector<hit::ErrorMessage> & to, const hit::Error & error);
236
240 static std::string joinErrorMessages(const std::vector<hit::ErrorMessage> & error_messages);
241
248 void parseError(std::vector<hit::ErrorMessage> messages) const;
249
250private:
252 std::unique_ptr<hit::Node> _root;
253
255 const std::vector<std::string> _input_filenames;
256
258 std::vector<std::string> _input_text;
259
261 std::unique_ptr<hit::Node> _cli_root;
262
264 std::string _app_type;
265
268
270 std::optional<std::vector<std::string>> _command_line_params;
271
273 std::set<std::string> _extracted_vars;
274};
std::vector< hit::ErrorMessage > errors
Definition Parser.h:75
virtual void walk(const std::string &, const std::string &, hit::Node *section) override
Definition Parser.C:354
CompileParamWalker(ParamMap &map)
Definition Parser.h:82
std::map< std::string, hit::Node * > ParamMap
Definition Parser.h:81
virtual void walk(const std::string &fullpath, const std::string &, hit::Node *n) override
Definition Parser.C:329
ParamMap & _map
Definition Parser.h:88
std::map< std::string, hit::Node * > _have
Definition Parser.h:66
virtual void walk(const std::string &fullpath, const std::string &, hit::Node *n) override
Definition Parser.C:308
std::vector< hit::ErrorMessage > errors
Definition Parser.h:63
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:100
OverrideParamWalker(const CompileParamWalker::ParamMap &map)
Definition Parser.h:94
std::vector< std::string > warnings
Definition Parser.h:97
void walk(const std::string &fullpath, const std::string &, hit::Node *n) override
Definition Parser.C:338
Class for parsing input files.
Definition Parser.h:109
std::set< std::string > _extracted_vars
Variables that have been extracted during brace expansion.
Definition Parser.h:273
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:621
const std::string & getLastInputFileName() const
Definition Parser.C:430
void setThrowOnError(const bool throw_on_error)
Set whether or not to throw Parse::Error on errors.
Definition Parser.h:213
void setAppType(const std::string &app_type)
Definition Parser.h:191
const hit::Node & getCommandLineRoot() const
Definition Parser.C:607
const hit::Node * queryRoot() const
Definition Parser.h:142
void setCommandLineParams(const std::vector< std::string > &params)
Sets the HIT parameters from the command line.
Definition Parser.C:423
const std::vector< std::string > & getInputText() const
Definition Parser.h:181
std::vector< std::string > _input_text
The input text (may be filled during parse())
Definition Parser.h:258
const std::vector< std::string > & getInputFileNames() const
Definition Parser.h:176
const std::string & getAppType() const
Definition Parser.h:186
std::filesystem::path getLastInputFilePath() const
Definition Parser.h:206
const std::vector< std::string > _input_filenames
The input file names.
Definition Parser.h:255
std::string _app_type
The application types extracted from [Application] block.
Definition Parser.h:264
std::optional< std::vector< std::string > > _command_line_params
The command line HIT parameters (if any)
Definition Parser.h:270
std::unique_ptr< hit::Node > _cli_root
The root node for command line hit arguments.
Definition Parser.h:261
std::unique_ptr< hit::Node > _root
The root node, which owns the whole tree.
Definition Parser.h:252
bool getThrowOnError() const
Definition Parser.h:220
hit::Node * queryRoot()
Definition Parser.h:143
void parseError(std::vector< hit::ErrorMessage > messages) const
Helper for throwing an error with the given messages.
Definition Parser.C:643
bool _throw_on_error
Whether or not to throw on error.
Definition Parser.h:267
hit::Node & getRoot()
Definition Parser.C:599
hit::Node * queryCommandLineRoot()
Definition Parser.h:160
const hit::Node * queryCommandLineRoot() const
Definition Parser.h:159
void parse()
Parses the inputs.
Definition Parser.C:443
const std::set< std::string > & getExtractedVars() const
Definition Parser.h:227
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:634
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:262
virtual std::string eval(hit::Field *n, const std::list< std::string > &args, hit::BraceExpander &exp)
Definition Parser.C:83
Error()=delete