-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRewrite.h
78 lines (62 loc) · 2.58 KB
/
Rewrite.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/***************************************************************************
* Copyright (C) 2014 by Mushthofa *
* Mushthofa.Mushthofa@Ugent.be *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
/*
* Rewrite.h
*
* Created on: Feb 2014
* Author: mush
*/
#ifndef REWRITE_H_
#define REWRITE_H_
#include "Program.h"
class Rewrite
{
public:
Rewrite(const Program& p)
:rules(p), done(false)
{ }
Program getStandard ()
{
if(!done)
doRewrite();
return rules;
}
void doRewrite();
protected:
Program rules;
bool done;
/* Each of these method check for a spesific condition of rules
* Perform the appropriate rewriting by:
* 1) adding the new/replacing rules
* and keeping also the predicate signature in the program
* because they need to be converted also to graded truth value in the translation
* 2) return true when they rewrite the rule
* the rule will be removed in the calling method (doRewrite())
* 3) if no rewriting necessary, return false;
*/
bool checkRuleConstant(Program::iterator);
bool checkRuleBodyOp(Program::iterator);
bool checkRule2BodyNeg(Program::iterator);
bool checkRule1BodyNeg(Program::iterator);
bool checkRuleHeadOp(Program::iterator);
bool checkHeadCompBodyNeg(Program::iterator);
bool checkHeadBodyComp(Program::iterator);
};
#endif /* REWRITE_H_ */