Skip to content

Commit 3c75e46

Browse files
authored
Merge pull request #868 from sampottinger/main
Formalize static analysis toolkit
2 parents 5309908 + ae2acbe commit 3c75e46

47 files changed

Lines changed: 872 additions & 160 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎engine/src/main/java/org/kigalisim/lang/operation/AdditionOperation.java‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
*/
1717
public class AdditionOperation implements Operation {
1818

19+
private static final OperationStaticSemantics STATIC_SEMANTICS = new OperationStaticSemantics(
20+
OperationType.ADDITION
21+
);
22+
1923
private final Operation left;
2024
private final Operation right;
2125

@@ -37,4 +41,10 @@ public void execute(PushDownMachine machine) {
3741
right.execute(machine);
3842
machine.add();
3943
}
44+
45+
/** {@inheritDoc} */
46+
@Override
47+
public OperationStaticSemantics getStaticSemantics() {
48+
return STATIC_SEMANTICS;
49+
}
4050
}

‎engine/src/main/java/org/kigalisim/lang/operation/CapDisplacingOperation.java‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,13 @@ public void execute(PushDownMachine machine) {
7878
engine.cap(stream, result, yearMatcher, displaceTarget,
7979
DisplacementType.EQUIVALENT);
8080
}
81+
82+
/** {@inheritDoc} */
83+
@Override
84+
public OperationStaticSemantics getStaticSemantics() {
85+
return new OperationStaticSemanticsBuilder(OperationType.CAP_DISPLACING)
86+
.addStream(stream)
87+
.addIfStream(displaceTarget)
88+
.build();
89+
}
8190
}

‎engine/src/main/java/org/kigalisim/lang/operation/CapOperation.java‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,4 +153,14 @@ public void execute(PushDownMachine machine) {
153153
Engine engine = machine.getEngine();
154154
engine.cap(stream, result, yearMatcher, displaceTarget.orElse(null), displacementType);
155155
}
156+
157+
/** {@inheritDoc} */
158+
@Override
159+
public OperationStaticSemantics getStaticSemantics() {
160+
OperationStaticSemanticsBuilder builder = new OperationStaticSemanticsBuilder(
161+
OperationType.CAP
162+
).addStream(stream);
163+
displaceTarget.ifPresent(builder::addIfStream);
164+
return builder.build();
165+
}
156166
}

‎engine/src/main/java/org/kigalisim/lang/operation/ChangeOperation.java‎

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -71,18 +71,11 @@ public void execute(PushDownMachine machine) {
7171
engine.changeStream(stream, result, yearMatcher);
7272
}
7373

74-
/**
75-
* The name of the stream this operation changes.
76-
*
77-
* @return the stream name.
78-
*/
79-
public String getStream() {
80-
return stream;
81-
}
82-
8374
/** {@inheritDoc} */
8475
@Override
85-
public OperationType getOperationType() {
86-
return OperationType.CHANGE;
76+
public OperationStaticSemantics getStaticSemantics() {
77+
return new OperationStaticSemanticsBuilder(OperationType.CHANGE)
78+
.addStream(stream)
79+
.build();
8780
}
8881
}

‎engine/src/main/java/org/kigalisim/lang/operation/ChangeUnitsOperation.java‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
*/
1919
public class ChangeUnitsOperation implements Operation {
2020

21+
private static final OperationStaticSemantics STATIC_SEMANTICS = new OperationStaticSemantics(
22+
OperationType.CHANGE_UNITS
23+
);
24+
2125
private final Operation operand;
2226
private final String units;
2327

@@ -39,4 +43,9 @@ public void execute(PushDownMachine machine) {
3943
machine.changeUnits(units);
4044
}
4145

46+
/** {@inheritDoc} */
47+
@Override
48+
public OperationStaticSemantics getStaticSemantics() {
49+
return STATIC_SEMANTICS;
50+
}
4251
}

