17 inline void parser_assert (
bool requirement,
const char *explanation) {
19 throw std::runtime_error (explanation);
23 inline void parser_assert (
bool requirement,
const char *explanation,
const std::string &detail) {
25 throw std::runtime_error (std::string (explanation) +
": " + detail);
41 using StringType = std::string;
42 using CommandId = int;
45 static const CommandId NoCommand = -1;
46 static const CommandId EndOfOption = -2;
61 static void set_name (EvaluatorRef &target,
const std::string &
name);
90 const Schema::OptionSchemas &option_schemas,
91 const SchemaIntegratorCallback &integrator)
const = 0;
94 static void construct (EvaluatorRef &evaluator,
100 inline bool operator!= (
const Evaluator &other)
const {
101 return !(*
this == other);
112 template <
class DesiredEvaluator>
113 static inline DesiredEvaluator *uptype_construct (EvaluatorRef &parser,
bool *existed =
nullptr) {
114 DesiredEvaluator *possess =
dynamic_cast<DesiredEvaluator *
> (parser.get());
117 *existed = (possess !=
nullptr);
120 possess =
new DesiredEvaluator (parser.get());
121 parser.reset (possess);
128 virtual Evaluator *getNextEvaluator (
const StringType &value)
const override;
130 virtual void convertToOptionEvaluator()
override;
132 const Schema::OptionSchemas &option_schemas,
133 const SchemaIntegratorCallback &integrator)
const override;
138 virtual Evaluator *getNextEvaluator (
const StringType &value)
const override;
140 virtual void convertToOptionEvaluator()
override;
142 const Schema::OptionSchemas &option_schemas,
143 const SchemaIntegratorCallback &integrator)
const override;
146 using Evaluator::Evaluator;
152 EvaluatorRef next_evaluator;
157 using Evaluator::Evaluator;
163 const Schema::OptionSchemas &option_schemas,
164 const SchemaIntegratorCallback &integrator)
const override;
167 static void construct (EvaluatorRef &parser,
172 std::string keywords);
178 using ValueEvaluator::ValueEvaluator;
180 virtual SchemaBase *getSchema()
const override;
186 StringType expression;
187 using RegexType = std::basic_regex <StringType::value_type>;
190 using StringEvaluator::StringEvaluator;
193 virtual SchemaBase *getSchema()
const override final;
196 const std::string &
name,
197 const StringType &expression,
198 const bool case_blind);
204 using StringEvaluator::StringEvaluator;
215 using ValueEvaluator::ValueEvaluator;
218 virtual SchemaBase *getSchema()
const override final;
221 const std::string &
name,
222 const std::string &min,
223 const std::string &max);
232 using ValueEvaluator::ValueEvaluator;
235 virtual SchemaBase *getSchema()
const override final;
238 const std::string &
name,
239 const std::string &min,
240 const std::string &max);
248 EvaluatorRef numeric_evaluator;
249 std::unordered_map<StringType, EvaluatorRef> tokens;
250 bool numbers_present{
false};
253 using Evaluator::Evaluator;
255 inline static bool is_numeric (
const std::string &value) {
256 return ((!value.empty() && isdigit (value[0]))
257 || (value.size() >= 2 && value[0] ==
'-' && isdigit (value[1])));
260 inline static std::string tolower (std::string value) {
261 for (
auto &ch : value) {
273 static void construct (EvaluatorRef &parser,
277 const std::string &
name,
278 std::string keywords);
280 const Schema::OptionSchemas &option_schemas,
281 const SchemaIntegratorCallback &integrator)
const override;
291 EvaluatorRef terminating_evaluator;
294 using Evaluator::Evaluator;
306 using RemainderEvaluator::RemainderEvaluator;
310 const Schema::OptionSchemas &option_schemas,
311 const SchemaIntegratorCallback &integrator)
const override;
317 OptionParserRef option_parser;
320 bool regurgitate {
false};
321 bool iterate {
false};
327 using RemainderEvaluator::RemainderEvaluator;
330 static std::vector<OptionEvaluator *>
construct (EvaluatorRef &evaluator,
331 std::string option_parser_type,
333 const Parser *parent_parser);
335 const Schema::OptionSchemas &option_schemas,
336 const SchemaIntegratorCallback &integrator)
const override;
An iterator for argument vectors.
Definition parsnip_argv.h:42
Generic data type.
Definition parsnip.h:81
Schema component for validating dictionaries.
Definition parsnip_schema.h:307
An evaluator representing abrupt end of the command pattern.
Definition parsnip_evaluate.h:137
Evaluator base class.
Definition parsnip_evaluate.h:30
virtual void constructSchema(const DictionarySchema &schema, const Schema::OptionSchemas &option_schemas, const SchemaIntegratorCallback &integrator) const =0
Construct a schema from an evaluator tree.
virtual Parsnip::Data evaluateToken(class ArgvCursor *cursor) const =0
Evaluate command line tokens.
virtual Evaluator * getNextEvaluator(const StringType &token) const =0
Determine if and how to evaluate additional command line tokens.
int evaluate(ArgvCursor *cursor, Parsnip::Data &result_dict)
Evaluate a token in the command line, and recurse if there is more to go.
Definition parsnip_command.cpp:359
static void set_name(EvaluatorRef &target, const std::string &name)
Assign a name by which to store values for value evaluators.
Definition parsnip_evaluate.cpp:55
virtual void convertToOptionEvaluator()=0
Make any changes to the parse tree to convert it to an options evaluator.
CommandId command_id
If this completes a command, the command ID.
Definition parsnip_evaluate.h:50
static void construct(EvaluatorRef &evaluator, const ArgvCursor &cursor, CommandId id, Parser *parent_parser)
Construct token handler from the token in a parsing definition.
Definition parsnip_command.cpp:273
void setCommandId(CommandId id)
Set the command ID in an evaluator.
Definition parsnip_evaluate.cpp:68
virtual bool operator==(const Evaluator &) const
Check if two evaluators are the same.
Definition parsnip_evaluate.cpp:75
std::string name
If not empty, the name by which this value shall be accessed.
Definition parsnip_evaluate.h:52
Evaluate and validate an integral value field.
Definition parsnip_evaluate.h:209
virtual Parsnip::Data evaluateToken(ArgvCursor *cursor) const override
Definition parsnip_evaluate.cpp:229
virtual bool operator==(const Evaluator &other) const override
Check if two evaluators are the same.
Definition parsnip_evaluate.cpp:251
static IntegerEvaluator * construct(EvaluatorRef &evaluator, const std::string &name, const std::string &min, const std::string &max)
Construct an evaluator (or validate the existing validator) for accepting an integer with a limited r...
Definition parsnip_evaluate.cpp:261
Evaluate a keyword in a command line.
Definition parsnip_evaluate.h:244
virtual Parsnip::Data evaluateToken(ArgvCursor *cursor) const override
Store the current keyword as a string, if it's marked for recording.
Definition parsnip_evaluate.cpp:345
virtual void convertToOptionEvaluator() override
Make any changes to the parse tree to convert it to an options evaluator.
Definition parsnip_evaluate.cpp:411
virtual void constructSchema(const DictionarySchema &scheme, const Schema::OptionSchemas &option_schemas, const SchemaIntegratorCallback &integrator) const override
Construct a schema from an evaluator tree.
Definition parsnip_evaluate.cpp:367
virtual Evaluator * getNextEvaluator(const StringType &token) const override
Select an evaluator for the next element based on current token.
Definition parsnip_evaluate.cpp:353
virtual bool operator==(const Evaluator &other) const override
Check if two evaluators are the same.
Definition parsnip_evaluate.cpp:390
static void construct(EvaluatorRef &parser, const ArgvCursor &cursor, CommandId id, Parser *parent_parser, const std::string &name, std::string keywords)
Construct a keyword token handler.
Definition parsnip_command.cpp:138
Evaluate remainder with a different parser.
Definition parsnip_evaluate.h:315
virtual void constructSchema(const DictionarySchema &scheme, const Schema::OptionSchemas &option_schemas, const SchemaIntegratorCallback &integrator) const override
Construct a schema from an evaluator tree.
Definition parsnip_evaluate.cpp:484
virtual bool operator==(const Evaluator &) const override
Check if two evaluators are the same.
Definition parsnip_evaluate.cpp:501
static std::vector< OptionEvaluator * > construct(EvaluatorRef &evaluator, std::string option_parser_type, bool iterative, const Parser *parent_parser)
Construct an evaluator (or validate the existing validator) that parsers the remainder with an option...
Definition parsnip_evaluate.cpp:516
virtual Parsnip::Data evaluateToken(class ArgvCursor *cursor) const override
Evaluate command line tokens.
Definition parsnip_evaluate.cpp:468
A class for parsing command line options (name-value pairs, for instance).
Definition parsnip_command.h:82
A class for parsing command lines.
Definition parsnip_command.h:100
Gather the rest of the command line as an untokenized string.
Definition parsnip_evaluate.h:202
virtual Parsnip::Data evaluateToken(ArgvCursor *cursor) const override
Definition parsnip_evaluate.cpp:219
Evaluate and validate a numeric value field.
Definition parsnip_evaluate.h:227
static RealEvaluator * construct(EvaluatorRef &parser, const std::string &name, const std::string &min, const std::string &max)
Construct an evaluator (or validate the existing validator) for accepting real number with a limited ...
Definition parsnip_evaluate.cpp:321
virtual bool operator==(const Evaluator &other) const override
Check if two evaluators are the same.
Definition parsnip_evaluate.cpp:288
virtual Parsnip::Data evaluateToken(ArgvCursor *cursor) const override
Interpret the token as double, range check it, and store it.
Definition parsnip_evaluate.cpp:297
Evaluate a string value field.
Definition parsnip_evaluate.h:185
virtual Parsnip::Data evaluateToken(ArgvCursor *cursor) const override
Definition parsnip_evaluate.cpp:173
static RegExEvaluator * construct(EvaluatorRef &evaluator, const std::string &name, const StringType &expression, const bool case_blind)
Construct an evaluator (or validate the existing validator) for accepting an integer with a limited r...
Definition parsnip_evaluate.cpp:196
virtual bool operator==(const Evaluator &other) const override
Check if two evaluators are the same.
Definition parsnip_evaluate.cpp:182
An evaluator that represents the rest of the command line.
Definition parsnip_evaluate.h:285
virtual Evaluator * getNextEvaluator(const StringType &value) const override
An evaluator that represents the rest of the command line.
Definition parsnip_evaluate.cpp:426
virtual bool operator==(const Evaluator &other) const override
Check if two evaluators are the same.
Definition parsnip_evaluate.cpp:430
virtual void convertToOptionEvaluator() override
Make any changes to the parse tree to convert it to an options evaluator.
Definition parsnip_evaluate.cpp:438
Gather the rest of the command line tokens in a list.
Definition parsnip_evaluate.h:302
virtual Parsnip::Data evaluateToken(ArgvCursor *cursor) const override
Definition parsnip_evaluate.cpp:444
virtual void constructSchema(const DictionarySchema &scheme, const Schema::OptionSchemas &option_schemas, const SchemaIntegratorCallback &integrator) const override
Construct a schema from an evaluator tree.
Definition parsnip_evaluate.cpp:452
Definition parsnip_schema.h:28
Schema for one JSON object.
Definition parsnip.h:612
A schema built to validate JSON messages based on command line patterns.
Definition parsnip_command.h:171
Evaluate a string value field.
Definition parsnip_evaluate.h:176
virtual Parsnip::Data evaluateToken(ArgvCursor *cursor) const override
Definition parsnip_evaluate.cpp:164
An evaluator representing abrupt end of the command pattern.
Definition parsnip_evaluate.h:127
Evaluate a value/fill-in field.
Definition parsnip_evaluate.h:150
virtual Evaluator * getNextEvaluator(const StringType &value) const override
Determine if and how to evaluate additional command line tokens.
Definition parsnip_evaluate.cpp:131
virtual void convertToOptionEvaluator() override
Make any changes to the parse tree to convert it to an options evaluator.
Definition parsnip_evaluate.cpp:143
virtual bool operator==(const Evaluator &other) const override
Check if two evaluators are the same.
Definition parsnip_evaluate.cpp:135
virtual void constructSchema(const DictionarySchema &scheme, const Schema::OptionSchemas &option_schemas, const SchemaIntegratorCallback &integrator) const override
Construct a schema from an evaluator tree.
Definition parsnip_evaluate.cpp:150
static void construct(EvaluatorRef &parser, const ArgvCursor &cursor, CommandId id, Parser *parent_parser, std::string name, std::string keywords)
Construct a value/fill-in token handler.
Definition parsnip_command.cpp:187
Serialization and parsing library.
Definition parsnip.h:38
Parsnip command-line parsing.
Parsnip serialization schemas.