Files
Flexible-CAP/generator/templates/ArgGrammarDriver.hpp
Michael Kuc 60d0446cf0 First usable generator source.
Still issues with usage rules and error reporting, but functional.
2019-09-28 16:01:40 +01:00

59 lines
1.7 KiB
C++

{{=@@ @@=}}
#pragma once
#include "@@{argspec}@@ArgGrammarParser.tab.hh"
#include <iostream>
#include <set>@@#any_parameters@@
#include <map>
#include <optional>@@/any_parameters@@
#include <string>
namespace @@{argspec}@@ArgGrammar {
enum class FlagArg { @@#argument_tokens@@@@^has_parameters@@@@{clean_token}@@, @@/has_parameters@@@@/argument_tokens@@ };@@#any_parameters@@
enum class ParamArg { @@#argument_tokens@@@@#has_parameters@@@@{clean_token}@@, @@/has_parameters@@@@/argument_tokens@@ };@@/any_parameters@@
class Scanner;
class Driver {
public:
enum class Result { success, completedAction, wrongArgument };
Driver(int argc, char* argv[]);
virtual ~Driver();
Result parse();
void addArg(const FlagArg flag);@@#any_parameters@@
void addArg(const ParamArg flag, const std::vector<std::string> arguments);@@/any_parameters@@
bool getArg(const FlagArg flag) const;@@#any_parameters@@
std::optional<std::vector<std::string>> getArg(const ParamArg flag) const;@@/any_parameters@@
void setResult(Result result);
const std::set<FlagArg>& getFlagArgs() const;@@#any_parameters@@
const std::map<ParamArg, std::vector<std::string>>& getParamArgs() const;@@/any_parameters@@
std::ostream& print(std::ostream& oss);
char** getArgv();
private:
int argc;
char** argv;
Result result = Result::success;
void parseHelper(std::istream& iss);
@@{argspec}@@ArgGrammar::Parser* parser = nullptr;
@@{argspec}@@ArgGrammar::Scanner* scanner = nullptr;
/*
* specialised data store
*/
std::set<FlagArg> flagArguments;@@#any_parameters@@
std::map<ParamArg, std::vector<std::string>> paramArguments;@@/any_parameters@@
};
} // namespace trueArgGrammar