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
|
#include "uscxml/URL.h"
#include "uscxml/Message.h"
#include "uscxml/Interpreter.h"
#include "uscxml/plugins/datamodel/promela/PromelaDataModel.h"
#include "uscxml/plugins/datamodel/promela/PromelaParser.h"
#include <assert.h>
#include <boost/algorithm/string.hpp>
#include <iostream>
using namespace uscxml;
using namespace boost;
extern int promela_debug;
int main(int argc, char** argv) {
promela_debug = 0;
std::list<std::string> expressions;
/* declarations */
// expressions.push_back("bool b1");
// expressions.push_back("bool b1;");
// expressions.push_back("bool b1, b2, b3");
// expressions.push_back("bool b1, b2, b3;");
// expressions.push_back("bool b1, b2 = 3 + 4, b3, b4, b5;");
// expressions.push_back("bool b1; bool b2; bool b3; bool b4;");
// expressions.push_back("bool b1; bool b2; bool b3, b4, b5;");
// expressions.push_back("bit b = 1;");
// expressions.push_back("byte state = 1;");
// expressions.push_back("bool b1, b2 = 1, b3;");
// expressions.push_back("bool busy[3];");
// expressions.push_back("bool busy[3], us[4];");
// expressions.push_back("mtype = {\nred, white, blue,\nabort, accept, ack, sync_ack, close, connect,\ncreate, data, eof, open, reject, sync, transfer,\nFATAL, NON_FATAL, COMPLETE\n}");
/* expressions */
// expressions.push_back("i+1");
// expressions.push_back("(x == false || t == Bturn);");
// expressions.push_back("a + (1 << b)");
// expressions.push_back("(a + 1) << b");
// expressions.push_back("(b < N)");
// expressions.push_back("(mt+1)%MAX;");
/* statements */
// expressions.push_back("t = Bturn;");
// expressions.push_back("c++");
// expressions.push_back("state = state - 1");
// expressions.push_back("printf(\"hello world\\n\")");
// expressions.push_back("printf(\"result %d: %d\n\", id, res, foo, bar)");
// expressions.push_back("printf(\"x = %d\n\", x)");
// expressions.push_back("(n <= 1)");
// expressions.push_back("res = (a*a+b)/2*a;");
// expressions.push_back("assert(0) /* a forced stop, (Chapter 6) */");
// expressions.push_back("assert(count == 0 || count == 1)");
for (std::list<std::string>::iterator exprIter = expressions.begin();
exprIter != expressions.end();
exprIter++) {
try {
std::cout << std::endl << "'" << *exprIter << "':" << std::endl;
PromelaParser ast(*exprIter);
ast.dump();
} catch (Event e) {
std::cerr << e << std::endl;
}
}
}
|