Browse Source

add argument parsing & help output

Former-commit-id: d5e412f2cd
tempestpy_adaptions
ThomasH 8 years ago
parent
commit
86c87ad6d1
  1. 117
      src/storm-gspn.cpp

117
src/storm-gspn.cpp

@ -1,34 +1,133 @@
#include <iostream>
#include <src/builder/ExplicitGspnModelBuilder.h>
#include "src/builder/ExplicitGspnModelBuilder.h"
#include "src/exceptions/BaseException.h" #include "src/exceptions/BaseException.h"
#include "src/parser/GspnParser.h" #include "src/parser/GspnParser.h"
#include "src/storage/gspn/GSPN.h" #include "src/storage/gspn/GSPN.h"
#include "src/storage/gspn/GspnBuilder.h"
#include "src/utility/macros.h" #include "src/utility/macros.h"
#include "src/utility/initialize.h" #include "src/utility/initialize.h"
#include <fstream> #include <fstream>
#include <iostream>
#include <string>
// TODO clean-up includes after doing all other todos
/*!
* Parses the arguments to storm-gspn
* The read data is stored in the different arguments (e.g., inputFile, formula, ...)
*
* @param argc number of arguments passed to storm-gspn
* @param argv array of arguments
* @param inputFile the input file is stored in this object
* @param formula the formula is stored in this object
* @param outputFile the output file is stored in this object
* @param outputType the output type is stored in this object
* @return false if the help flag is set or the input file is missing
*/
bool parseArguments(const int argc, const char **argv, std::string &inputFile, std::string &formula,
std::string &outputFile, std::string &outputType) {
auto end = argv + argc;
bool result = false;
for (auto it = argv; it != end; ++it) {
std::string currentArg = *it;
// parse input file argument
if (currentArg == "--input_file" || currentArg == "-i") {
auto next = it + 1;
if (next != end) {
return -1;
} else {
inputFile = *next;
result = true;
}
break;
}
int main(const int argc, const char** argv) {
if (argc != 3) {
std::cout << "Error: incorrect number of parameters!" << std::endl << std::endl;
std::cout << "Usage:" << std::endl;
std::cout << "storm-gspn <path to pnml file> <formular>" << std::endl;
// parse formula argument
if (currentArg == "--formula" || currentArg == "-f") {
auto next = it + 1;
if (next != end) {
return -1;
} else {
formula = *next;
}
break;
}
// parse output file argument
if (currentArg == "--output_file" || currentArg == "-o") {
auto next = it + 1;
if (next != end) {
return -1;
} else {
outputFile = *next;
}
break;
}
// parse output file type argument
if (currentArg == "--output_type" || currentArg == "-ot") {
auto next = it + 1;
if (next != end) {
return -1;
} else {
outputType = *next;
}
break;
}
// parse help argument
if (currentArg == "--help" || currentArg == "-h") {
return false;
}
}
return result;
}
/*!
* Print the manual of storm-gspn
*/
void printHelp() {
std::cout << "storm-gspn -i input_file [-f formula] [-o output_file] [-ot output_type] [-h]" << std::endl;
std::cout << std::endl;
std::cout << "-i, --input_file: file which contains the gspn" << std::endl;
std::cout << "-f, --formula: formula which should be checked on the gspn" << std::endl;
std::cout << "-o, -output_file: file in which the gspn/markov automaton should be stored" << std::endl
<< " requires the option -ot to be set" << std::endl;
std::cout << "-ot, --output_type: possible output types are: pnml, pnpro or ma" << std::endl;
}
int main(const int argc, const char **argv) {
std::string inputFile, formula, outputFile, outputType;
if (!parseArguments(argc, argv, inputFile, formula, outputFile, outputType)) {
printHelp();
return 1; return 1;
} }
try { try {
storm::utility::setUp(); storm::utility::setUp();
// Parse GSPN from xml
// parse GSPN from file
auto parser = storm::parser::GspnParser(); auto parser = storm::parser::GspnParser();
auto gspn = parser.parse(argv[1]);
auto gspn = parser.parse(inputFile);
// todo ------[marker]
gspn.isValid(); gspn.isValid();
storm::gspn::GspnBuilder builder2;
builder2.addPlace(2);
// //
//std::ofstream file; //std::ofstream file;
//file.open("/Users/thomas/Desktop/storm.dot"); //file.open("/Users/thomas/Desktop/storm.dot");
//gspn.writeDotToStream(file); //gspn.writeDotToStream(file);
//file.close(); //file.close();
std::ofstream file;
file.open("/Users/thomas/Desktop/gspn.pnpro");
gspn.toPnpro(file);
file.close();
std::cout << "Parsing complete!" << std::endl; std::cout << "Parsing complete!" << std::endl;

Loading…
Cancel
Save