-
Notifications
You must be signed in to change notification settings - Fork 0
/
example.cpp
90 lines (72 loc) · 2.8 KB
/
example.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <iostream>
#include <fstream>
#include <string>
#include "src/generator.h"
#include <chrono>
/*!
* \brief This is an example of using EBNF Generator
*
* include generator.h and linc DataGenerator lib
*/
int main()
{
using namespace std;
setlocale(LC_ALL,"ru-RU.UTF-8");
ifstream ifs("input");
ofstream ofs("output");
string expr,str;
cout<<"Reading EBNF..."<<endl;
//std::chrono::time_point<std::chrono::system_clock> start;
std::chrono::duration<double> delta;
auto start = std::chrono::steady_clock::now();
while(ifs>>str) //read all data from input file to expr
{
expr.append(str);
expr.append(" ");
}
try
{
Generator generator; //main class to use
Parser parser;
generator.getTokens(expr,parser);//parse expr for tokens with parser and store it to generator
generator.setOrTokensProbabilities("character",0,{5,5,40,50});//for token character type like ...a|b|c|d... - a and b have 5%chance to be added c - 40% and d - 50%
generator.setSquareBraceProbability("not",0,40);//for token not type like ...[x]... x has 40%chance to be added
generator.setSquareBraceProbability("word",0,20);//for token word type like ...[x]...x has 20%chance to be added
delta = std::chrono::steady_clock::now() - start;
cout<<"Time spent: "<<delta.count()<<endl;
//generator.setAddingPolicy("word",std::make_shared<NearAveragePolicy>(6.0,2.0));
//generator.setAddingPolicy("rule",std::make_shared<MaxPolicy>(50));
//generator.setMainTokenName("grammar");
// loadDictionaryFromFile("word","words",generator);
//generator.setAddingPolicy("word",std::make_shared<MinMaxPolicy>());
std::string command;
while(1)
{
try
{
cout<<"Waiting for input...(to exit enter \"q\")...\n";
cin >>command;
if(command == "q") break;
cout<<"Generating data for token "<<command<<"... \n";
start = std::chrono::steady_clock::now();
generator.generate(command);//generates results for token named $command
StringList results = generator.getResults();//gets results as vector<string>
routines::showCorrespondingResults(results,ofs,results.size());//store result to ofs(output file)
delta = std::chrono::steady_clock::now() - start;
cout<<"Time spent: "<<delta.count()<<endl;
}
catch(exception &e)
{
cerr<<"Error occured: "<<endl;
cerr<<e.what()<<endl;
}
}
}
catch(exception &e)
{
cerr<<"Error occured: "<<endl;
cerr<<e.what()<<endl;
}
//system("pause");
return 0;
}