Skip to content

Commit 1612aac

Browse files
authored
Add extension dispatchers and PQL grammar (#307)
* Add extension PQL grammar * Add extension dispatchers
1 parent c5337f9 commit 1612aac

10 files changed

+487
-58
lines changed

Team20/Code20/SPA/SPA.vcxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,16 @@
1111
</ProjectConfiguration>
1212
</ItemGroup>
1313
<ItemGroup>
14+
<ClCompile Include="..\source\AffectsBipDispatcher.cpp" />
15+
<ClCompile Include="..\source\AffectsBipStarDispatcher.cpp" />
1416
<ClCompile Include="..\source\AffectsDispatcher.cpp" />
1517
<ClCompile Include="..\source\AffectsStarDispatcher.cpp" />
1618
<ClCompile Include="..\source\CallsDispatcher.cpp" />
1719
<ClCompile Include="..\source\CallsStarDispatcher.cpp" />
1820
<ClCompile Include="..\source\ClauseDispatcher.cpp" />
1921
<ClCompile Include="..\source\DispatcherGraph.cpp" />
22+
<ClCompile Include="..\source\NextBipDispatcher.cpp" />
23+
<ClCompile Include="..\source\NextBipStarDispatcher.cpp" />
2024
<ClCompile Include="..\source\NextDispatcher.cpp" />
2125
<ClCompile Include="..\source\NextStarDispatcher.cpp" />
2226
<ClCompile Include="..\source\Pql.cpp" />

Team20/Code20/SPA/SPA.vcxproj.filters

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,18 @@
159159
<ClCompile Include="..\source\SimpleSubParser.cpp">
160160
<Filter>Source Files\FrontEnd</Filter>
161161
</ClCompile>
162+
<ClCompile Include="..\source\AffectsBipStarDispatcher.cpp">
163+
<Filter>Source Files\PQL\Dispatchers</Filter>
164+
</ClCompile>
165+
<ClCompile Include="..\source\AffectsBipDispatcher.cpp">
166+
<Filter>Source Files\PQL\Dispatchers</Filter>
167+
</ClCompile>
168+
<ClCompile Include="..\source\NextBipDispatcher.cpp">
169+
<Filter>Source Files\PQL\Dispatchers</Filter>
170+
</ClCompile>
171+
<ClCompile Include="..\source\NextBipStarDispatcher.cpp">
172+
<Filter>Source Files\PQL\Dispatchers</Filter>
173+
</ClCompile>
162174
</ItemGroup>
163175
<ItemGroup>
164176
<ClInclude Include="..\source\TNode.h">
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#include "Dispatchers.h"
2+
3+
AffectsBipDispatcher::AffectsBipDispatcher(PqlToken firstArgument,
4+
PqlToken secondArgument,
5+
PkbQueryInterface *queryHandler)
6+
: ClauseDispatcher(queryHandler) {
7+
pkbParameters.push_back(toParam(firstArgument));
8+
pkbParameters.push_back(toParam(secondArgument));
9+
}
10+
11+
int AffectsBipDispatcher::dispatchPriority() {
12+
if (cachedPriority >= 0)
13+
return cachedPriority;
14+
15+
cachedPriority = 23;
16+
if (LineNumber *first = std::get_if<LineNumber>(&pkbParameters[0])) {
17+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
18+
cachedPriority = 20;
19+
}
20+
}
21+
if (Statement *first = std::get_if<Statement>(&pkbParameters[0])) {
22+
if (LineNumber *second = std::get_if<LineNumber>(&pkbParameters[1])) {
23+
cachedPriority = 20;
24+
}
25+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
26+
cachedPriority = 35;
27+
}
28+
if (Underscore *second = std::get_if<Underscore>(&pkbParameters[1])) {
29+
cachedPriority = 20;
30+
}
31+
}
32+
if (Underscore *first = std::get_if<Underscore>(&pkbParameters[0])) {
33+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
34+
cachedPriority = 20;
35+
}
36+
}
37+
return cachedPriority;
38+
}
39+
40+
bool AffectsBipDispatcher::booleanDispatch() {
41+
if (LineNumber *first = std::get_if<LineNumber>(&pkbParameters[0])) {
42+
if (LineNumber *second = std::get_if<LineNumber>(&pkbParameters[1])) {
43+
return handler->affectsBip(*first, *second);
44+
}
45+
if (Underscore *second = std::get_if<Underscore>(&pkbParameters[1])) {
46+
return handler->affectsBip(*first, *second);
47+
}
48+
}
49+
if (Underscore *first = std::get_if<Underscore>(&pkbParameters[0])) {
50+
if (LineNumber *second = std::get_if<LineNumber>(&pkbParameters[1])) {
51+
return handler->affectsBip(*first, *second);
52+
}
53+
if (Underscore *second = std::get_if<Underscore>(&pkbParameters[1])) {
54+
return handler->affectsBip(*first, *second);
55+
}
56+
}
57+
throw "Invalid: Parameters provided do not return boolean";
58+
}
59+
60+
EvaluationTable AffectsBipDispatcher::resultDispatch() {
61+
if (LineNumber *first = std::get_if<LineNumber>(&pkbParameters[0])) {
62+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
63+
return toEvaluationTable(handler->affectsBip(*first, *second));
64+
}
65+
}
66+
if (Statement *first = std::get_if<Statement>(&pkbParameters[0])) {
67+
if (LineNumber *second = std::get_if<LineNumber>(&pkbParameters[1])) {
68+
return toEvaluationTable(handler->affectsBip(*first, *second));
69+
}
70+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
71+
return toEvaluationTable(handler->affectsBip(*first, *second));
72+
}
73+
if (Underscore *second = std::get_if<Underscore>(&pkbParameters[1])) {
74+
return toEvaluationTable(handler->affectsBip(*first, *second));
75+
}
76+
}
77+
if (Underscore *first = std::get_if<Underscore>(&pkbParameters[0])) {
78+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
79+
return toEvaluationTable(handler->affectsBip(*first, *second));
80+
}
81+
}
82+
throw "Invalid: Parameters provided do not return values";
83+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#include "Dispatchers.h"
2+
3+
AffectsBipStarDispatcher::AffectsBipStarDispatcher(
4+
PqlToken firstArgument, PqlToken secondArgument,
5+
PkbQueryInterface *queryHandler)
6+
: ClauseDispatcher(queryHandler) {
7+
pkbParameters.push_back(toParam(firstArgument));
8+
pkbParameters.push_back(toParam(secondArgument));
9+
}
10+
11+
int AffectsBipStarDispatcher::dispatchPriority() {
12+
if (cachedPriority >= 0)
13+
return cachedPriority;
14+
15+
cachedPriority = 30;
16+
if (LineNumber *first = std::get_if<LineNumber>(&pkbParameters[0])) {
17+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
18+
cachedPriority = 35;
19+
}
20+
}
21+
if (Statement *first = std::get_if<Statement>(&pkbParameters[0])) {
22+
if (LineNumber *second = std::get_if<LineNumber>(&pkbParameters[1])) {
23+
cachedPriority = 35;
24+
}
25+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
26+
cachedPriority = 45;
27+
}
28+
if (Underscore *second = std::get_if<Underscore>(&pkbParameters[1])) {
29+
cachedPriority = 35;
30+
}
31+
}
32+
if (Underscore *first = std::get_if<Underscore>(&pkbParameters[0])) {
33+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
34+
cachedPriority = 35;
35+
}
36+
}
37+
return cachedPriority;
38+
}
39+
40+
bool AffectsBipStarDispatcher::booleanDispatch() {
41+
if (LineNumber *first = std::get_if<LineNumber>(&pkbParameters[0])) {
42+
if (LineNumber *second = std::get_if<LineNumber>(&pkbParameters[1])) {
43+
return handler->affectsBipStar(*first, *second);
44+
}
45+
if (Underscore *second = std::get_if<Underscore>(&pkbParameters[1])) {
46+
return handler->affectsBipStar(*first, *second);
47+
}
48+
}
49+
if (Underscore *first = std::get_if<Underscore>(&pkbParameters[0])) {
50+
if (LineNumber *second = std::get_if<LineNumber>(&pkbParameters[1])) {
51+
return handler->affectsBipStar(*first, *second);
52+
}
53+
if (Underscore *second = std::get_if<Underscore>(&pkbParameters[1])) {
54+
return handler->affectsBipStar(*first, *second);
55+
}
56+
}
57+
throw "Invalid: Parameters provided do not return boolean";
58+
}
59+
60+
EvaluationTable AffectsBipStarDispatcher::resultDispatch() {
61+
if (LineNumber *first = std::get_if<LineNumber>(&pkbParameters[0])) {
62+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
63+
return toEvaluationTable(handler->affectsBipStar(*first, *second));
64+
}
65+
}
66+
if (Statement *first = std::get_if<Statement>(&pkbParameters[0])) {
67+
if (LineNumber *second = std::get_if<LineNumber>(&pkbParameters[1])) {
68+
return toEvaluationTable(handler->affectsBipStar(*first, *second));
69+
}
70+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
71+
return toEvaluationTable(handler->affectsBipStar(*first, *second));
72+
}
73+
if (Underscore *second = std::get_if<Underscore>(&pkbParameters[1])) {
74+
return toEvaluationTable(handler->affectsBipStar(*first, *second));
75+
}
76+
}
77+
if (Underscore *first = std::get_if<Underscore>(&pkbParameters[0])) {
78+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
79+
return toEvaluationTable(handler->affectsBipStar(*first, *second));
80+
}
81+
}
82+
throw "Invalid: Parameters provided do not return values";
83+
}

