gereon
12 years ago
7 changed files with 101 additions and 52 deletions
-
16src/parser/parser.h
-
5src/parser/readLabFile.h
-
32src/parser/readPctlFile.cpp
-
15src/parser/readPctlFile.h
-
66src/parser/readPrctlFile.cpp
-
15src/parser/readPrctlFile.h
-
4src/parser/readTraFile.h
@ -1,32 +0,0 @@ |
|||||
#include "src/parser/readPctlFile.h"
|
|
||||
|
|
||||
#include <boost/spirit/include/classic_core.hpp>
|
|
||||
#include <boost/spirit/include/qi_grammar.hpp>
|
|
||||
#include <boost/spirit/include/qi.hpp>
|
|
||||
#include <boost/spirit/include/qi_char_class.hpp>
|
|
||||
|
|
||||
namespace bs = boost::spirit; |
|
||||
namespace bsq = bs::qi; |
|
||||
|
|
||||
namespace |
|
||||
{ |
|
||||
using namespace bsq; |
|
||||
struct Parser : public bsq::grammar< char const* > |
|
||||
{ |
|
||||
typedef rule< char const* > rule_t; |
|
||||
|
|
||||
rule_t atom, term, formula; |
|
||||
|
|
||||
Parser() : Parser::base_type(formula, "PCTL parser") |
|
||||
{ |
|
||||
atom = double_ | (char_('(') >> formula >> char_(')') ); |
|
||||
term = atom >> *( char_('*') >> atom ); |
|
||||
formula = term >> *( char_('+') >> term ); |
|
||||
} |
|
||||
}; |
|
||||
} |
|
||||
|
|
||||
void readPctlFile(const char* filename) |
|
||||
{ |
|
||||
Parser p; |
|
||||
} |
|
@ -1,15 +0,0 @@ |
|||||
#ifndef READPCTLFILE_H_ |
|
||||
#define READPCTLFILE_H_ |
|
||||
|
|
||||
namespace mrmc { |
|
||||
namespace parser { |
|
||||
|
|
||||
/*! |
|
||||
* @brief Load PCTL file |
|
||||
*/ |
|
||||
void readPctlFile(const char * filename); |
|
||||
|
|
||||
} // namespace parser |
|
||||
} // namespace mrmc |
|
||||
|
|
||||
#endif /* READPCTLFILE_H_ */ |
|
@ -0,0 +1,66 @@ |
|||||
|
#include "src/parser/readPrctlFile.h"
|
||||
|
|
||||
|
#include "src/parser/parser.h"
|
||||
|
|
||||
|
#include <iostream>
|
||||
|
|
||||
|
#include <boost/spirit/include/classic_core.hpp>
|
||||
|
#include <boost/spirit/include/qi_grammar.hpp>
|
||||
|
#include <boost/spirit/include/qi.hpp>
|
||||
|
#include <boost/spirit/include/qi_char_class.hpp>
|
||||
|
|
||||
|
namespace bs = boost::spirit; |
||||
|
|
||||
|
namespace |
||||
|
{ |
||||
|
using namespace bs::qi; |
||||
|
using namespace bs::standard; |
||||
|
|
||||
|
struct PRCTLParser : public grammar< char const* > |
||||
|
{ |
||||
|
typedef rule< char const* > rule_t; |
||||
|
|
||||
|
/*!
|
||||
|
* @brief Generic Nonterminals. |
||||
|
*/ |
||||
|
rule_t variable, value; |
||||
|
|
||||
|
/*!
|
||||
|
* @brief Nonterminals for file header. |
||||
|
*/ |
||||
|
rule_t varDef, type; |
||||
|
|
||||
|
/*!
|
||||
|
* @brief Nonterminals for formula. |
||||
|
*/ |
||||
|
rule_t formula, opP; |
||||
|
|
||||
|
/*!
|
||||
|
* @brief Nonterminals for high-level file structure. |
||||
|
*/ |
||||
|
rule_t file, header; |
||||
|
|
||||
|
PRCTLParser() : PRCTLParser::base_type(file, "PRCTL parser") |
||||
|
{ |
||||
|
variable = alnum; |
||||
|
value = int_ | double_; |
||||
|
type = string("int") | string("double"); |
||||
|
varDef = string("const") >> type >> variable >> string("=") >> value >> string(";"); |
||||
|
|
||||
|
header = *( varDef ); |
||||
|
|
||||
|
file = header; |
||||
|
} |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
void readPrctlFile(const char* filename) |
||||
|
{ |
||||
|
PRCTLParser p; |
||||
|
mrmc::parser::MappedFile file(filename); |
||||
|
|
||||
|
if (bs::qi::parse< char const* >(file.data, file.dataend, p)) |
||||
|
{ |
||||
|
std::cout << "File was parsed" << std::endl; |
||||
|
} |
||||
|
} |
@ -0,0 +1,15 @@ |
|||||
|
#ifndef READPRCTLFILE_H_ |
||||
|
#define READPRCTLFILE_H_ |
||||
|
|
||||
|
namespace mrmc { |
||||
|
namespace parser { |
||||
|
|
||||
|
/*! |
||||
|
* @brief Load PRCTL file |
||||
|
*/ |
||||
|
void readPrctlFile(const char * filename); |
||||
|
|
||||
|
} // namespace parser |
||||
|
} // namespace mrmc |
||||
|
|
||||
|
#endif /* READPRCTLFILE_H_ */ |
Write
Preview
Loading…
Cancel
Save
Reference in new issue