Merge lp:~ragusaen/verifypn/verifypn into lp:verifypn

Proposed by Rasmus Tollund
Status: Merged
Merged at revision: 253
Proposed branch: lp:~ragusaen/verifypn/verifypn
Merge into: lp:verifypn
Diff against target: 2104 lines (+1036/-165) (has conflicts)
10 files modified
include/PetriEngine/PQL/BinaryPrinter.h (+71/-0)
include/PetriEngine/PQL/Expressions.h (+15/-62)
include/PetriEngine/PQL/PQL.h (+0/-4)
include/PetriEngine/PQL/Visitor.h (+118/-90)
include/PetriEngine/PQL/XMLPrinter.h (+119/-0)
src/PetriEngine/PQL/BinaryPrinter.cpp (+173/-0)
src/PetriEngine/PQL/CMakeLists.txt (+1/-1)
src/PetriEngine/PQL/Expressions.cpp (+132/-5)
src/PetriEngine/PQL/XMLPrinter.cpp (+399/-0)
src/VerifyPN.cpp (+8/-3)
Text conflict in src/PetriEngine/PQL/Expressions.cpp
To merge this branch: bzr merge lp:~ragusaen/verifypn/verifypn
Reviewer Review Type Date Requested Status
Peter Gjøl Jensen Needs Fixing
Review via email: mp+409484@code.launchpad.net

Description of the change

Changed XML printer for queries to use visitor pattern.

To post a comment you must log in.
Revision history for this message
Peter Gjøl Jensen (peter-gjoel) :
review: Needs Fixing
lp:~ragusaen/verifypn/verifypn updated
253. By Rasmus Tollund

Added options for tab size and printing new lines

254. By Rasmus Tollund

Added a binary printer with visitor pattern. I changed the Visitor class to support overriding base class _accepts. This way the classes will default to the base class's _accept definition.

255. By Rasmus Tollund

Removed toBinary and toXML from expressions.[h/cpp]. Also added a couple of _accept for functions that were defined in the .h file.

256. By Rasmus Tollund

Removed .h file from add_libraries

257. By Rasmus Tollund