Team20/Code20/source/ClauseDispatcher.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,17 @@ ClauseDispatcher::FromRelationship(ParsedRelationship pr,
5959
case TokenType::AFFECTS_T:
6060
return new AffectsStarDispatcher(pr.firstArgument, pr.secondArgument,
6161
handler);
62+
case TokenType::NEXTBIP:
63+
return new NextBipDispatcher(pr.firstArgument, pr.secondArgument, handler);
64+
case TokenType::NEXTBIP_T:
65+
return new NextBipStarDispatcher(pr.firstArgument, pr.secondArgument,
66+
handler);
67+
case TokenType::AFFECTSBIP:
68+
return new AffectsBipDispatcher(pr.firstArgument, pr.secondArgument,
69+
handler);
70+
case TokenType::AFFECTSBIP_T:
71+
return new AffectsBipStarDispatcher(pr.firstArgument, pr.secondArgument,
72+
handler);
6273
default:
6374
throw "Invalid: Relationship not implemented";
6475
}

Team20/Code20/source/Dispatchers.h

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,42 @@ class AffectsStarDispatcher : public ClauseDispatcher {
126126
EvaluationTable resultDispatch();
127127
};
128128

129+
class NextBipDispatcher : public ClauseDispatcher {
130+
public:
131+
NextBipDispatcher(PqlToken firstArgument, PqlToken secondArgument,
132+
PkbQueryInterface *queryHandler);
133+
int dispatchPriority();
134+
bool booleanDispatch();
135+
EvaluationTable resultDispatch();
136+
};
137+
138+
class NextBipStarDispatcher : public ClauseDispatcher {
139+
public:
140+
NextBipStarDispatcher(PqlToken firstArgument, PqlToken secondArgument,
141+
PkbQueryInterface *queryHandler);
142+
int dispatchPriority();
143+
bool booleanDispatch();
144+
EvaluationTable resultDispatch();
145+
};
146+
147+
class AffectsBipDispatcher : public ClauseDispatcher {
148+
public:
149+
AffectsBipDispatcher(PqlToken firstArgument, PqlToken secondArgument,
150+
PkbQueryInterface *queryHandler);
151+
int dispatchPriority();
152+
bool booleanDispatch();
153+
EvaluationTable resultDispatch();
154+
};
155+
156+
class AffectsBipStarDispatcher : public ClauseDispatcher {
157+
public:
158+
AffectsBipStarDispatcher(PqlToken firstArgument, PqlToken secondArgument,
159+
PkbQueryInterface *queryHandler);
160+
int dispatchPriority();
161+
bool booleanDispatch();
162+
EvaluationTable resultDispatch();
163+
};
164+
129165
class PatternDispatcher : public ClauseDispatcher {
130166
public:
131167
PatternDispatcher(ParsedPattern pp, PkbQueryInterface *queryHandler);
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#include "Dispatchers.h"
2+
3+
NextBipDispatcher::NextBipDispatcher(PqlToken firstArgument,
4+
PqlToken secondArgument,
5+
PkbQueryInterface *queryHandler)
6+
: ClauseDispatcher(queryHandler) {
7+
pkbParameters.push_back(toParam(firstArgument));
8+
pkbParameters.push_back(toParam(secondArgument));
9+
}
10+
11+
int NextBipDispatcher::dispatchPriority() {
12+
if (cachedPriority >= 0)
13+
return cachedPriority;
14+
15+
cachedPriority = 0;
16+
if (LineNumber *first = std::get_if<LineNumber>(&pkbParameters[0])) {
17+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
18+
cachedPriority = 1;
19+
}
20+
}
21+
if (Statement *first = std::get_if<Statement>(&pkbParameters[0])) {
22+
if (LineNumber *second = std::get_if<LineNumber>(&pkbParameters[1])) {
23+
cachedPriority = 1;
24+
}
25+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
26+
cachedPriority = 3;
27+
}
28+
if (Underscore *second = std::get_if<Underscore>(&pkbParameters[1])) {
29+
cachedPriority = 1;
30+
}
31+
}
32+
if (Underscore *first = std::get_if<Underscore>(&pkbParameters[0])) {
33+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
34+
cachedPriority = 1;
35+
}
36+
}
37+
return cachedPriority;
38+
}
39+
40+
bool NextBipDispatcher::booleanDispatch() {
41+
if (LineNumber *first = std::get_if<LineNumber>(&pkbParameters[0])) {
42+
if (LineNumber *second = std::get_if<LineNumber>(&pkbParameters[1])) {
43+
return handler->nextBip(*first, *second);
44+
}
45+
if (Underscore *second = std::get_if<Underscore>(&pkbParameters[1])) {
46+
return handler->nextBip(*first, *second);
47+
}
48+
}
49+
if (Underscore *first = std::get_if<Underscore>(&pkbParameters[0])) {
50+
if (LineNumber *second = std::get_if<LineNumber>(&pkbParameters[1])) {
51+
return handler->nextBip(*first, *second);
52+
}
53+
if (Underscore *second = std::get_if<Underscore>(&pkbParameters[1])) {
54+
return handler->nextBip(*first, *second);
55+
}
56+
}
57+
throw "Invalid: Parameters provided do not return boolean";
58+
}
59+
60+
EvaluationTable NextBipDispatcher::resultDispatch() {
61+
if (LineNumber *first = std::get_if<LineNumber>(&pkbParameters[0])) {
62+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
63+
return toEvaluationTable(handler->nextBip(*first, *second));
64+
}
65+
}
66+
if (Statement *first = std::get_if<Statement>(&pkbParameters[0])) {
67+
if (LineNumber *second = std::get_if<LineNumber>(&pkbParameters[1])) {
68+
return toEvaluationTable(handler->nextBip(*first, *second));
69+
}
70+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
71+
return toEvaluationTable(handler->nextBip(*first, *second));
72+
}
73+
if (Underscore *second = std::get_if<Underscore>(&pkbParameters[1])) {
74+
return toEvaluationTable(handler->nextBip(*first, *second));
75+
}
76+
}
77+
if (Underscore *first = std::get_if<Underscore>(&pkbParameters[0])) {
78+
if (Statement *second = std::get_if<Statement>(&pkbParameters[1])) {
79+
return toEvaluationTable(handler->nextBip(*first, *second));
80+
}
81+
}
82+
throw "Invalid: Parameters provided do not return values";
83+
}

0 commit comments

Comments
 (0)