‎engine/src/main/java/org/kigalisim/lang/operation/ComparisonOperation.java‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
*/
1717
public class ComparisonOperation implements Operation {
1818

19+
private static final OperationStaticSemantics STATIC_SEMANTICS = new OperationStaticSemantics(
20+
OperationType.COMPARISON
21+
);
22+
1923
private final Operation left;
2024
private final Operation right;
2125
private final String operator;
@@ -49,4 +53,10 @@ public void execute(PushDownMachine machine) {
4953
default -> throw new RuntimeException("Unknown comparison operator: " + operator);
5054
}
5155
}
56+
57+
/** {@inheritDoc} */
58+
@Override
59+
public OperationStaticSemantics getStaticSemantics() {
60+
return STATIC_SEMANTICS;
61+
}
5262
}

‎engine/src/main/java/org/kigalisim/lang/operation/ConditionalOperation.java‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919
*/
2020
public class ConditionalOperation implements Operation {
2121

22+
private static final OperationStaticSemantics STATIC_SEMANTICS = new OperationStaticSemantics(
23+
OperationType.CONDITIONAL
24+
);
25+
2226
private final Operation condition;
2327
private final Operation trueCase;
2428
private final Operation falseCase;
@@ -57,9 +61,20 @@ public void execute(PushDownMachine m) {
5761
falseCase.execute(m);
5862
}
5963
}
64+
65+
@Override
66+
public OperationStaticSemantics getStaticSemantics() {
67+
return STATIC_SEMANTICS;
68+
}
6069
};
6170

6271
// Execute the simple operation
6372
simpleOp.execute(machine);
6473
}
74+
75+
/** {@inheritDoc} */
76+
@Override
77+
public OperationStaticSemantics getStaticSemantics() {
78+
return STATIC_SEMANTICS;
79+
}
6580
}

‎engine/src/main/java/org/kigalisim/lang/operation/DefineVariableOperation.java‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
*/
1717
public class DefineVariableOperation implements Operation {
1818

19+
private static final OperationStaticSemantics STATIC_SEMANTICS = new OperationStaticSemantics(
20+
OperationType.DEFINE_VARIABLE
21+
);
22+
1923
private final String variableName;
2024
private final Operation valueOperation;
2125

@@ -47,4 +51,10 @@ public void execute(PushDownMachine machine) {
4751

4852
machine.getEngine().setVariable(variableName, value);
4953
}
54+
55+
/** {@inheritDoc} */
56+
@Override
57+
public OperationStaticSemantics getStaticSemantics() {
58+
return STATIC_SEMANTICS;
59+
}
5060
}

‎engine/src/main/java/org/kigalisim/lang/operation/DivisionOperation.java‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
*/
1717
public class DivisionOperation implements Operation {
1818

19+
private static final OperationStaticSemantics STATIC_SEMANTICS = new OperationStaticSemantics(
20+
OperationType.DIVISION
21+
);
22+
1923
private final Operation left;
2024
private final Operation right;
2125

@@ -37,4 +41,10 @@ public void execute(PushDownMachine machine) {
3741
right.execute(machine);
3842
machine.divide();
3943
}
44+
45+
/** {@inheritDoc} */
46+
@Override
47+
public OperationStaticSemantics getStaticSemantics() {
48+
return STATIC_SEMANTICS;
49+
}
4050
}

‎engine/src/main/java/org/kigalisim/lang/operation/DrawNormalOperation.java‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
*/
1818
public class DrawNormalOperation implements Operation {
1919

20+
private static final OperationStaticSemantics STATIC_SEMANTICS = new OperationStaticSemantics(
21+
OperationType.DRAW_NORMAL
22+
);
23+
2024
private final Operation mean;
2125
private final Operation std;
2226

@@ -38,4 +42,10 @@ public void execute(PushDownMachine machine) {
3842
std.execute(machine);
3943
machine.drawNormal();
4044
}
45+
46+
/** {@inheritDoc} */
47+
@Override
48+
public OperationStaticSemantics getStaticSemantics() {
49+
return STATIC_SEMANTICS;
50+
}
4151
}

0 commit comments

Comments
 (0)