Fixed bug with until condition

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added file 'include/PetriEngine/PQL/BinaryPrinter.h'
--- include/PetriEngine/PQL/BinaryPrinter.h 1970-01-01 00:00:00 +0000
+++ include/PetriEngine/PQL/BinaryPrinter.h 2021-10-18 11:40:53 +0000
@@ -0,0 +1,71 @@
1/* Copyright (C) 2011 Jonas Finnemann Jensen <jopsen@gmail.com>,
2 * Thomas Søndersø Nielsen <primogens@gmail.com>,
3 * Lars Kærlund Østergaard <larsko@gmail.com>,
4 * Peter Gjøl Jensen <root@petergjoel.dk>,
5 * Rasmus Tollund <rtollu18@student.aau.dk>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21#ifndef VERIFYPN_BINARYPRINTER_H
22#define VERIFYPN_BINARYPRINTER_H
23
24#include "Visitor.h"
25
26namespace PetriEngine::PQL {
27 class BinaryPrinter : public Visitor {
28 public:
29 explicit BinaryPrinter(std::ostream& os) :
30 os(os) {}
31
32 protected:
33 std::ostream& os;
34
35 void _accept(const NotCondition *element) override;
36
37 void _accept(const DeadlockCondition *element) override;
38
39 void _accept(const CompareConjunction *element) override;
40
41 void _accept(const UnfoldedUpperBoundsCondition *element) override;
42
43 void _accept(const UntilCondition *condition) override;
44
45 void _accept(const BooleanCondition *element) override;
46
47 void _accept(const UnfoldedIdentifierExpr *element) override;
48
49 void _accept(const LiteralExpr *element) override;
50
51 void _accept(const MinusExpr *element) override;
52
53 void _accept(const SubtractExpr *element) override;
54
55 void _accept(const CommutativeExpr *element) override;
56
57 void _accept(const SimpleQuantifierCondition *condition) override;
58
59 void _accept(const LogicalCondition *condition) override;
60
61 void _accept(const CompareCondition *condition) override;
62
63 void _accept(const IdentifierExpr *condition) override;
64
65 void _accept(const ShallowCondition *condition) override;
66
67 };
68}
69
70
71#endif //VERIFYPN_BINARYPRINTER_H
072
=== modified file 'include/PetriEngine/PQL/Expressions.h'
--- include/PetriEngine/PQL/Expressions.h 2021-08-12 12:35:54 +0000
+++ include/PetriEngine/PQL/Expressions.h 2021-10-18 11:40:53 +0000
@@ -62,9 +62,10 @@
62 const Expr_ptr &operator[](size_t i) const {62 const Expr_ptr &operator[](size_t i) const {
63 return _exprs[i];63 return _exprs[i];
64 }64 }
65 virtual std::string op() const = 0;
66
65 protected:67 protected:
66 virtual int apply(int v1, int v2) const = 0;68 virtual int apply(int v1, int v2) const = 0;
67 virtual std::string op() const = 0;
68 std::vector<Expr_ptr> _exprs;69 std::vector<Expr_ptr> _exprs;
69 virtual int32_t preOp(const EvaluationContext& context) const;70 virtual int32_t preOp(const EvaluationContext& context) const;
70 };71 };
@@ -78,7 +79,7 @@
78 friend CompareCondition;79 friend CompareCondition;
79 virtual void analyze(AnalysisContext& context) override;80 virtual void analyze(AnalysisContext& context) override;
80 int evaluate(const EvaluationContext& context) override;81 int evaluate(const EvaluationContext& context) override;
81 void toBinary(std::ostream&) const override;82 void visit(Visitor&) const override;
82 int formulaSize() const override{83 int formulaSize() const override{
83 size_t sum = _ids.size();84 size_t sum = _ids.size();
84 for(auto& e : _exprs) sum += e->formulaSize();85 for(auto& e : _exprs) sum += e->formulaSize();
@@ -87,6 +88,7 @@
87 bool placeFree() const override;88 bool placeFree() const override;
88 auto constant() const { return _constant; }89 auto constant() const { return _constant; }
89 auto& places() const { return _ids; }90 auto& places() const { return _ids; }
91
90 protected:92 protected:
91 CommutativeExpr(int constant): _constant(constant) {};93 CommutativeExpr(int constant): _constant(constant) {};
92 void init(std::vector<Expr_ptr>&& exprs);94 void init(std::vector<Expr_ptr>&& exprs);
@@ -104,7 +106,6 @@
104106
105 Expr::Types type() const override;107 Expr::Types type() const override;
106 Member constraint(SimplificationContext& context) const override;108 Member constraint(SimplificationContext& context) const override;
107 void toXML(std::ostream&, uint32_t tabs, bool tokencount = false) const override;
108 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context, bool tokencount = false) const override;109 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context, bool tokencount = false) const override;
109 bool tk = false;110 bool tk = false;
110111
@@ -125,11 +126,9 @@
125 }126 }
126 Expr::Types type() const override;127 Expr::Types type() const override;
127 Member constraint(SimplificationContext& context) const override;128 Member constraint(SimplificationContext& context) const override;
128 void toXML(std::ostream&, uint32_t tabs, bool tokencount = false) const override;
129 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context, bool tokencount = false) const override;129 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context, bool tokencount = false) const override;
130130
131131
132 void toBinary(std::ostream&) const override;
133 void visit(Visitor& visitor) const override;132 void visit(Visitor& visitor) const override;
134 protected:133 protected:
135 int apply(int v1, int v2) const override;134 int apply(int v1, int v2) const override;
@@ -144,7 +143,6 @@
144 MultiplyExpr(std::vector<Expr_ptr>&& exprs);143 MultiplyExpr(std::vector<Expr_ptr>&& exprs);
145 Expr::Types type() const override;144 Expr::Types type() const override;
146 Member constraint(SimplificationContext& context) const override;145 Member constraint(SimplificationContext& context) const override;
147 void toXML(std::ostream&, uint32_t tabs, bool tokencount = false) const override;
148 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context, bool tokencount = false) const override;146 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context, bool tokencount = false) const override;
149147
150148
@@ -166,9 +164,7 @@
166 int evaluate(const EvaluationContext& context) override;164 int evaluate(const EvaluationContext& context) override;
167 Expr::Types type() const override;165 Expr::Types type() const override;
168 Member constraint(SimplificationContext& context) const override;166 Member constraint(SimplificationContext& context) const override;
169 void toXML(std::ostream&, uint32_t tabs, bool tokencount = false) const override;
170 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context, bool tokencount = false) const override;167 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context, bool tokencount = false) const override;
171 void toBinary(std::ostream&) const override;
172168
173 void visit(Visitor& visitor) const override;169 void visit(Visitor& visitor) const override;
174 int formulaSize() const override{170 int formulaSize() const override{
@@ -190,9 +186,7 @@
190 void analyze(AnalysisContext& context) override;186 void analyze(AnalysisContext& context) override;
191 int evaluate(const EvaluationContext& context) override;187 int evaluate(const EvaluationContext& context) override;
192 Expr::Types type() const override;188 Expr::Types type() const override;
193 void toXML(std::ostream&, uint32_t tabs, bool tokencount = false) const override;
194 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context, bool tokencount = false) const override;189 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context, bool tokencount = false) const override;
195 void toBinary(std::ostream&) const override;
196190
197 void visit(Visitor& visitor) const override;191 void visit(Visitor& visitor) const override;
198 int formulaSize() const override{192 int formulaSize() const override{
@@ -220,9 +214,6 @@
220 if(_compiled) return _compiled->type();214 if(_compiled) return _compiled->type();
221 return Expr::IdentifierExpr;215 return Expr::IdentifierExpr;
222 }216 }
223 void toXML(std::ostream& os, uint32_t tabs, bool tokencount = false) const override {
224 _compiled->toXML(os, tabs, tokencount);
225 }
226 void toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context, bool tokencount = false) const override;217 void toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context, bool tokencount = false) const override;
227218
228 int formulaSize() const override {219 int formulaSize() const override {
@@ -238,15 +229,12 @@
238 return _compiled->constraint(context);229 return _compiled->constraint(context);
239 }230 }
240231
241 void toBinary(std::ostream& s) const override {
242 _compiled->toBinary(s);
243 }
244 void visit(Visitor& visitor) const override;232 void visit(Visitor& visitor) const override;
245233
246 [[nodiscard]] const std::string &name() const {234 [[nodiscard]] const std::string &name() const {
247 return _name;235 return _name;
248 }236 }
249 237
250 [[nodiscard]] const Expr_ptr &compiled() const {238 [[nodiscard]] const Expr_ptr &compiled() const {
251 return _compiled;239 return _compiled;
252 }240 }
@@ -265,15 +253,13 @@
265253
266 UnfoldedIdentifierExpr(const std::string& name) : UnfoldedIdentifierExpr(name, -1) {254 UnfoldedIdentifierExpr(const std::string& name) : UnfoldedIdentifierExpr(name, -1) {
267 }255 }
268 256
269 UnfoldedIdentifierExpr(const UnfoldedIdentifierExpr&) = default;257 UnfoldedIdentifierExpr(const UnfoldedIdentifierExpr&) = default;
270258
271 void analyze(AnalysisContext& context) override;259 void analyze(AnalysisContext& context) override;
272 int evaluate(const EvaluationContext& context) override;260 int evaluate(const EvaluationContext& context) override;
273 Expr::Types type() const override;261 Expr::Types type() const override;
274 void toXML(std::ostream&, uint32_t tabs, bool tokencount = false) const override;
275 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context, bool tokencount = false) const override;262 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context, bool tokencount = false) const override;
276 void toBinary(std::ostream&) const override;
277 int formulaSize() const override{263 int formulaSize() const override{
278 return 1;264 return 1;
279 }265 }
@@ -305,17 +291,12 @@
305 { return _compiled->distance(context); }291 { return _compiled->distance(context); }
306 void toTAPAALQuery(std::ostream& out,TAPAALConditionExportContext& context) const override292 void toTAPAALQuery(std::ostream& out,TAPAALConditionExportContext& context) const override
307 { _compiled->toTAPAALQuery(out, context); }293 { _compiled->toTAPAALQuery(out, context); }
308 void toBinary(std::ostream& out) const override
309 { return _compiled->toBinary(out); }
310 Retval simplify(SimplificationContext& context) const override294 Retval simplify(SimplificationContext& context) const override
311 { return _compiled->simplify(context); }295 { return _compiled->simplify(context); }
312 Condition_ptr prepareForReachability(bool negated) const override296 Condition_ptr prepareForReachability(bool negated) const override
313 { return _compiled->prepareForReachability(negated); }297 { return _compiled->prepareForReachability(negated); }
314 bool isReachability(uint32_t depth) const override298 bool isReachability(uint32_t depth) const override
315 { return _compiled->isReachability(depth); }299 { return _compiled->isReachability(depth); }
316
317 void toXML(std::ostream& out, uint32_t tabs) const override
318 { _compiled->toXML(out, tabs); }
319 void toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const override{300 void toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const override{
320 }301 }
321302
@@ -383,8 +364,6 @@
383 bool isReachability(uint32_t depth) const override;364 bool isReachability(uint32_t depth) const override;
384 Condition_ptr prepareForReachability(bool negated) const override;365 Condition_ptr prepareForReachability(bool negated) const override;
385 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;366 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
386 void toXML(std::ostream&, uint32_t tabs) const override;
387 void toBinary(std::ostream&) const override;
388 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;367 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
389368
390369
@@ -427,7 +406,7 @@
427 Result evaluate(const EvaluationContext& context) override;406 Result evaluate(const EvaluationContext& context) override;
428 Result evalAndSet(const EvaluationContext& context) override;407 Result evalAndSet(const EvaluationContext& context) override;
429 void toTAPAALQuery(std::ostream&,TAPAALConditionExportContext& context) const override;408 void toTAPAALQuery(std::ostream&,TAPAALConditionExportContext& context) const override;
430 void toBinary(std::ostream& out) const override;409 void visit(Visitor&) const override;
431410
432411
433 virtual const Condition_ptr& operator[] (size_t i) const override { return _cond;}412 virtual const Condition_ptr& operator[] (size_t i) const override { return _cond;}
@@ -452,7 +431,6 @@
452 bool isReachability(uint32_t depth) const override;431 bool isReachability(uint32_t depth) const override;
453 Condition_ptr prepareForReachability(bool negated) const override;432 Condition_ptr prepareForReachability(bool negated) const override;
454 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;433 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
455 void toXML(std::ostream&, uint32_t tabs) const override;
456 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;434 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
457 Quantifier getQuantifier() const override { return Quantifier::E; }435 Quantifier getQuantifier() const override { return Quantifier::E; }
458 Path getPath() const override { return Path::pError; }436 Path getPath() const override { return Path::pError; }
@@ -481,7 +459,6 @@
481 bool isReachability(uint32_t depth) const override;459 bool isReachability(uint32_t depth) const override;
482 Condition_ptr prepareForReachability(bool negated) const override;460 Condition_ptr prepareForReachability(bool negated) const override;
483 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;461 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
484 void toXML(std::ostream&, uint32_t tabs) const override;
485 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;462 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
486 Quantifier getQuantifier() const override { return Quantifier::A; }463 Quantifier getQuantifier() const override { return Quantifier::A; }
487 Path getPath() const override { return Path::pError; }464 Path getPath() const override { return Path::pError; }
@@ -521,7 +498,6 @@
521498
522 Retval simplify(SimplificationContext &context) const override;499 Retval simplify(SimplificationContext &context) const override;
523500
524 void toXML(std::ostream &, uint32_t tabs) const override;
525 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;501 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
526502
527 Quantifier getQuantifier() const override { return Quantifier::EMPTY; }503 Quantifier getQuantifier() const override { return Quantifier::EMPTY; }
@@ -563,7 +539,6 @@
563 assert(false); std::cerr << "TODO implement" << std::endl; exit(0);539 assert(false); std::cerr << "TODO implement" << std::endl; exit(0);
564 }540 }
565 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;541 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
566 void toXML(std::ostream&, uint32_t tabs) const override;
567 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;542 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
568 Quantifier getQuantifier() const override { return Quantifier::EMPTY; }543 Quantifier getQuantifier() const override { return Quantifier::EMPTY; }
569 Path getPath() const override { return Path::F; }544 Path getPath() const override { return Path::F; }
@@ -591,7 +566,6 @@
591 }566 }
592 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;567 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
593 Retval simplify(SimplificationContext& context) const override;568 Retval simplify(SimplificationContext& context) const override;
594 void toXML(std::ostream&, uint32_t tabs) const override;
595 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;569 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
596 Quantifier getQuantifier() const override { return Quantifier::EMPTY; }570 Quantifier getQuantifier() const override { return Quantifier::EMPTY; }
597 Path getPath() const override { return Path::X; }571 Path getPath() const override { return Path::X; }
@@ -613,7 +587,6 @@
613 bool isReachability(uint32_t depth) const override;587 bool isReachability(uint32_t depth) const override;
614 Condition_ptr prepareForReachability(bool negated) const override;588 Condition_ptr prepareForReachability(bool negated) const override;
615 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;589 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
616 void toXML(std::ostream&, uint32_t tabs) const override;
617 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;590 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
618 Quantifier getQuantifier() const override { return Quantifier::E; }591 Quantifier getQuantifier() const override { return Quantifier::E; }
619 Path getPath() const override { return Path::X; }592 Path getPath() const override { return Path::X; }
@@ -634,7 +607,6 @@
634 bool isReachability(uint32_t depth) const override;607 bool isReachability(uint32_t depth) const override;
635 Condition_ptr prepareForReachability(bool negated) const override;608 Condition_ptr prepareForReachability(bool negated) const override;
636 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;609 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
637 void toXML(std::ostream&, uint32_t tabs) const override;
638 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;610 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
639 Quantifier getQuantifier() const override { return Quantifier::E; }611 Quantifier getQuantifier() const override { return Quantifier::E; }
640 Path getPath() const override { return Path::G; }612 Path getPath() const override { return Path::G; }
@@ -656,7 +628,6 @@
656 bool isReachability(uint32_t depth) const override;628 bool isReachability(uint32_t depth) const override;
657 Condition_ptr prepareForReachability(bool negated) const override;629 Condition_ptr prepareForReachability(bool negated) const override;
658 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;630 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
659 void toXML(std::ostream&, uint32_t tabs) const override;
660 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;631 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
661 Quantifier getQuantifier() const override { return Quantifier::E; }632 Quantifier getQuantifier() const override { return Quantifier::E; }
662 Path getPath() const override { return Path::F; }633 Path getPath() const override { return Path::F; }
@@ -676,7 +647,6 @@
676 bool isReachability(uint32_t depth) const override;647 bool isReachability(uint32_t depth) const override;
677 Condition_ptr prepareForReachability(bool negated) const override;648 Condition_ptr prepareForReachability(bool negated) const override;
678 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;649 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
679 void toXML(std::ostream&, uint32_t tabs) const override;
680 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;650 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
681 Quantifier getQuantifier() const override { return Quantifier::A; }651 Quantifier getQuantifier() const override { return Quantifier::A; }
682 Path getPath() const override { return Path::X; }652 Path getPath() const override { return Path::X; }
@@ -696,7 +666,6 @@
696 bool isReachability(uint32_t depth) const override;666 bool isReachability(uint32_t depth) const override;
697 Condition_ptr prepareForReachability(bool negated) const override;667 Condition_ptr prepareForReachability(bool negated) const override;
698 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;668 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
699 void toXML(std::ostream&, uint32_t tabs) const override;
700 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;669 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
701 Quantifier getQuantifier() const override { return Quantifier::A; }670 Quantifier getQuantifier() const override { return Quantifier::A; }
702 Path getPath() const override { return Path::G; }671 Path getPath() const override { return Path::G; }
@@ -716,7 +685,6 @@
716 bool isReachability(uint32_t depth) const override;685 bool isReachability(uint32_t depth) const override;
717 Condition_ptr prepareForReachability(bool negated) const override;686 Condition_ptr prepareForReachability(bool negated) const override;
718 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;687 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
719 void toXML(std::ostream&, uint32_t tabs) const override;
720 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;688 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
721 Quantifier getQuantifier() const override { return Quantifier::A; }689 Quantifier getQuantifier() const override { return Quantifier::A; }
722 Path getPath() const override { return Path::F; }690 Path getPath() const override { return Path::F; }
@@ -744,7 +712,6 @@
744 void analyze(AnalysisContext& context) override;712 void analyze(AnalysisContext& context) override;
745 Result evaluate(const EvaluationContext& context) override;713 Result evaluate(const EvaluationContext& context) override;
746 void toTAPAALQuery(std::ostream&,TAPAALConditionExportContext& context) const override;714 void toTAPAALQuery(std::ostream&,TAPAALConditionExportContext& context) const override;
747 void toBinary(std::ostream& out) const override;
748 bool isReachability(uint32_t depth) const override;715 bool isReachability(uint32_t depth) const override;
749 Condition_ptr prepareForReachability(bool negated) const override;716 Condition_ptr prepareForReachability(bool negated) const override;
750717
@@ -758,12 +725,11 @@
758725
759 [[nodiscard]] const Condition_ptr& getCond1() const { return (*this)[0]; }726 [[nodiscard]] const Condition_ptr& getCond1() const { return (*this)[0]; }
760 [[nodiscard]] const Condition_ptr& getCond2() const { return (*this)[1]; }727 [[nodiscard]] const Condition_ptr& getCond2() const { return (*this)[1]; }
761 728
762 Retval simplify(SimplificationContext& context) const override;729 Retval simplify(SimplificationContext& context) const override;
763 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;730 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
764 void visit(Visitor&) const override;731 void visit(Visitor&) const override;
765 void visit(MutatingVisitor&) override;732 void visit(MutatingVisitor&) override;
766 void toXML(std::ostream&, uint32_t tabs) const override;
767 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;733 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
768 uint32_t distance(DistanceContext& context) const override { return (*this)[1]->distance(context); }734 uint32_t distance(DistanceContext& context) const override { return (*this)[1]->distance(context); }
769 Quantifier getQuantifier() const override { return Quantifier::EMPTY; }735 Quantifier getQuantifier() const override { return Quantifier::EMPTY; }
@@ -785,7 +751,6 @@
785 void visit(MutatingVisitor&) override;751 void visit(MutatingVisitor&) override;
786 uint32_t distance(DistanceContext& context) const override;752 uint32_t distance(DistanceContext& context) const override;
787 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;753 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
788 void toXML(std::ostream&, uint32_t tabs) const override;
789 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;754 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
790755
791 private:756 private:
@@ -800,7 +765,6 @@
800 void visit(Visitor&) const override;765 void visit(Visitor&) const override;
801 void visit(MutatingVisitor&) override;766 void visit(MutatingVisitor&) override;
802 uint32_t distance(DistanceContext& context) const override;767 uint32_t distance(DistanceContext& context) const override;
803 void toXML(std::ostream&, uint32_t tabs) const override;
804 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;768 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
805 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;769 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
806 virtual bool isLoopSensitive() const override { return true; }770 virtual bool isLoopSensitive() const override { return true; }
@@ -819,7 +783,6 @@
819 std::string getName() const {783 std::string getName() const {
820 return _name;784 return _name;
821 }785 }
822 void toXML(std::ostream& out, uint32_t tabs) const override;
823 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;786 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
824 protected:787 protected:
825 void _analyze(AnalysisContext& context) override;788 void _analyze(AnalysisContext& context) override;
@@ -859,7 +822,7 @@
859822
860 void analyze(AnalysisContext& context) override;823 void analyze(AnalysisContext& context) override;
861824
862 void toBinary(std::ostream& out) const override;825 void visit(Visitor&) const override;
863 void toTAPAALQuery(std::ostream&,TAPAALConditionExportContext& context) const override;826 void toTAPAALQuery(std::ostream&,TAPAALConditionExportContext& context) const override;
864 bool isReachability(uint32_t depth) const override;827 bool isReachability(uint32_t depth) const override;
865 Condition_ptr prepareForReachability(bool negated) const override;828 Condition_ptr prepareForReachability(bool negated) const override;
@@ -916,7 +879,6 @@
916 Result evalAndSet(const EvaluationContext& context) override;879 Result evalAndSet(const EvaluationContext& context) override;
917 void visit(Visitor&) const override;880 void visit(Visitor&) const override;
918 void visit(MutatingVisitor&) override;881 void visit(MutatingVisitor&) override;
919 void toXML(std::ostream&, uint32_t tabs) const override;
920 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;882 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
921 Quantifier getQuantifier() const override { return Quantifier::AND; }883 Quantifier getQuantifier() const override { return Quantifier::AND; }
922 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;884 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
@@ -941,7 +903,6 @@
941 Result evalAndSet(const EvaluationContext& context) override;903 Result evalAndSet(const EvaluationContext& context) override;
942 void visit(Visitor&) const override;904 void visit(Visitor&) const override;
943 void visit(MutatingVisitor&) override;905 void visit(MutatingVisitor&) override;
944 void toXML(std::ostream&, uint32_t tabs) const override;
945 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;906 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
946907
947 Quantifier getQuantifier() const override { return Quantifier::OR; }908 Quantifier getQuantifier() const override { return Quantifier::OR; }
@@ -1024,12 +985,10 @@
1024 void analyze(AnalysisContext& context) override;985 void analyze(AnalysisContext& context) override;
1025 uint32_t distance(DistanceContext& context) const override;986 uint32_t distance(DistanceContext& context) const override;
1026 void toTAPAALQuery(std::ostream& stream,TAPAALConditionExportContext& context) const override;987 void toTAPAALQuery(std::ostream& stream,TAPAALConditionExportContext& context) const override;
1027 void toBinary(std::ostream& out) const override;
1028 bool isReachability(uint32_t depth) const override { return depth > 0; };988 bool isReachability(uint32_t depth) const override { return depth > 0; };
1029 Condition_ptr prepareForReachability(bool negated) const override;989 Condition_ptr prepareForReachability(bool negated) const override;
1030 CTLType getQueryType() const override { return CTLType::LOPERATOR; }990 CTLType getQueryType() const override { return CTLType::LOPERATOR; }
1031 Path getPath() const override { return Path::pError; }991 Path getPath() const override { return Path::pError; }
1032 virtual void toXML(std::ostream& stream, uint32_t tabs) const override;
1033 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;992 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
1034 Retval simplify(SimplificationContext& context) const override;993 Retval simplify(SimplificationContext& context) const override;
1035 Result evaluate(const EvaluationContext& context) override;994 Result evaluate(const EvaluationContext& context) override;
@@ -1071,7 +1030,7 @@
1071 Result evaluate(const EvaluationContext& context) override;1030 Result evaluate(const EvaluationContext& context) override;
1072 Result evalAndSet(const EvaluationContext& context) override;1031 Result evalAndSet(const EvaluationContext& context) override;
1073 void toTAPAALQuery(std::ostream&,TAPAALConditionExportContext& context) const override;1032 void toTAPAALQuery(std::ostream&,TAPAALConditionExportContext& context) const override;
1074 void toBinary(std::ostream& out) const override;1033 void visit(Visitor&) const override;
1075 bool isReachability(uint32_t depth) const override;1034 bool isReachability(uint32_t depth) const override;
1076 Condition_ptr prepareForReachability(bool negated) const override;1035 Condition_ptr prepareForReachability(bool negated) const override;
1077 Quantifier getQuantifier() const override { return Quantifier::EMPTY; }1036 Quantifier getQuantifier() const override { return Quantifier::EMPTY; }
@@ -1090,6 +1049,8 @@
10901049
1091 [[nodiscard]] const Expr_ptr &getExpr2() const { return _expr2; }1050 [[nodiscard]] const Expr_ptr &getExpr2() const { return _expr2; }
10921051
1052 virtual std::string op() const = 0;
1053
1093 protected:1054 protected:
1094 uint32_t _distance(DistanceContext& c,1055 uint32_t _distance(DistanceContext& c,
1095 std::function<uint32_t(uint32_t, uint32_t, bool)> d) const1056 std::function<uint32_t(uint32_t, uint32_t, bool)> d) const
@@ -1098,7 +1059,6 @@
1098 }1059 }
1099 private:1060 private:
1100 virtual bool apply(int v1, int v2) const = 0;1061 virtual bool apply(int v1, int v2) const = 0;
1101 virtual std::string op() const = 0;
1102 /** Operator when exported to TAPAAL */1062 /** Operator when exported to TAPAAL */
1103 virtual std::string opTAPAAL() const = 0;1063 virtual std::string opTAPAAL() const = 0;
1104 /** Swapped operator when exported to TAPAAL, e.g. operator when operands are swapped */1064 /** Swapped operator when exported to TAPAAL, e.g. operator when operands are swapped */
@@ -1119,7 +1079,6 @@
11191079
1120 using CompareCondition::CompareCondition;1080 using CompareCondition::CompareCondition;
1121 Retval simplify(SimplificationContext& context) const override;1081 Retval simplify(SimplificationContext& context) const override;
1122 void toXML(std::ostream&, uint32_t tabs) const override;
1123 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;1082 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
11241083
1125 uint32_t distance(DistanceContext& context) const override;1084 uint32_t distance(DistanceContext& context) const override;
@@ -1140,7 +1099,6 @@
1140 using CompareCondition::CompareCondition;1099 using CompareCondition::CompareCondition;
1141 void toTAPAALQuery(std::ostream&,TAPAALConditionExportContext& context) const override;1100 void toTAPAALQuery(std::ostream&,TAPAALConditionExportContext& context) const override;
1142 Retval simplify(SimplificationContext& context) const override;1101 Retval simplify(SimplificationContext& context) const override;
1143 void toXML(std::ostream&, uint32_t tabs) const override;
1144 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;1102 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
11451103
11461104
@@ -1161,7 +1119,6 @@
11611119
1162 using CompareCondition::CompareCondition;1120 using CompareCondition::CompareCondition;
1163 Retval simplify(SimplificationContext& context) const override;1121 Retval simplify(SimplificationContext& context) const override;
1164 void toXML(std::ostream&, uint32_t tabs) const override;
1165 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;1122 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
11661123
1167 uint32_t distance(DistanceContext& context) const override;1124 uint32_t distance(DistanceContext& context) const override;
@@ -1181,7 +1138,6 @@
11811138
1182 using CompareCondition::CompareCondition;1139 using CompareCondition::CompareCondition;
1183 Retval simplify(SimplificationContext& context) const override;1140 Retval simplify(SimplificationContext& context) const override;
1184 void toXML(std::ostream&, uint32_t tabs) const override;
1185 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;1141 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
11861142
1187 uint32_t distance(DistanceContext& context) const override;1143 uint32_t distance(DistanceContext& context) const override;
@@ -1223,8 +1179,6 @@
1223 bool isReachability(uint32_t depth) const override;1179 bool isReachability(uint32_t depth) const override;
1224 Condition_ptr prepareForReachability(bool negated) const override;1180 Condition_ptr prepareForReachability(bool negated) const override;
1225 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;1181 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
1226 void toXML(std::ostream&, uint32_t tabs) const override;
1227 void toBinary(std::ostream&) const override;
1228 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;1182 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
12291183
1230 Quantifier getQuantifier() const override { return Quantifier::EMPTY; }1184 Quantifier getQuantifier() const override { return Quantifier::EMPTY; }
@@ -1256,8 +1210,6 @@
1256 bool isReachability(uint32_t depth) const override;1210 bool isReachability(uint32_t depth) const override;
1257 Condition_ptr prepareForReachability(bool negated) const override;1211 Condition_ptr prepareForReachability(bool negated) const override;
1258 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;1212 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
1259 void toXML(std::ostream&, uint32_t tabs) const override;
1260 void toBinary(std::ostream&) const override;
1261 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;1213 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
12621214
1263 static Condition_ptr DEADLOCK;1215 static Condition_ptr DEADLOCK;
@@ -1385,12 +1337,10 @@
1385 void visit(MutatingVisitor&) override;1337 void visit(MutatingVisitor&) override;
1386 uint32_t distance(DistanceContext& context) const override;1338 uint32_t distance(DistanceContext& context) const override;
1387 void toTAPAALQuery(std::ostream&,TAPAALConditionExportContext& context) const override;1339 void toTAPAALQuery(std::ostream&,TAPAALConditionExportContext& context) const override;
1388 void toBinary(std::ostream&) const override;
1389 Retval simplify(SimplificationContext& context) const override;1340 Retval simplify(SimplificationContext& context) const override;
1390 bool isReachability(uint32_t depth) const override;1341 bool isReachability(uint32_t depth) const override;
1391 Condition_ptr prepareForReachability(bool negated) const override;1342 Condition_ptr prepareForReachability(bool negated) const override;
1392 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;1343 Condition_ptr pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated, bool initrw) override;
1393 void toXML(std::ostream&, uint32_t tabs) const override;
1394 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;1344 void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const override;
13951345
1396 Quantifier getQuantifier() const override { return Quantifier::UPPERBOUNDS; }1346 Quantifier getQuantifier() const override { return Quantifier::UPPERBOUNDS; }
@@ -1410,6 +1360,9 @@
14101360
1411 const std::vector<place_t>& places() const { return _places; }1361 const std::vector<place_t>& places() const { return _places; }
14121362
1363 double getMax() const { return _max; }
1364 double getOffset() const { return _offset; }
1365
1413 private:1366 private:
1414 std::vector<place_t> _places;1367 std::vector<place_t> _places;
1415 size_t _bound = 0;1368 size_t _bound = 0;
14161369
=== modified file 'include/PetriEngine/PQL/PQL.h'
--- include/PetriEngine/PQL/PQL.h 2021-06-01 08:40:18 +0000
+++ include/PetriEngine/PQL/PQL.h 2021-10-18 11:40:53 +0000
@@ -118,8 +118,6 @@
118 /** Construct left/right side of equations used in query simplification */118 /** Construct left/right side of equations used in query simplification */
119 virtual Simplification::Member constraint(SimplificationContext& context) const = 0;119 virtual Simplification::Member constraint(SimplificationContext& context) const = 0;
120 /** Output the expression as it currently is to a file in XML */120 /** Output the expression as it currently is to a file in XML */
121 virtual void toXML(std::ostream&, uint32_t tabs, bool tokencount = false) const = 0;
122 virtual void toBinary(std::ostream&) const = 0;
123 virtual void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context, bool tokencount = false) const = 0;121 virtual void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context, bool tokencount = false) const = 0;
124122
125 /** Count size of the entire formula in number of nodes */123 /** Count size of the entire formula in number of nodes */
@@ -231,9 +229,7 @@
231 [[nodiscard]] virtual std::shared_ptr<Condition> pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated = false, bool initrw = true) = 0;229 [[nodiscard]] virtual std::shared_ptr<Condition> pushNegation(negstat_t&, const EvaluationContext& context, bool nested, bool negated = false, bool initrw = true) = 0;
232 230
233 /** Output the condition as it currently is to a file in XML */231 /** Output the condition as it currently is to a file in XML */
234 virtual void toXML(std::ostream&, uint32_t tabs) const = 0;
235 virtual void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const = 0;232 virtual void toCompactXML(std::ostream&, uint32_t tabs, AnalysisContext& context) const = 0;
236 virtual void toBinary(std::ostream& out) const = 0;
237233
238 /** Checks if the condition is trivially true */234 /** Checks if the condition is trivially true */
239 [[nodiscard]] bool isTriviallyTrue();235 [[nodiscard]] bool isTriviallyTrue();
240236
=== modified file 'include/PetriEngine/PQL/Visitor.h'
--- include/PetriEngine/PQL/Visitor.h 2021-04-29 07:47:52 +0000
+++ include/PetriEngine/PQL/Visitor.h 2021-10-18 11:40:53 +0000
@@ -30,101 +30,119 @@
3030
31 protected:31 protected:
32 virtual void _accept(const NotCondition* element) = 0;32 virtual void _accept(const NotCondition* element) = 0;
33 virtual void _accept(const AndCondition* element) = 0;33
34 virtual void _accept(const OrCondition* element) = 0;34 virtual void _accept(const AndCondition* element) {
35 virtual void _accept(const LessThanCondition* element) = 0;35 element->LogicalCondition::visit(*this);
36 virtual void _accept(const LessThanOrEqualCondition* element) = 0;36 }
37 virtual void _accept(const EqualCondition* element) = 0;37
38 virtual void _accept(const NotEqualCondition* element) = 0;38 virtual void _accept(const OrCondition* element) {
39 element->LogicalCondition::visit(*this);
40 }
41
42 virtual void _accept(const LessThanCondition* element) {
43 element->CompareCondition::visit(*this);
44 }
45
46 virtual void _accept(const LessThanOrEqualCondition* element) {
47 element->CompareCondition::visit(*this);
48 }
49
50 virtual void _accept(const EqualCondition* element) {
51 element->CompareCondition::visit(*this);
52 }
53
54 virtual void _accept(const NotEqualCondition* element) {
55 element->CompareCondition::visit(*this);
56 }
3957
40 virtual void _accept(const DeadlockCondition* element) = 0;58 virtual void _accept(const DeadlockCondition* element) = 0;
41 virtual void _accept(const CompareConjunction* element) = 0;59 virtual void _accept(const CompareConjunction* element) = 0;
42 virtual void _accept(const UnfoldedUpperBoundsCondition* element) = 0;60 virtual void _accept(const UnfoldedUpperBoundsCondition* element) = 0;
4361
62 // Super classes, the default implementation of subclasses is to call these
63 virtual void _accept(const CommutativeExpr *element) {
64 assert(false);
65 std::cerr << "No accept for CommutativeExpr (may be called from subclass)" << std::endl;
66 exit(0);
67 }
68
69 virtual void _accept(const SimpleQuantifierCondition *element) {
70 assert(false);
71 std::cerr << "No accept for SimpleQuantifierCondition (may be called from subclass)" << std::endl;
72 exit(0);
73 }
74
75 virtual void _accept(const LogicalCondition *element) {
76 assert(false);
77 std::cerr << "No accept for LogicalCondition (may be called from subclass)" << std::endl;
78 exit(0);
79 }
80
81 virtual void _accept(const CompareCondition *element) {
82 assert(false);
83 std::cerr << "No accept for CompareCondition (may be called from subclass)" << std::endl;
84 exit(0);
85 }
86
87 virtual void _accept(const UntilCondition *element) {
88 assert(false);
89 std::cerr << "No accept for UntilCondition (may be called from subclass)" << std::endl;
90 exit(0);
91 }
92
93
44 // Quantifiers, most uses of the visitor will not use the quantifiers - so we give a default implementation.94 // Quantifiers, most uses of the visitor will not use the quantifiers - so we give a default implementation.
45 // default behaviour is error95 // default behaviour is error
46 virtual void _accept(const EFCondition *) {96 virtual void _accept(const EFCondition *condition) {
47 assert(false);97 condition->SimpleQuantifierCondition::visit(*this);
48 std::cerr << "No accept for EFCondition" << std::endl;98 };
49 exit(0);99
50 };100 virtual void _accept(const EGCondition *condition) {
51101 condition->SimpleQuantifierCondition::visit(*this);
52 virtual void _accept(const EGCondition *) {102 };
53 assert(false);103
54 std::cerr << "No accept for EGCondition" << std::endl;104 virtual void _accept(const AGCondition *condition) {
55 exit(0);105 condition->SimpleQuantifierCondition::visit(*this);
56 };106 };
57107
58 virtual void _accept(const AGCondition *) {108 virtual void _accept(const AFCondition *condition) {
59 assert(false);109 condition->SimpleQuantifierCondition::visit(*this);
60 std::cerr << "No accept for AGCondition" << std::endl;110 };
61 exit(0);111
62 };112 virtual void _accept(const EXCondition *condition) {
63113 condition->SimpleQuantifierCondition::visit(*this);
64 virtual void _accept(const AFCondition *) {114 };
65 assert(false);115
66 std::cerr << "No accept for AFCondition" << std::endl;116 virtual void _accept(const AXCondition *condition) {
67 exit(0);117 condition->SimpleQuantifierCondition::visit(*this);
68 };118 };
69119
70 virtual void _accept(const EXCondition *) {120 virtual void _accept(const EUCondition *condition) {
71 assert(false);121 condition->UntilCondition::visit(*this);
72 std::cerr << "No accept for EXCondition" << std::endl;122 };
73 exit(0);123
74 };124 virtual void _accept(const AUCondition *condition) {
75125 condition->UntilCondition::visit(*this);
76 virtual void _accept(const AXCondition *) {126 };
77 assert(false);127
78 std::cerr << "No accept for AXCondition" << std::endl;128 virtual void _accept(const ACondition *condition) {
79 exit(0);129 condition->SimpleQuantifierCondition::visit(*this);
80 };130 };
81131
82 virtual void _accept(const EUCondition *) {132 virtual void _accept(const ECondition *condition) {
83 assert(false);133 condition->SimpleQuantifierCondition::visit(*this);
84 std::cerr << "No accept for EUCondition" << std::endl;134 };
85 exit(0);135
86 };136 virtual void _accept(const GCondition *condition) {
87137 condition->SimpleQuantifierCondition::visit(*this);
88 virtual void _accept(const AUCondition *) {138 };
89 assert(false);139
90 std::cerr << "No accept for AUCondition" << std::endl;140 virtual void _accept(const FCondition *condition) {
91 exit(0);141 condition->SimpleQuantifierCondition::visit(*this);
92 };142 };
93143
94 virtual void _accept(const ACondition *) {144 virtual void _accept(const XCondition *condition) {
95 assert(false);145 condition->SimpleQuantifierCondition::visit(*this);
96 std::cerr << "No accept for ACondition" << std::endl;
97 exit(0);
98 };
99
100 virtual void _accept(const ECondition *) {
101 assert(false);
102 std::cerr << "No accept for ECondition" << std::endl;
103 exit(0);
104 };
105
106 virtual void _accept(const GCondition *) {
107 assert(false);
108 std::cerr << "No accept for GCondition" << std::endl;
109 exit(0);
110 };
111
112 virtual void _accept(const FCondition *) {
113 assert(false);
114 std::cerr << "No accept for FCondition" << std::endl;
115 exit(0);
116 };
117
118 virtual void _accept(const XCondition *) {
119 assert(false);
120 std::cerr << "No accept for XCondition" << std::endl;
121 exit(0);
122 };
123
124 virtual void _accept(const UntilCondition *) {
125 assert(false);
126 std::cerr << "No accept for UntilCondition" << std::endl;
127 exit(0);
128 };146 };
129147
130 // shallow elements, neither of these should exist in a compiled expression148 // shallow elements, neither of these should exist in a compiled expression
@@ -176,14 +194,24 @@
176 exit(0);194 exit(0);
177 };195 };
178196
197 virtual void _accept(const ShallowCondition *element) {
198 assert(false);
199 std::cerr << "No accept for BooleanCondition" << std::endl;
200 exit(0);
201 }
202
179 // Expression203 // Expression
180 virtual void _accept(const UnfoldedIdentifierExpr *element) = 0;204 virtual void _accept(const UnfoldedIdentifierExpr *element) = 0;
181205
182 virtual void _accept(const LiteralExpr *element) = 0;206 virtual void _accept(const LiteralExpr *element) = 0;
183207
184 virtual void _accept(const PlusExpr *element) = 0;208 virtual void _accept(const PlusExpr *element) {
209 element->CommutativeExpr::visit(*this);
210 };
185211
186 virtual void _accept(const MultiplyExpr *element) = 0;212 virtual void _accept(const MultiplyExpr *element) {
213 element->CommutativeExpr::visit(*this);
214 };
187215
188 virtual void _accept(const MinusExpr *element) = 0;216 virtual void _accept(const MinusExpr *element) = 0;
189217
190218
=== added file 'include/PetriEngine/PQL/XMLPrinter.h'
--- include/PetriEngine/PQL/XMLPrinter.h 1970-01-01 00:00:00 +0000
+++ include/PetriEngine/PQL/XMLPrinter.h 2021-10-18 11:40:53 +0000
@@ -0,0 +1,119 @@
1/* Copyright (C) 2011 Jonas Finnemann Jensen <jopsen@gmail.com>,
2 * Thomas Søndersø Nielsen <primogens@gmail.com>,
3 * Lars Kærlund Østergaard <larsko@gmail.com>,
4 * Peter Gjøl Jensen <root@petergjoel.dk>,
5 * Rasmus Tollund <rtollu18@student.aau.dk>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20#ifndef VERIFYPN_XMLPRINTER_H
21#define VERIFYPN_XMLPRINTER_H
22
23#include <iostream>
24#include "Visitor.h"
25
26namespace PetriEngine {
27 namespace PQL {
28 class XMLPrinter : public Visitor {
29 public:
30 XMLPrinter(std::ostream& os, uint32_t init_tabs = 0, uint32_t tab_size = 2, bool print_newlines = true, bool token_count = false) :
31 os(os), tabs(init_tabs), tab_size(tab_size), single_tab(std::string(tab_size, ' ')), print_newlines(print_newlines), token_count(token_count) {}
32
33 protected:
34 std::ostream& os;
35 const bool token_count;
36 uint32_t tabs;
37 const uint32_t tab_size;
38 const std::string single_tab;
39 const bool print_newlines;
40
41 std::ostream & generateTabs();
42
43 void openXmlTag(const std::string& tag);
44 void closeXmlTag(const std::string &tag);
45 void outputLine(const std::string &line);
46
47 void _accept(const NotCondition *element) override;
48
49 void _accept(const AndCondition *element) override;
50
51 void _accept(const OrCondition *element) override;
52
53 void _accept(const LessThanCondition *element) override;
54
55 void _accept(const LessThanOrEqualCondition *element) override;
56
57 void _accept(const EqualCondition *element) override;
58
59 void _accept(const NotEqualCondition *element) override;
60
61 void _accept(const DeadlockCondition *element) override;
62
63 void _accept(const CompareConjunction *element) override;
64
65 void _accept(const UnfoldedUpperBoundsCondition *element) override;
66
67 void _accept(const EFCondition *condition) override;
68
69 void _accept(const EGCondition *condition) override;
70
71 void _accept(const AGCondition *condition) override;
72
73 void _accept(const AFCondition *condition) override;
74
75 void _accept(const EXCondition *condition) override;
76
77 void _accept(const AXCondition *condition) override;
78
79 void _accept(const EUCondition *condition) override;
80
81 void _accept(const AUCondition *condition) override;
82
83 void _accept(const ACondition *condition) override;
84
85 void _accept(const ECondition *condition) override;
86
87 void _accept(const GCondition *condition) override;
88
89 void _accept(const FCondition *condition) override;
90
91 void _accept(const XCondition *condition) override;
92
93 void _accept(const UntilCondition *condition) override;
94
95 void _accept(const UnfoldedFireableCondition *element) override;
96
97 void _accept(const BooleanCondition *element) override;
98
99 void _accept(const ShallowCondition *element) override;
100
101 void _accept(const UnfoldedIdentifierExpr *element) override;
102
103 void _accept(const LiteralExpr *element) override;
104
105 void _accept(const PlusExpr *element) override;
106
107 void _accept(const MultiplyExpr *element) override;
108
109 void _accept(const MinusExpr *element) override;
110
111 void _accept(const SubtractExpr *element) override;
112
113 void _accept(const IdentifierExpr *element) override;
114
115 };
116 }
117}
118
119#endif //VERIFYPN_XMLPRINTER_H
0120
=== added file 'src/PetriEngine/PQL/BinaryPrinter.cpp'
--- src/PetriEngine/PQL/BinaryPrinter.cpp 1970-01-01 00:00:00 +0000
+++ src/PetriEngine/PQL/BinaryPrinter.cpp 2021-10-18 11:40:53 +0000
@@ -0,0 +1,173 @@
1/* Copyright (C) 2011 Jonas Finnemann Jensen <jopsen@gmail.com>,
2 * Thomas Søndersø Nielsen <primogens@gmail.com>,
3 * Lars Kærlund Østergaard <larsko@gmail.com>,
4 * Peter Gjøl Jensen <root@petergjoel.dk>,
5 * Rasmus Tollund <rtollu18@student.aau.dk>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHos ANY WARRANTY; withos even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20#include "PetriEngine/PQL/BinaryPrinter.h"
21
22namespace PetriEngine::PQL {
23 void BinaryPrinter::_accept(const LiteralExpr *element){
24 os.write("l", sizeof(char));
25 int temp = element->value();
26 os.write(reinterpret_cast<const char*>(&temp), sizeof(int));
27 }
28
29 void BinaryPrinter::_accept(const UnfoldedIdentifierExpr *element){
30 os.write("i", sizeof(char));
31 int temp = element->offset();
32 os.write(reinterpret_cast<const char*>(&temp), sizeof(int));
33 }
34
35 void BinaryPrinter::_accept(const MinusExpr *element){
36 auto e1 = std::make_shared<PQL::LiteralExpr>(0);
37 std::vector<Expr_ptr> exprs;
38 exprs.push_back(e1);
39 exprs.push_back((*element)[0]);
40 PQL::SubtractExpr(std::move(exprs)).visit(*this);
41 }
42
43 void BinaryPrinter::_accept(const SubtractExpr *element){
44 os.write("-", sizeof(char));
45 uint32_t size = element->expressions().size();
46 os.write(reinterpret_cast<const char*>(&size), sizeof(uint32_t));
47 for(auto& e : element->expressions())
48 e->visit(*this);
49 }
50
51 void BinaryPrinter::_accept(const CommutativeExpr *element){
52 auto sop = element->op();
53 os.write(&sop[0], sizeof(char));
54 int32_t temp_constant = element->constant();
55 os.write(reinterpret_cast<const char*>(&temp_constant), sizeof(int32_t));
56 uint32_t size = element->places().size();
57 os.write(reinterpret_cast<const char*>(&size), sizeof(uint32_t));
58 size = element->expressions().size();
59 os.write(reinterpret_cast<const char*>(&size), sizeof(uint32_t));
60 for(auto& id : element->places())
61 os.write(reinterpret_cast<const char*>(&id.first), sizeof(uint32_t));
62 for(auto& e : element->expressions())
63 e->visit(*this);
64 }
65
66 void BinaryPrinter::_accept(const SimpleQuantifierCondition *condition){
67 auto path = condition->getPath();
68 auto quant = condition->getQuantifier();
69 os.write(reinterpret_cast<const char*>(&path), sizeof(Path));
70 os.write(reinterpret_cast<const char*>(&quant), sizeof(Quantifier));
71 condition->getCond()->visit(*this);
72 }
73
74 void BinaryPrinter::_accept(const UntilCondition *condition){
75 auto path = condition->getPath();
76 auto quant = condition->getQuantifier();
77 os.write(reinterpret_cast<const char*>(&path), sizeof(Path));
78 os.write(reinterpret_cast<const char*>(&quant), sizeof(Quantifier));
79 (*condition)[0]->visit(*this);
80 (*condition)[1]->visit(*this);
81 }
82
83 void BinaryPrinter::_accept(const LogicalCondition *condition){
84 auto path = condition->getPath();
85 auto quant = condition->getQuantifier();
86 os.write(reinterpret_cast<const char*>(&path), sizeof(Path));
87 os.write(reinterpret_cast<const char*>(&quant), sizeof(Quantifier));
88 uint32_t size = condition->operands();
89 os.write(reinterpret_cast<const char*>(&size), sizeof(uint32_t));
90 for(auto& c : *condition)
91 c->visit(*this);
92 }
93
94 void BinaryPrinter::_accept(const CompareConjunction *element){
95 auto path = element->getPath();
96 auto quant = Quantifier::COMPCONJ;
97 os.write(reinterpret_cast<const char*>(&path), sizeof(Path));
98 os.write(reinterpret_cast<const char*>(&quant), sizeof(Quantifier));
99 bool temp = element->isNegated();
100 os.write(reinterpret_cast<const char*>(&temp), sizeof(bool));
101 uint32_t size = element->constraints().size();
102 os.write(reinterpret_cast<const char*>(&size), sizeof(uint32_t));
103 for(auto& c : element->constraints())
104 {
105 os.write(reinterpret_cast<const char*>(&c._place), sizeof(int32_t));
106 os.write(reinterpret_cast<const char*>(&c._lower), sizeof(uint32_t));
107 os.write(reinterpret_cast<const char*>(&c._upper), sizeof(uint32_t));
108 }
109 }
110
111 void BinaryPrinter::_accept(const CompareCondition *condition){
112 auto path = condition->getPath();
113 auto quant = condition->getQuantifier();
114 os.write(reinterpret_cast<const char*>(&path), sizeof(Path));
115 os.write(reinterpret_cast<const char*>(&quant), sizeof(Quantifier));
116 std::string sop = condition->op();
117 os.write(sop.data(), sop.size());
118 os.write("\0", sizeof(char));
119 (*condition)[0]->visit(*this);
120 (*condition)[1]->visit(*this);
121 }
122
123 void BinaryPrinter::_accept(const DeadlockCondition *condition){
124 auto path = condition->getPath();
125 auto quant = Quantifier::DEADLOCK;
126 os.write(reinterpret_cast<const char*>(&path), sizeof(Path));
127 os.write(reinterpret_cast<const char*>(&quant), sizeof(Quantifier));
128 }
129
130 void BinaryPrinter::_accept(const BooleanCondition *condition){
131 auto path = condition->getPath();
132 auto quant = Quantifier::PN_BOOLEAN;
133 os.write(reinterpret_cast<const char*>(&path), sizeof(Path));
134 os.write(reinterpret_cast<const char*>(&quant), sizeof(Quantifier));
135 os.write(reinterpret_cast<const char*>(&condition->value), sizeof(bool));
136 }
137
138 void BinaryPrinter::_accept(const UnfoldedUpperBoundsCondition *condition){
139 auto path = condition->getPath();
140 auto quant = Quantifier::UPPERBOUNDS;
141 os.write(reinterpret_cast<const char*>(&path), sizeof(Path));
142 os.write(reinterpret_cast<const char*>(&quant), sizeof(Quantifier));
143 uint32_t size = condition->places().size();
144 os.write(reinterpret_cast<const char*>(&size), sizeof(uint32_t));
145 double temp_max = condition->getMax();
146 os.write(reinterpret_cast<const char*>(&temp_max), sizeof(double));
147 double temp_offset = condition->getOffset();
148 os.write(reinterpret_cast<const char*>(&temp_offset), sizeof(double));
149 for(auto& b : condition->places())
150 {
151 os.write(reinterpret_cast<const char*>(&b._place), sizeof(uint32_t));
152 os.write(reinterpret_cast<const char*>(&b._max), sizeof(double));
153 }
154 }
155
156 void BinaryPrinter::_accept(const NotCondition *condition){
157 auto path = condition->getPath();
158 auto quant = condition->getQuantifier();
159 os.write(reinterpret_cast<const char*>(&path), sizeof(Path));
160 os.write(reinterpret_cast<const char*>(&quant), sizeof(Quantifier));
161 condition->getCond()->visit(*this);
162 }
163
164 void BinaryPrinter::_accept(const IdentifierExpr *condition) {
165 condition->compiled()->visit(*this);
166 }
167
168 void BinaryPrinter::_accept(const ShallowCondition *condition) {
169 condition->getCompiled()->visit(*this);
170 }
171
172
173}
0174
=== modified file 'src/PetriEngine/PQL/CMakeLists.txt'
--- src/PetriEngine/PQL/CMakeLists.txt 2021-08-11 09:06:51 +0000
+++ src/PetriEngine/PQL/CMakeLists.txt 2021-10-18 11:40:53 +0000
@@ -8,7 +8,7 @@
88
9add_flex_bison_dependency(pql_lexer pql_parser)9add_flex_bison_dependency(pql_lexer pql_parser)
1010
11add_library(PQL ${BISON_pql_parser_OUTPUTS} ${FLEX_pql_lexer_OUTPUTS} Expressions.cpp PQL.cpp Contexts.cpp QueryPrinter.cpp CTLVisitor.cpp)11add_library(PQL ${BISON_pql_parser_OUTPUTS} ${FLEX_pql_lexer_OUTPUTS} Expressions.cpp PQL.cpp Contexts.cpp QueryPrinter.cpp CTLVisitor.cpp XMLPrinter.cpp BinaryPrinter.cpp)
12add_dependencies(PQL glpk-ext)12add_dependencies(PQL glpk-ext)
13target_link_libraries(PQL Simplification Reachability glpk PetriEngine)13target_link_libraries(PQL Simplification Reachability glpk PetriEngine)
1414
1515
=== modified file 'src/PetriEngine/PQL/Expressions.cpp'
--- src/PetriEngine/PQL/Expressions.cpp 2021-10-03 14:50:33 +0000
+++ src/PetriEngine/PQL/Expressions.cpp 2021-10-18 11:40:53 +0000
@@ -976,6 +976,10 @@
976976
977 /******************** Range Contexts ********************/977 /******************** Range Contexts ********************/
978978
979 void SimpleQuantifierCondition::visit(Visitor& ctx) const {
980 ctx.accept<decltype(this)>(this);
981 }
982
979 void UntilCondition::visit(Visitor &ctx) const983 void UntilCondition::visit(Visitor &ctx) const
980 {984 {
981 ctx.accept<decltype(this)>(this);985 ctx.accept<decltype(this)>(this);
@@ -1046,6 +1050,10 @@
1046 ctx.accept<decltype(this)>(this);1050 ctx.accept<decltype(this)>(this);
1047 }1051 }
10481052
1053 void LogicalCondition::visit(Visitor& ctx) const {
1054 ctx.accept<decltype(this)>(this);
1055 }
1056
1049 void AndCondition::visit(Visitor& ctx) const1057 void AndCondition::visit(Visitor& ctx) const
1050 {1058 {
1051 ctx.accept<decltype(this)>(this);1059 ctx.accept<decltype(this)>(this);
@@ -1060,7 +1068,15 @@
1060 {1068 {
1061 ctx.accept<decltype(this)>(this);1069 ctx.accept<decltype(this)>(this);
1062 }1070 }
10631071<<<<<<< TREE
1072
1073=======
1074
1075 void CompareCondition::visit(Visitor& ctx) const {
1076 ctx.accept<decltype(this)>(this);
1077 }
1078
1079>>>>>>> MERGE-SOURCE
1064 void EqualCondition::visit(Visitor& ctx) const1080 void EqualCondition::visit(Visitor& ctx) const
1065 {1081 {
1066 ctx.accept<decltype(this)>(this);1082 ctx.accept<decltype(this)>(this);
@@ -1176,6 +1192,10 @@
1176 ctx.accept<decltype(this)>(this);1192 ctx.accept<decltype(this)>(this);
1177 }1193 }
11781194
1195 void CommutativeExpr::visit(Visitor& ctx) const {
1196 ctx.accept<decltype(this)>(this);
1197 }
1198
1179 void MinusExpr::visit(Visitor& ctx) const1199 void MinusExpr::visit(Visitor& ctx) const
1180 {1200 {
1181 ctx.accept<decltype(this)>(this);1201 ctx.accept<decltype(this)>(this);
@@ -1757,6 +1777,7 @@
1757 }1777 }
17581778
1759 /******************** BIN output ********************/1779 /******************** BIN output ********************/
1780<<<<<<< TREE
17601781
1761 void LiteralExpr::toBinary(std::ostream& out) const {1782 void LiteralExpr::toBinary(std::ostream& out) const {
1762 out.write("l", sizeof(char));1783 out.write("l", sizeof(char));
@@ -1908,15 +1929,16 @@
1908 void LiteralExpr::toXML(std::ostream& out,uint32_t tabs, bool tokencount) const {1929 void LiteralExpr::toXML(std::ostream& out,uint32_t tabs, bool tokencount) const {
1909 generateTabs(out,tabs) << "<integer-constant>" + std::to_string(_value) + "</integer-constant>\n";1930 generateTabs(out,tabs) << "<integer-constant>" + std::to_string(_value) + "</integer-constant>\n";
1910 }1931 }
1932=======
1933
1934
1935 /******************** CTL Output ********************/
1936>>>>>>> MERGE-SOURCE
19111937
1912 void LiteralExpr::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context, bool tokencount) const{1938 void LiteralExpr::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context, bool tokencount) const{
1913 out << "<integer-constant>" + std::to_string(_value) + "</integer-constant>\n";1939 out << "<integer-constant>" + std::to_string(_value) + "</integer-constant>\n";
1914 }1940 }
19151941
1916 void UnfoldedFireableCondition::toXML(std::ostream& out, uint32_t tabs) const{
1917 generateTabs(out, tabs) << "<is-fireable><transition>" + _name << "</transition></is-fireable>\n";
1918 }
1919
1920 void UnfoldedFireableCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{1942 void UnfoldedFireableCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
1921 out << "<is-fireable><transition>" + _name << "</transition></is-fireable>\n";1943 out << "<is-fireable><transition>" + _name << "</transition></is-fireable>\n";
1922 }1944 }
@@ -1944,6 +1966,7 @@
1944 out << "</is-fireable>";1966 out << "</is-fireable>";
1945 }1967 }
1946 }1968 }
1969<<<<<<< TREE
19471970
1948 void UnfoldedIdentifierExpr::toXML(std::ostream& out,uint32_t tabs, bool tokencount) const {1971 void UnfoldedIdentifierExpr::toXML(std::ostream& out,uint32_t tabs, bool tokencount) const {
1949 if (tokencount) {1972 if (tokencount) {
@@ -1956,6 +1979,8 @@
1956 generateTabs(out,tabs) << "</tokens-count>\n";1979 generateTabs(out,tabs) << "</tokens-count>\n";
1957 }1980 }
1958 }1981 }
1982=======
1983>>>>>>> MERGE-SOURCE
19591984
1960 void UnfoldedIdentifierExpr::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context, bool tokencount) const{1985 void UnfoldedIdentifierExpr::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context, bool tokencount) const{
1961 if (tokencount) {1986 if (tokencount) {
@@ -1997,6 +2022,7 @@
1997 }2022 }
1998 }2023 }
1999 }2024 }
2025<<<<<<< TREE
20002026
2001 void PlusExpr::toXML(std::ostream& ss,uint32_t tabs, bool tokencount) const {2027 void PlusExpr::toXML(std::ostream& ss,uint32_t tabs, bool tokencount) const {
2002 if (tokencount) {2028 if (tokencount) {
@@ -2022,6 +2048,8 @@
2022 for(auto& e : _exprs) e->toXML(ss,tabs+1, tokencount);2048 for(auto& e : _exprs) e->toXML(ss,tabs+1, tokencount);
2023 generateTabs(ss,tabs) << "</integer-sum>\n";2049 generateTabs(ss,tabs) << "</integer-sum>\n";
2024 }2050 }
2051=======
2052>>>>>>> MERGE-SOURCE
20252053
2026 void PlusExpr::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context, bool tokencount) const{2054 void PlusExpr::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context, bool tokencount) const{
2027 if (tokencount) {2055 if (tokencount) {
@@ -2047,30 +2075,37 @@
2047 for(auto& e : _exprs) e->toCompactXML(out,tabs, context, tokencount);2075 for(auto& e : _exprs) e->toCompactXML(out,tabs, context, tokencount);
2048 out << "</integer-sum>\n";2076 out << "</integer-sum>\n";
2049 }2077 }
2078<<<<<<< TREE
20502079
2051 void SubtractExpr::toXML(std::ostream& ss,uint32_t tabs, bool tokencount) const {2080 void SubtractExpr::toXML(std::ostream& ss,uint32_t tabs, bool tokencount) const {
2052 generateTabs(ss,tabs) << "<integer-difference>\n";2081 generateTabs(ss,tabs) << "<integer-difference>\n";
2053 for(auto& e : _exprs) e->toXML(ss,tabs+1);2082 for(auto& e : _exprs) e->toXML(ss,tabs+1);
2054 generateTabs(ss,tabs) << "</integer-difference>\n";2083 generateTabs(ss,tabs) << "</integer-difference>\n";
2055 }2084 }
2085=======
2086>>>>>>> MERGE-SOURCE
20562087
2057 void SubtractExpr::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context, bool tokencount) const{2088 void SubtractExpr::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context, bool tokencount) const{
2058 out << "<integer-difference>\n";2089 out << "<integer-difference>\n";
2059 for(auto& e : _exprs) e->toCompactXML(out,tabs, context);2090 for(auto& e : _exprs) e->toCompactXML(out,tabs, context);
2060 out << "</integer-difference>\n";2091 out << "</integer-difference>\n";
2061 }2092 }
2093<<<<<<< TREE
20622094
2063 void MultiplyExpr::toXML(std::ostream& ss,uint32_t tabs, bool tokencount) const {2095 void MultiplyExpr::toXML(std::ostream& ss,uint32_t tabs, bool tokencount) const {
2064 generateTabs(ss,tabs) << "<integer-product>\n";2096 generateTabs(ss,tabs) << "<integer-product>\n";
2065 for(auto& e : _exprs) e->toXML(ss,tabs+1);2097 for(auto& e : _exprs) e->toXML(ss,tabs+1);
2066 generateTabs(ss,tabs) << "</integer-product>\n";2098 generateTabs(ss,tabs) << "</integer-product>\n";
2067 }2099 }
2100=======
2101>>>>>>> MERGE-SOURCE
20682102
2069 void MultiplyExpr::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context, bool tokencount) const{2103 void MultiplyExpr::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context, bool tokencount) const{
2070 out << "<integer-product>\n";2104 out << "<integer-product>\n";
2071 for(auto& e : _exprs) e->toCompactXML(out,tabs, context);2105 for(auto& e : _exprs) e->toCompactXML(out,tabs, context);
2072 out << "</integer-product>\n";2106 out << "</integer-product>\n";
2073 }2107 }
2108<<<<<<< TREE
20742109
2075 void MinusExpr::toXML(std::ostream& out,uint32_t tabs, bool tokencount) const {2110 void MinusExpr::toXML(std::ostream& out,uint32_t tabs, bool tokencount) const {
20762111
@@ -2081,6 +2116,8 @@
2081 "<integer-constant>1</integer-constant>\n" ; generateTabs(out,tabs+1) <<2116 "<integer-constant>1</integer-constant>\n" ; generateTabs(out,tabs+1) <<
2082 "</integer-difference>\n" ; generateTabs(out,tabs) << "</integer-product>\n";2117 "</integer-difference>\n" ; generateTabs(out,tabs) << "</integer-product>\n";
2083 }2118 }
2119=======
2120>>>>>>> MERGE-SOURCE
20842121
2085 void MinusExpr::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context, bool tokencount) const{2122 void MinusExpr::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context, bool tokencount) const{
2086 out << "<integer-product>\n";2123 out << "<integer-product>\n";
@@ -2090,12 +2127,15 @@
2090 "<integer-constant>1</integer-constant>\n" ; out <<2127 "<integer-constant>1</integer-constant>\n" ; out <<
2091 "</integer-difference>\n" ; out << "</integer-product>\n";2128 "</integer-difference>\n" ; out << "</integer-product>\n";
2092 }2129 }
2130<<<<<<< TREE
20932131
2094 void EXCondition::toXML(std::ostream& out,uint32_t tabs) const {2132 void EXCondition::toXML(std::ostream& out,uint32_t tabs) const {
2095 generateTabs(out,tabs) << "<exists-path>\n" ; generateTabs(out,tabs+1) << "<next>\n";2133 generateTabs(out,tabs) << "<exists-path>\n" ; generateTabs(out,tabs+1) << "<next>\n";
2096 _cond->toXML(out,tabs+2);2134 _cond->toXML(out,tabs+2);
2097 generateTabs(out,tabs+1) << "</next>\n" ; generateTabs(out,tabs) << "</exists-path>\n";2135 generateTabs(out,tabs+1) << "</next>\n" ; generateTabs(out,tabs) << "</exists-path>\n";
2098 }2136 }
2137=======
2138>>>>>>> MERGE-SOURCE
20992139
2100 void EXCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2140 void EXCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2101 out << "<exists-path>\n" ; out << "<next>\n";2141 out << "<exists-path>\n" ; out << "<next>\n";
@@ -2103,6 +2143,7 @@
2103 out << "</next>\n" ; out << "</exists-path>\n";2143 out << "</next>\n" ; out << "</exists-path>\n";
2104 }2144 }
21052145
2146<<<<<<< TREE
2106 void AXCondition::toXML(std::ostream& out,uint32_t tabs) const {2147 void AXCondition::toXML(std::ostream& out,uint32_t tabs) const {
2107 generateTabs(out,tabs) << "<all-paths>\n"; generateTabs(out,tabs+1) << "<next>\n";2148 generateTabs(out,tabs) << "<all-paths>\n"; generateTabs(out,tabs+1) << "<next>\n";
2108 _cond->toXML(out,tabs+2);2149 _cond->toXML(out,tabs+2);
@@ -2110,58 +2151,74 @@
2110 }2151 }
21112152
2112 void AXCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2153 void AXCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2154=======
2155 void AXCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2156>>>>>>> MERGE-SOURCE
2113 out << "<all-paths>\n" ;out << "<next>\n";2157 out << "<all-paths>\n" ;out << "<next>\n";
2114 _cond->toCompactXML(out,tabs+2, context);2158 _cond->toCompactXML(out,tabs+2, context);
2115 out << "</next>\n" ; out << "</all-paths>\n";2159 out << "</next>\n" ; out << "</all-paths>\n";
2116 }2160 }
2161<<<<<<< TREE
21172162
2118 void EFCondition::toXML(std::ostream& out,uint32_t tabs) const {2163 void EFCondition::toXML(std::ostream& out,uint32_t tabs) const {
2119 generateTabs(out,tabs) << "<exists-path>\n" ; generateTabs(out,tabs+1) << "<finally>\n";2164 generateTabs(out,tabs) << "<exists-path>\n" ; generateTabs(out,tabs+1) << "<finally>\n";
2120 _cond->toXML(out,tabs+2);2165 _cond->toXML(out,tabs+2);
2121 generateTabs(out,tabs+1) << "</finally>\n" ; generateTabs(out,tabs) << "</exists-path>\n";2166 generateTabs(out,tabs+1) << "</finally>\n" ; generateTabs(out,tabs) << "</exists-path>\n";
2122 }2167 }
2168=======
2169>>>>>>> MERGE-SOURCE
21232170
2124 void EFCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2171 void EFCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2125 out << "<exists-path>\n" ;out << "<finally>\n";2172 out << "<exists-path>\n" ;out << "<finally>\n";
2126 _cond->toCompactXML(out,tabs+2, context);2173 _cond->toCompactXML(out,tabs+2, context);
2127 out << "</finally>\n" ; out << "</exists-path>\n";2174 out << "</finally>\n" ; out << "</exists-path>\n";
2128 }2175 }
2176<<<<<<< TREE
21292177
2130 void AFCondition::toXML(std::ostream& out,uint32_t tabs) const {2178 void AFCondition::toXML(std::ostream& out,uint32_t tabs) const {
2131 generateTabs(out,tabs) << "<all-paths>\n" ; generateTabs(out,tabs+1) << "<finally>\n";2179 generateTabs(out,tabs) << "<all-paths>\n" ; generateTabs(out,tabs+1) << "<finally>\n";
2132 _cond->toXML(out,tabs+2);2180 _cond->toXML(out,tabs+2);
2133 generateTabs(out,tabs+1) << "</finally>\n" ; generateTabs(out,tabs) << "</all-paths>\n";2181 generateTabs(out,tabs+1) << "</finally>\n" ; generateTabs(out,tabs) << "</all-paths>\n";
2134 }2182 }
2183=======
2184>>>>>>> MERGE-SOURCE
21352185
2136 void AFCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2186 void AFCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2137 out << "<all-paths>\n" ;out << "<finally>\n";2187 out << "<all-paths>\n" ;out << "<finally>\n";
2138 _cond->toCompactXML(out,tabs+2, context);2188 _cond->toCompactXML(out,tabs+2, context);
2139 out << "</finally>\n" ; out << "</all-paths>\n";2189 out << "</finally>\n" ; out << "</all-paths>\n";
2140 }2190 }
2191<<<<<<< TREE
21412192
2142 void EGCondition::toXML(std::ostream& out,uint32_t tabs) const {2193 void EGCondition::toXML(std::ostream& out,uint32_t tabs) const {
2143 generateTabs(out,tabs) << "<exists-path>\n" ; generateTabs(out,tabs+1) << "<globally>\n";2194 generateTabs(out,tabs) << "<exists-path>\n" ; generateTabs(out,tabs+1) << "<globally>\n";
2144 _cond->toXML(out,tabs+2);2195 _cond->toXML(out,tabs+2);
2145 generateTabs(out,tabs+1) << "</globally>\n" ; generateTabs(out,tabs) << "</exists-path>\n";2196 generateTabs(out,tabs+1) << "</globally>\n" ; generateTabs(out,tabs) << "</exists-path>\n";
2146 }2197 }
2198=======
2199>>>>>>> MERGE-SOURCE
21472200
2148 void EGCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2201 void EGCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2149 out << "<exists-path>\n" ;out << "<globally>\n";2202 out << "<exists-path>\n" ;out << "<globally>\n";
2150 _cond->toCompactXML(out,tabs+2, context);2203 _cond->toCompactXML(out,tabs+2, context);
2151 out << "</globally>\n" ; out << "</exists-path>\n";2204 out << "</globally>\n" ; out << "</exists-path>\n";
2152 }2205 }
2206<<<<<<< TREE
21532207
2154 void AGCondition::toXML(std::ostream& out,uint32_t tabs) const {2208 void AGCondition::toXML(std::ostream& out,uint32_t tabs) const {
2155 generateTabs(out,tabs) << "<all-paths>\n" ; generateTabs(out,tabs+1) << "<globally>\n";2209 generateTabs(out,tabs) << "<all-paths>\n" ; generateTabs(out,tabs+1) << "<globally>\n";
2156 _cond->toXML(out,tabs+2);2210 _cond->toXML(out,tabs+2);
2157 generateTabs(out,tabs+1) << "</globally>\n" ; generateTabs(out,tabs) << "</all-paths>\n";2211 generateTabs(out,tabs+1) << "</globally>\n" ; generateTabs(out,tabs) << "</all-paths>\n";
2158 }2212 }
2213=======
2214>>>>>>> MERGE-SOURCE
21592215
2160 void AGCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2216 void AGCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2161 out << "<all-paths>\n" ;out << "<globally>\n";2217 out << "<all-paths>\n" ;out << "<globally>\n";
2162 _cond->toCompactXML(out,tabs+2, context);2218 _cond->toCompactXML(out,tabs+2, context);
2163 out << "</globally>\n" ; out << "</all-paths>\n";2219 out << "</globally>\n" ; out << "</all-paths>\n";
2164 }2220 }
2221<<<<<<< TREE
21652222
2166 void EUCondition::toXML(std::ostream& out,uint32_t tabs) const {2223 void EUCondition::toXML(std::ostream& out,uint32_t tabs) const {
2167 generateTabs(out,tabs) << "<exists-path>\n" ; generateTabs(out,tabs+1) << "<until>\n" ; generateTabs(out,tabs+2) << "<before>\n";2224 generateTabs(out,tabs) << "<exists-path>\n" ; generateTabs(out,tabs+1) << "<until>\n" ; generateTabs(out,tabs+2) << "<before>\n";
@@ -2170,6 +2227,8 @@
2170 _cond2->toXML(out,tabs+3);2227 _cond2->toXML(out,tabs+3);
2171 generateTabs(out,tabs+2) << "</reach>\n" ; generateTabs(out,tabs+1) << "</until>\n" ; generateTabs(out,tabs) << "</exists-path>\n";2228 generateTabs(out,tabs+2) << "</reach>\n" ; generateTabs(out,tabs+1) << "</until>\n" ; generateTabs(out,tabs) << "</exists-path>\n";
2172 }2229 }
2230=======
2231>>>>>>> MERGE-SOURCE
21732232
2174 void EUCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2233 void EUCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2175 out << "<exists-path>\n" ; out << "<until>\n" ; out << "<before>\n";2234 out << "<exists-path>\n" ; out << "<until>\n" ; out << "<before>\n";
@@ -2178,6 +2237,7 @@
2178 _cond2->toCompactXML(out,tabs+2, context);2237 _cond2->toCompactXML(out,tabs+2, context);
2179 out << "</reach>\n" ; out << "</until>\n" ; out << "</exists-path>\n";2238 out << "</reach>\n" ; out << "</until>\n" ; out << "</exists-path>\n";
2180 }2239 }
2240<<<<<<< TREE
21812241
2182 void AUCondition::toXML(std::ostream& out,uint32_t tabs) const {2242 void AUCondition::toXML(std::ostream& out,uint32_t tabs) const {
2183 generateTabs(out,tabs) << "<all-paths>\n" ; generateTabs(out,tabs+1) << "<until>\n" ; generateTabs(out,tabs+2) << "<before>\n";2243 generateTabs(out,tabs) << "<all-paths>\n" ; generateTabs(out,tabs+1) << "<until>\n" ; generateTabs(out,tabs+2) << "<before>\n";
@@ -2186,6 +2246,8 @@
2186 _cond2->toXML(out,tabs+3);2246 _cond2->toXML(out,tabs+3);
2187 generateTabs(out,tabs+2) << "</reach>\n" ; generateTabs(out,tabs+1) << "</until>\n" ; generateTabs(out,tabs) << "</all-paths>\n";2247 generateTabs(out,tabs+2) << "</reach>\n" ; generateTabs(out,tabs+1) << "</until>\n" ; generateTabs(out,tabs) << "</all-paths>\n";
2188 }2248 }
2249=======
2250>>>>>>> MERGE-SOURCE
21892251
2190 void AUCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2252 void AUCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2191 out << "<all-paths>\n" ; out << "<until>\n" ; out << "<before>\n";2253 out << "<all-paths>\n" ; out << "<until>\n" ; out << "<before>\n";
@@ -2195,6 +2257,7 @@
2195 out << "</reach>\n" ; out << "</until>\n" ; out << "</all-paths>\n";2257 out << "</reach>\n" ; out << "</until>\n" ; out << "</all-paths>\n";
2196 }2258 }
21972259
2260<<<<<<< TREE
2198 void ACondition::toXML(std::ostream& out, uint32_t tabs) const {2261 void ACondition::toXML(std::ostream& out, uint32_t tabs) const {
2199 generateTabs(out, tabs) << "<all-paths>\n";2262 generateTabs(out, tabs) << "<all-paths>\n";
2200 _cond->toXML(out, tabs+1);2263 _cond->toXML(out, tabs+1);
@@ -2202,11 +2265,15 @@
2202 }2265 }
22032266
2204 void ACondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2267 void ACondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2268=======
2269 void ACondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2270>>>>>>> MERGE-SOURCE
2205 out << "<all-paths>\n" ;2271 out << "<all-paths>\n" ;
2206 _cond->toCompactXML(out,tabs+2, context);2272 _cond->toCompactXML(out,tabs+2, context);
2207 out << "</all-paths>\n";2273 out << "</all-paths>\n";
2208 }2274 }
22092275
2276<<<<<<< TREE
2210 void ECondition::toXML(std::ostream& out, uint32_t tabs) const {2277 void ECondition::toXML(std::ostream& out, uint32_t tabs) const {
2211 generateTabs(out, tabs) << "<exists-path>\n";2278 generateTabs(out, tabs) << "<exists-path>\n";
2212 _cond->toXML(out, tabs+1);2279 _cond->toXML(out, tabs+1);
@@ -2214,11 +2281,15 @@
2214 }2281 }
22152282
2216 void ECondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2283 void ECondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2284=======
2285 void ECondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2286>>>>>>> MERGE-SOURCE
2217 out << "<exists-path>\n" ;2287 out << "<exists-path>\n" ;
2218 _cond->toCompactXML(out,tabs+2, context);2288 _cond->toCompactXML(out,tabs+2, context);
2219 out << "</exists-path>\n";2289 out << "</exists-path>\n";
2220 }2290 }
22212291
2292<<<<<<< TREE
2222 void FCondition::toXML(std::ostream& out, uint32_t tabs) const {2293 void FCondition::toXML(std::ostream& out, uint32_t tabs) const {
2223 generateTabs(out, tabs) << "<finally>\n";2294 generateTabs(out, tabs) << "<finally>\n";
2224 _cond->toXML(out, tabs+1);2295 _cond->toXML(out, tabs+1);
@@ -2226,11 +2297,15 @@
2226 }2297 }
22272298
2228 void FCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2299 void FCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2300=======
2301 void FCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2302>>>>>>> MERGE-SOURCE
2229 out << "<finally>\n" ;2303 out << "<finally>\n" ;
2230 _cond->toCompactXML(out,tabs+2, context);2304 _cond->toCompactXML(out,tabs+2, context);
2231 out << "</finally>\n";2305 out << "</finally>\n";
2232 }2306 }
22332307
2308<<<<<<< TREE
2234 void GCondition::toXML(std::ostream& out, uint32_t tabs) const {2309 void GCondition::toXML(std::ostream& out, uint32_t tabs) const {
2235 generateTabs(out, tabs) << "<globally>\n";2310 generateTabs(out, tabs) << "<globally>\n";
2236 _cond->toXML(out, tabs+1);2311 _cond->toXML(out, tabs+1);
@@ -2238,11 +2313,15 @@
2238 }2313 }
22392314
2240 void GCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2315 void GCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2316=======
2317 void GCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2318>>>>>>> MERGE-SOURCE
2241 out << "<globally>\n" ;2319 out << "<globally>\n" ;
2242 _cond->toCompactXML(out,tabs+2, context);2320 _cond->toCompactXML(out,tabs+2, context);
2243 out << "</globally>\n";2321 out << "</globally>\n";
2244 }2322 }
22452323
2324<<<<<<< TREE
2246 void XCondition::toXML(std::ostream& out, uint32_t tabs) const {2325 void XCondition::toXML(std::ostream& out, uint32_t tabs) const {
2247 generateTabs(out, tabs) << "<next>\n";2326 generateTabs(out, tabs) << "<next>\n";
2248 _cond->toXML(out, tabs+1);2327 _cond->toXML(out, tabs+1);
@@ -2250,11 +2329,15 @@
2250 }2329 }
22512330
2252 void XCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2331 void XCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2332=======
2333 void XCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2334>>>>>>> MERGE-SOURCE
2253 out << "<next>\n" ;2335 out << "<next>\n" ;
2254 _cond->toCompactXML(out,tabs+2, context);2336 _cond->toCompactXML(out,tabs+2, context);
2255 out << "</next>\n";2337 out << "</next>\n";
2256 }2338 }
22572339
2340<<<<<<< TREE
2258 void UntilCondition::toXML(std::ostream& out, uint32_t tabs) const {2341 void UntilCondition::toXML(std::ostream& out, uint32_t tabs) const {
2259 generateTabs(out,tabs) << "<until>\n" ; generateTabs(out,tabs+1) << "<before>\n";2342 generateTabs(out,tabs) << "<until>\n" ; generateTabs(out,tabs+1) << "<before>\n";
2260 _cond1->toXML(out,tabs+2);2343 _cond1->toXML(out,tabs+2);
@@ -2264,6 +2347,9 @@
2264 }2347 }
22652348
2266 void UntilCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2349 void UntilCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2350=======
2351 void UntilCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2352>>>>>>> MERGE-SOURCE
2267 out << "<until>\n" ; out << "<before>\n";2353 out << "<until>\n" ; out << "<before>\n";
2268 _cond1->toCompactXML(out,tabs+2, context);2354 _cond1->toCompactXML(out,tabs+2, context);
2269 out << "</before>\n" ; out << "<reach>\n";2355 out << "</before>\n" ; out << "<reach>\n";
@@ -2271,6 +2357,7 @@
2271 out << "</reach>\n"; out << "</until>\n" ;2357 out << "</reach>\n"; out << "</until>\n" ;
2272 }2358 }
22732359
2360<<<<<<< TREE
2274 void AndCondition::toXML(std::ostream& out,uint32_t tabs) const {2361 void AndCondition::toXML(std::ostream& out,uint32_t tabs) const {
2275 if(_conds.size() == 0)2362 if(_conds.size() == 0)
2276 {2363 {
@@ -2304,6 +2391,9 @@
2304 }2391 }
23052392
2306 void AndCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2393 void AndCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2394=======
2395 void AndCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2396>>>>>>> MERGE-SOURCE
2307 if(_conds.size() == 0)2397 if(_conds.size() == 0)
2308 {2398 {
2309 BooleanCondition::TRUE_CONSTANT->toCompactXML(out,tabs, context);2399 BooleanCondition::TRUE_CONSTANT->toCompactXML(out,tabs, context);
@@ -2334,6 +2424,7 @@
2334 }2424 }
2335 out << "</conjunction>\n";2425 out << "</conjunction>\n";
2336 }2426 }
2427<<<<<<< TREE
23372428
2338 void OrCondition::toXML(std::ostream& out,uint32_t tabs) const {2429 void OrCondition::toXML(std::ostream& out,uint32_t tabs) const {
2339 if(_conds.size() == 0)2430 if(_conds.size() == 0)
@@ -2366,6 +2457,8 @@
2366 }2457 }
2367 generateTabs(out,tabs) << "</disjunction>\n";2458 generateTabs(out,tabs) << "</disjunction>\n";
2368 }2459 }
2460=======
2461>>>>>>> MERGE-SOURCE
23692462
2370 void OrCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2463 void OrCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2371 if(_conds.size() == 0)2464 if(_conds.size() == 0)
@@ -2399,6 +2492,7 @@
2399 out << "</disjunction>\n";2492 out << "</disjunction>\n";
2400 }2493 }
24012494
2495<<<<<<< TREE
2402 void CompareConjunction::toXML(std::ostream& out, uint32_t tabs) const2496 void CompareConjunction::toXML(std::ostream& out, uint32_t tabs) const
2403 {2497 {
2404 if(_negated) generateTabs(out,tabs++) << "<negation>";2498 if(_negated) generateTabs(out,tabs++) << "<negation>";
@@ -2438,6 +2532,9 @@
2438 }2532 }
24392533
2440 void CompareConjunction::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2534 void CompareConjunction::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2535=======
2536 void CompareConjunction::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2537>>>>>>> MERGE-SOURCE
2441 if(_negated) out << "<negation>";2538 if(_negated) out << "<negation>";
2442 if(_constraints.size() == 0) BooleanCondition::TRUE_CONSTANT->toCompactXML(out,tabs, context);2539 if(_constraints.size() == 0) BooleanCondition::TRUE_CONSTANT->toCompactXML(out,tabs, context);
2443 else2540 else
@@ -2474,6 +2571,7 @@
2474 if(_negated) out << "</negation>";2571 if(_negated) out << "</negation>";
2475 }2572 }
24762573
2574<<<<<<< TREE
2477 void EqualCondition::toXML(std::ostream& out,uint32_t tabs) const {2575 void EqualCondition::toXML(std::ostream& out,uint32_t tabs) const {
2478 generateTabs(out,tabs) << "<integer-eq>\n";2576 generateTabs(out,tabs) << "<integer-eq>\n";
2479 _expr1->toXML(out,tabs+1);2577 _expr1->toXML(out,tabs+1);
@@ -2482,11 +2580,15 @@
2482 }2580 }
24832581
2484 void EqualCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2582 void EqualCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2583=======
2584 void EqualCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2585>>>>>>> MERGE-SOURCE
2485 out << "<integer-eq>\n";2586 out << "<integer-eq>\n";
2486 _expr1->toCompactXML(out,tabs, context);2587 _expr1->toCompactXML(out,tabs, context);
2487 _expr2->toCompactXML(out,tabs, context);2588 _expr2->toCompactXML(out,tabs, context);
2488 out << "</integer-eq>\n";2589 out << "</integer-eq>\n";
2489 }2590 }
2591<<<<<<< TREE
24902592
2491 void NotEqualCondition::toXML(std::ostream& out,uint32_t tabs) const {2593 void NotEqualCondition::toXML(std::ostream& out,uint32_t tabs) const {
2492 generateTabs(out,tabs) << "<integer-ne>\n";2594 generateTabs(out,tabs) << "<integer-ne>\n";
@@ -2494,6 +2596,8 @@
2494 _expr2->toXML(out,tabs+1);2596 _expr2->toXML(out,tabs+1);
2495 generateTabs(out,tabs) << "</integer-ne>\n";2597 generateTabs(out,tabs) << "</integer-ne>\n";
2496 }2598 }
2599=======
2600>>>>>>> MERGE-SOURCE
24972601
2498 void NotEqualCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2602 void NotEqualCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2499 out << "<integer-ne>\n";2603 out << "<integer-ne>\n";
@@ -2501,6 +2605,7 @@
2501 _expr2->toCompactXML(out,tabs, context);2605 _expr2->toCompactXML(out,tabs, context);
2502 out << "</integer-ne>\n";2606 out << "</integer-ne>\n";
2503 }2607 }
2608<<<<<<< TREE
25042609
2505 void LessThanCondition::toXML(std::ostream& out,uint32_t tabs) const {2610 void LessThanCondition::toXML(std::ostream& out,uint32_t tabs) const {
2506 generateTabs(out,tabs) << "<integer-lt>\n";2611 generateTabs(out,tabs) << "<integer-lt>\n";
@@ -2508,6 +2613,8 @@
2508 _expr2->toXML(out,tabs+1);2613 _expr2->toXML(out,tabs+1);
2509 generateTabs(out,tabs) << "</integer-lt>\n";2614 generateTabs(out,tabs) << "</integer-lt>\n";
2510 }2615 }
2616=======
2617>>>>>>> MERGE-SOURCE
25112618
2512 void LessThanCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2619 void LessThanCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2513 out << "<integer-lt>\n";2620 out << "<integer-lt>\n";
@@ -2515,6 +2622,7 @@
2515 _expr2->toCompactXML(out,tabs, context);2622 _expr2->toCompactXML(out,tabs, context);
2516 out << "</integer-lt>\n";2623 out << "</integer-lt>\n";
2517 }2624 }
2625<<<<<<< TREE
25182626
2519 void LessThanOrEqualCondition::toXML(std::ostream& out,uint32_t tabs) const {2627 void LessThanOrEqualCondition::toXML(std::ostream& out,uint32_t tabs) const {
2520 generateTabs(out,tabs) << "<integer-le>\n";2628 generateTabs(out,tabs) << "<integer-le>\n";
@@ -2522,6 +2630,8 @@
2522 _expr2->toXML(out,tabs+1);2630 _expr2->toXML(out,tabs+1);
2523 generateTabs(out,tabs) << "</integer-le>\n";2631 generateTabs(out,tabs) << "</integer-le>\n";
2524 }2632 }
2633=======
2634>>>>>>> MERGE-SOURCE
25252635
2526 void LessThanOrEqualCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2636 void LessThanOrEqualCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2527 out << "<integer-le>\n";2637 out << "<integer-le>\n";
@@ -2529,6 +2639,7 @@
2529 _expr2->toCompactXML(out,tabs, context);2639 _expr2->toCompactXML(out,tabs, context);
2530 out << "</integer-le>\n";2640 out << "</integer-le>\n";
2531 }2641 }
2642<<<<<<< TREE
25322643
2533 void NotCondition::toXML(std::ostream& out,uint32_t tabs) const {2644 void NotCondition::toXML(std::ostream& out,uint32_t tabs) const {
25342645
@@ -2536,12 +2647,15 @@
2536 _cond->toXML(out,tabs+1);2647 _cond->toXML(out,tabs+1);
2537 generateTabs(out,tabs) << "</negation>\n";2648 generateTabs(out,tabs) << "</negation>\n";
2538 }2649 }
2650=======
2651>>>>>>> MERGE-SOURCE
25392652
2540 void NotCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2653 void NotCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2541 out << "<negation>\n";2654 out << "<negation>\n";
2542 _cond->toCompactXML(out,tabs, context);2655 _cond->toCompactXML(out,tabs, context);
2543 out << "</negation>\n";2656 out << "</negation>\n";
2544 }2657 }
2658<<<<<<< TREE
25452659
2546 void BooleanCondition::toXML(std::ostream& out,uint32_t tabs) const {2660 void BooleanCondition::toXML(std::ostream& out,uint32_t tabs) const {
2547 generateTabs(out,tabs) << "<" <<2661 generateTabs(out,tabs) << "<" <<
@@ -2558,10 +2672,19 @@
2558 void DeadlockCondition::toXML(std::ostream& out,uint32_t tabs) const {2672 void DeadlockCondition::toXML(std::ostream& out,uint32_t tabs) const {
2559 generateTabs(out,tabs) << "<deadlock/>\n";2673 generateTabs(out,tabs) << "<deadlock/>\n";
2560 }2674 }
2675=======
2676
2677 void BooleanCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2678 out << "<" <<
2679 (value ? "true" : "false")
2680 << "/>\n";
2681 }
2682>>>>>>> MERGE-SOURCE
25612683
2562 void DeadlockCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2684 void DeadlockCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2563 out << "<deadlock/>\n";2685 out << "<deadlock/>\n";
2564 }2686 }
2687<<<<<<< TREE
25652688
2566 void UnfoldedUpperBoundsCondition::toXML(std::ostream& out, uint32_t tabs) const {2689 void UnfoldedUpperBoundsCondition::toXML(std::ostream& out, uint32_t tabs) const {
2567 generateTabs(out, tabs) << "<place-bound>\n";2690 generateTabs(out, tabs) << "<place-bound>\n";
@@ -2569,6 +2692,8 @@
2569 generateTabs(out, tabs + 1) << "<place>" << p._name << "</place>\n";2692 generateTabs(out, tabs + 1) << "<place>" << p._name << "</place>\n";
2570 generateTabs(out, tabs) << "</place-bound>\n";2693 generateTabs(out, tabs) << "</place-bound>\n";
2571 }2694 }
2695=======
2696>>>>>>> MERGE-SOURCE
25722697
2573 void UnfoldedUpperBoundsCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{2698 void UnfoldedUpperBoundsCondition::toCompactXML(std::ostream& out, uint32_t tabs, AnalysisContext& context) const{
2574 out << "<place-bound>\n";2699 out << "<place-bound>\n";
@@ -4462,6 +4587,8 @@
4462 return false;4587 return false;
4463 }4588 }
44644589
4590
4591
4465 } // PQL4592 } // PQL
4466} // PetriEngine4593} // PetriEngine
44674594
44684595
=== added file 'src/PetriEngine/PQL/XMLPrinter.cpp'
--- src/PetriEngine/PQL/XMLPrinter.cpp 1970-01-01 00:00:00 +0000
+++ src/PetriEngine/PQL/XMLPrinter.cpp 2021-10-18 11:40:53 +0000
@@ -0,0 +1,399 @@
1/* Copyright (C) 2011 Jonas Finnemann Jensen <jopsen@gmail.com>,
2 * Thomas Søndersø Nielsen <primogens@gmail.com>,
3 * Lars Kærlund Østergaard <larsko@gmail.com>,
4 * Peter Gjøl Jensen <root@petergjoel.dk>,
5 * Rasmus Tollund <rtollu18@student.aau.dk>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20#include "PetriEngine/PQL/XMLPrinter.h"
21namespace PetriEngine {
22 namespace PQL {
23 std::ostream& XMLPrinter::generateTabs() {
24 for(uint32_t i = 0; i < tabs; i++) {
25 os << single_tab;
26 }
27 return os;
28 }
29
30 void XMLPrinter::openXmlTag(const std::string &tag) {
31 generateTabs() << "<" << tag << (print_newlines? ">\n": ">");
32 tabs++;
33 }
34
35 void XMLPrinter::closeXmlTag(const std::string &tag) {
36 tabs--;
37 generateTabs() << "</" << tag << (print_newlines? ">\n": ">");
38 }
39
40 void XMLPrinter::outputLine(const std::string &line) {
41 generateTabs() << line << (print_newlines? "\n": "");
42
43 }
44
45 void XMLPrinter::_accept(const NotCondition *element) {
46 openXmlTag("negation");
47 element->getCond()->visit(*this);
48 closeXmlTag("negation");
49 }
50
51 void XMLPrinter::_accept(const AndCondition *element) {
52 if(element->empty())
53 {
54 BooleanCondition::TRUE_CONSTANT->visit(*this);
55 return;
56 }
57 if(element->size() == 1)
58 {
59 (*element)[0]->visit(*this);
60 return;
61 }
62 openXmlTag("conjunction");
63 (*element)[0]->visit(*this);
64 for(size_t i = 1; i < element->size(); ++i)
65 {
66 if(i + 1 == element->size())
67 {
68 (*element)[i]->visit(*this);
69 }
70 else
71 {
72 openXmlTag("conjunction");
73 (*element)[i]->visit(*this);
74 }
75 }
76 for(size_t i = element->size() - 1; i > 1; --i)
77 {
78 closeXmlTag("conjunction");
79 }
80 closeXmlTag("conjunction");
81 }
82
83 void XMLPrinter::_accept(const OrCondition *element) {
84 if(element->empty())
85 {
86 BooleanCondition::FALSE_CONSTANT->visit(*this);
87 return;
88 }
89 if(element->size() == 1)
90 {
91 (*element)[0]->visit(*this);
92 return;
93 }
94 openXmlTag("disjunction");
95 (*element)[0]->visit(*this);
96 for(size_t i = 1; i < element->size(); ++i)
97 {
98 if(i + 1 == element->size())
99 {
100 (*element)[i]->visit(*this);
101 }
102 else
103 {
104 openXmlTag("disjunction");
105 (*element)[i]->visit(*this);
106 }
107 }
108 for(size_t i = element->size() - 1; i > 1; --i)
109 {
110 closeXmlTag("disjunction");
111 }
112 closeXmlTag("disjunction");
113 }
114
115 void XMLPrinter::_accept(const LessThanCondition *element) {
116 openXmlTag("integer-lt");
117 (*element)[0]->visit(*this);
118 (*element)[1]->visit(*this);
119 closeXmlTag("integer-lt");
120 }
121
122 void XMLPrinter::_accept(const LessThanOrEqualCondition *element) {
123 openXmlTag("integer-le");
124 (*element)[0]->visit(*this);
125 (*element)[1]->visit(*this);
126 closeXmlTag("integer-le");
127 }
128
129 void XMLPrinter::_accept(const EqualCondition *element) {
130 openXmlTag("integer-eq");
131 (*element)[0]->visit(*this);
132 (*element)[1]->visit(*this);
133 closeXmlTag("integer-eq");
134 }
135
136 void XMLPrinter::_accept(const NotEqualCondition *element) {
137 openXmlTag("integer-ne");
138 (*element)[0]->visit(*this);
139 (*element)[1]->visit(*this);
140 closeXmlTag("integer-ne");
141 }
142
143 void XMLPrinter::_accept(const DeadlockCondition *element) {
144 outputLine("<deadlock/>");
145 }
146
147 void XMLPrinter::_accept(const CompareConjunction *element) {
148 if(element->isNegated()) {
149 generateTabs() << "<negation>";
150 }
151
152 if(element->constraints().empty()) BooleanCondition::TRUE_CONSTANT->visit(*this);
153 else
154 {
155 bool single = element->constraints().size() == 1 &&
156 (element->constraints()[0]._lower == 0 ||
157 element->constraints()[0]._upper == std::numeric_limits<uint32_t>::max());
158 if(!single)
159 openXmlTag("conjunction");
160 for(auto& c : element->constraints())
161 {
162 if(c._lower != 0)
163 {
164 openXmlTag("integer-ge");
165 openXmlTag("tokens-count");
166 outputLine("<place>" + c._name + "</place>");
167 closeXmlTag("tokens-count");
168 outputLine("<integer-constant>" + std::to_string(c._lower) + "</integer-constant>");
169 closeXmlTag("integer-ge");
170 }
171 if(c._upper != std::numeric_limits<uint32_t>::max())
172 {
173 openXmlTag("integer-le");
174 openXmlTag("tokens-count");
175 outputLine("<place>" + c._name + "</place>");
176 closeXmlTag("tokens-count");
177 outputLine("<integer-constant>" + std::to_string(c._upper) + "</integer-constant>");
178 closeXmlTag("integer-le");
179 }
180 }
181 if(!single)
182 closeXmlTag("conjunction");
183 }
184 if(element->isNegated()) {
185 generateTabs() << "</negation>";
186 }
187 }
188
189 void XMLPrinter::_accept(const UnfoldedUpperBoundsCondition *element) {
190 openXmlTag("place-bound");
191 for(auto& p : element->places()) {
192 outputLine("<place>" + p._name + "</place>");
193 }
194 closeXmlTag("place-bound");
195 }
196
197 void XMLPrinter::_accept(const EFCondition *condition) {
198 openXmlTag("exists-path");
199 openXmlTag("finally");
200 condition->getCond()->visit(*this);
201 closeXmlTag("finally");
202 closeXmlTag("exists-path");
203 }
204
205 void XMLPrinter::_accept(const EGCondition *condition) {
206 openXmlTag("exists-path");
207 openXmlTag("globally");
208 condition->getCond()->visit(*this);
209 closeXmlTag("globally");
210 closeXmlTag("exists-path");
211 }
212
213 void XMLPrinter::_accept(const AGCondition *condition) {
214 openXmlTag("all-paths");
215 openXmlTag("globally");
216 condition->getCond()->visit(*this);
217 closeXmlTag("globally");
218 closeXmlTag("all-paths");
219 }
220
221 void XMLPrinter::_accept(const AFCondition *condition) {
222 openXmlTag("all-paths");
223 openXmlTag("finally");
224 condition->getCond()->visit(*this);
225 closeXmlTag("finally");
226 closeXmlTag("all-paths");
227 }
228
229 void XMLPrinter::_accept(const EXCondition *condition) {
230 openXmlTag("exists-path");
231 openXmlTag("next");
232 condition->getCond()->visit(*this);
233 closeXmlTag("next");
234 closeXmlTag("exists-path");
235 }
236
237 void XMLPrinter::_accept(const AXCondition *condition) {
238 openXmlTag("all-paths");
239 openXmlTag("next");
240 condition->getCond()->visit(*this);
241 closeXmlTag("next");
242 closeXmlTag("all-paths");
243 }
244
245 void XMLPrinter::_accept(const EUCondition *condition) {
246 openXmlTag("exists-path");
247 openXmlTag("until");
248 openXmlTag("before");
249 (*condition)[0]->visit(*this);
250 closeXmlTag("before");
251 openXmlTag("reach");
252 (*condition)[1]->visit(*this);
253 closeXmlTag("reach");
254 closeXmlTag("until");
255 closeXmlTag("exists-path");
256 }
257
258 void XMLPrinter::_accept(const AUCondition *condition) {
259 openXmlTag("all-paths");
260 openXmlTag("until");
261 openXmlTag("before");
262 (*condition)[0]->visit(*this);
263 closeXmlTag("before");
264 openXmlTag("reach");
265 (*condition)[1]->visit(*this);
266 closeXmlTag("reach");
267 closeXmlTag("until");
268 closeXmlTag("all-paths");
269
270 }
271
272 void XMLPrinter::_accept(const ACondition *condition) {
273 openXmlTag("all-paths");
274 condition->getCond()->visit(*this);
275 closeXmlTag("all-paths");
276 }
277
278 void XMLPrinter::_accept(const ECondition *condition) {
279 openXmlTag("exists-path");
280 condition->getCond()->visit(*this);
281 closeXmlTag("exists-path");
282 }
283
284 void XMLPrinter::_accept(const GCondition *condition) {
285 openXmlTag("globally");
286 condition->getCond()->visit(*this);
287 closeXmlTag("globally");
288 }
289
290 void XMLPrinter::_accept(const FCondition *condition) {
291 openXmlTag("finally");
292 condition->getCond()->visit(*this);
293 closeXmlTag("finally");
294 }
295
296 void XMLPrinter::_accept(const XCondition *condition) {
297 openXmlTag("next");
298 condition->getCond()->visit(*this);
299 closeXmlTag("next");
300 }
301
302 void XMLPrinter::_accept(const UntilCondition *condition) {
303 openXmlTag("until") ;
304 openXmlTag("before");
305 (*condition)[0]->visit(*this);
306 closeXmlTag("before") ;
307 openXmlTag("reach");
308 (*condition)[1]->visit(*this);
309 closeXmlTag("reach") ;
310 closeXmlTag("until") ;
311 }
312
313 void XMLPrinter::_accept(const UnfoldedFireableCondition *element) {
314 outputLine("<is-fireable><transition>" + element->getName() + "</transition></is-fireable>");
315 }
316
317 void XMLPrinter::_accept(const BooleanCondition *element) {
318 outputLine(element->value? "<true/>": "<false/>");
319 }
320
321 void XMLPrinter::_accept(const UnfoldedIdentifierExpr *element) {
322 if (token_count) {
323 outputLine("<place>" + element->name() + "</place>");
324 }
325 else
326 {
327 openXmlTag("tokens-count");
328 outputLine("<place>" + element->name() + "</place>");
329 closeXmlTag("tokens-count");
330 }
331 }
332
333 void XMLPrinter::_accept(const LiteralExpr *element) {
334 outputLine("<integer-constant>" + std::to_string(element->value()) + "</integer-constant>");
335 }
336
337 void XMLPrinter::_accept(const PlusExpr *element) {
338 if (token_count) {
339 for(auto& e : element->expressions())
340 e->visit(*this);
341 return;
342 }
343
344 if(element->tk) {
345 openXmlTag("tokens-count");
346 for(auto& e : element->places())
347 outputLine("<place>" + e.second + "</place>");
348 for(auto& e : element->expressions())
349 e->visit(*this);
350 closeXmlTag("tokens-count");
351 return;
352 }
353 openXmlTag("integer-sum");
354 outputLine("<integer-constant>" + std::to_string(element->constant()) + "</integer-constant>");
355 for(auto& i : element->places())
356 {
357 openXmlTag("tokens-count");
358 outputLine("<place>" + i.second + "</place>");
359 closeXmlTag("tokens-count");
360 }
361 for(auto& e : element->expressions())
362 e->visit(*this);
363 closeXmlTag("integer-sum");
364 }
365
366 void XMLPrinter::_accept(const MultiplyExpr *element) {
367 openXmlTag("integer-product");
368 for(auto& e : element->expressions())
369 e->visit(*this);
370 closeXmlTag("integer-product");
371 }
372
373 void XMLPrinter::_accept(const MinusExpr *element) {
374 openXmlTag("integer-product");
375 (*element)[0]->visit(*this);
376 openXmlTag("integer-difference");
377 outputLine("<integer-constant>0</integer-constant>");
378 outputLine("<integer-constant>1</integer-constant>");
379 closeXmlTag("integer-difference");
380 closeXmlTag("integer-product");
381 }
382
383 void XMLPrinter::_accept(const SubtractExpr *element) {
384 openXmlTag("integer-difference");
385 for(auto& e : element->expressions())
386 e->visit(*this);
387 closeXmlTag("integer-difference");
388 }
389
390 void XMLPrinter::_accept(const IdentifierExpr *element) {
391 element->compiled()->visit(*this);
392 }
393
394 void XMLPrinter::_accept(const ShallowCondition *element) {
395 element->getCompiled()->visit(*this);
396 }
397 }
398}
399
0400
=== modified file 'src/VerifyPN.cpp'
--- src/VerifyPN.cpp 2021-10-14 11:37:21 +0000
+++ src/VerifyPN.cpp 2021-10-18 11:40:53 +0000
@@ -75,6 +75,7 @@
75#include "PetriEngine/PetriNetBuilder.h"75#include "PetriEngine/PetriNetBuilder.h"
76#include "PetriEngine/PQL/PQL.h"76#include "PetriEngine/PQL/PQL.h"
77#include "PetriEngine/PQL/CTLVisitor.h"77#include "PetriEngine/PQL/CTLVisitor.h"
78#include <PetriEngine/PQL/XMLPrinter.h>
78#include "PetriEngine/options.h"79#include "PetriEngine/options.h"
79#include "PetriEngine/errorcodes.h"80#include "PetriEngine/errorcodes.h"
80#include "PetriEngine/STSolver.h"81#include "PetriEngine/STSolver.h"
@@ -90,6 +91,7 @@
90#include "LTL/LTLMain.h"91#include "LTL/LTLMain.h"
9192
92#include <atomic>93#include <atomic>
94#include <PetriEngine/PQL/BinaryPrinter.h>
9395
94using namespace PetriEngine;96using namespace PetriEngine;
95using namespace PetriEngine::PQL;97using namespace PetriEngine::PQL;
@@ -940,7 +942,8 @@
940 continue;942 continue;
941 }943 }
942 ss << " <property>\n <id>" << querynames[i] << "</id>\n <description>Simplified</description>\n <formula>\n";944 ss << " <property>\n <id>" << querynames[i] << "</id>\n <description>Simplified</description>\n <formula>\n";
943 queries[i]->toXML(ss, 3);945 XMLPrinter xml_printer(ss, 3);
946 queries[i]->visit(xml_printer);
944 ss << " </formula>\n </property>\n";947 ss << " </formula>\n </property>\n";
945 }948 }
946949
@@ -985,12 +988,14 @@
985 {988 {
986 out.write(querynames[i].data(), querynames[i].size());989 out.write(querynames[i].data(), querynames[i].size());
987 out.write("\0", sizeof(char));990 out.write("\0", sizeof(char));
988 queries[i]->toBinary(out);991 BinaryPrinter binary_printer(out);
992 queries[i]->visit(binary_printer);
989 }993 }
990 else994 else
991 {995 {
992 out << " <property>\n <id>" << querynames[i] << "</id>\n <description>Simplified</description>\n <formula>\n";996 out << " <property>\n <id>" << querynames[i] << "</id>\n <description>Simplified</description>\n <formula>\n";
993 queries[i]->toXML(out, 3);997 XMLPrinter xml_printer(out, 3);
998 queries[i]->visit(xml_printer);
994 out << " </formula>\n </property>\n";999 out << " </formula>\n </property>\n";
995 }1000 }
996 }1001 }

Subscribers

People subscribed via source and target branches