diff options
author | 2024-03-05 22:01:10 +0100 | |
---|---|---|
committer | 2024-04-07 14:55:46 +0200 | |
commit | c14d8efd509f834b80573bc0339bb990698b265c (patch) | |
tree | dc3ca21785ea17bc75a861f373ee69ec64d6e97f /subprojects/language-model/src/main/resources | |
parent | feat(language): validate assignment expressions (diff) | |
download | refinery-c14d8efd509f834b80573bc0339bb990698b265c.tar.gz refinery-c14d8efd509f834b80573bc0339bb990698b265c.tar.zst refinery-c14d8efd509f834b80573bc0339bb990698b265c.zip |
feat(language): type inference
* Customizable operator overloads.
* Customizable aggregation operators.
* Simplify ProblemQualifiedNameProvider.
Diffstat (limited to 'subprojects/language-model/src/main/resources')
-rw-r--r-- | subprojects/language-model/src/main/resources/model/problem.ecore | 28 | ||||
-rw-r--r-- | subprojects/language-model/src/main/resources/model/problem.genmodel | 28 |
2 files changed, 16 insertions, 40 deletions
diff --git a/subprojects/language-model/src/main/resources/model/problem.ecore b/subprojects/language-model/src/main/resources/model/problem.ecore index eed134fd..9a349490 100644 --- a/subprojects/language-model/src/main/resources/model/problem.ecore +++ b/subprojects/language-model/src/main/resources/model/problem.ecore | |||
@@ -150,12 +150,6 @@ | |||
150 | <eStructuralFeatures xsi:type="ecore:EReference" name="parent" eType="#//VariableOrNode"/> | 150 | <eStructuralFeatures xsi:type="ecore:EReference" name="parent" eType="#//VariableOrNode"/> |
151 | </eClassifiers> | 151 | </eClassifiers> |
152 | <eClassifiers xsi:type="ecore:EClass" name="NewVariable" eSuperTypes="#//Variable"/> | 152 | <eClassifiers xsi:type="ecore:EClass" name="NewVariable" eSuperTypes="#//Variable"/> |
153 | <eClassifiers xsi:type="ecore:EEnum" name="Modality"> | ||
154 | <eLiterals name="DEFAULT" value="1"/> | ||
155 | <eLiterals name="MAY" value="2"/> | ||
156 | <eLiterals name="MUST" value="3"/> | ||
157 | <eLiterals name="CURRENT" value="3"/> | ||
158 | </eClassifiers> | ||
159 | <eClassifiers xsi:type="ecore:EEnum" name="ComparisonOp"> | 153 | <eClassifiers xsi:type="ecore:EEnum" name="ComparisonOp"> |
160 | <eLiterals name="LESS"/> | 154 | <eLiterals name="LESS"/> |
161 | <eLiterals name="LESS_EQ" value="1"/> | 155 | <eLiterals name="LESS_EQ" value="1"/> |
@@ -164,10 +158,8 @@ | |||
164 | <eLiterals name="EQ" value="4"/> | 158 | <eLiterals name="EQ" value="4"/> |
165 | <eLiterals name="NOT_EQ" value="5"/> | 159 | <eLiterals name="NOT_EQ" value="5"/> |
166 | <eLiterals name="IN" value="6"/> | 160 | <eLiterals name="IN" value="6"/> |
167 | <eLiterals name="SUBSUMES" value="7"/> | 161 | <eLiterals name="NODE_EQ" value="9"/> |
168 | <eLiterals name="SUBSUMED_BY" value="8"/> | 162 | <eLiterals name="NODE_NOT_EQ" value="10"/> |
169 | <eLiterals name="ABS_EQ" value="9"/> | ||
170 | <eLiterals name="ABS_NOT_EQ" value="10"/> | ||
171 | </eClassifiers> | 163 | </eClassifiers> |
172 | <eClassifiers xsi:type="ecore:EEnum" name="ReferenceKind"> | 164 | <eClassifiers xsi:type="ecore:EEnum" name="ReferenceKind"> |
173 | <eLiterals name="DEFAULT" value="1"/> | 165 | <eLiterals name="DEFAULT" value="1"/> |
@@ -199,6 +191,9 @@ | |||
199 | <eLiterals name="MUL" value="2"/> | 191 | <eLiterals name="MUL" value="2"/> |
200 | <eLiterals name="DIV" value="3"/> | 192 | <eLiterals name="DIV" value="3"/> |
201 | <eLiterals name="POW" value="4"/> | 193 | <eLiterals name="POW" value="4"/> |
194 | <eLiterals name="AND" value="5"/> | ||
195 | <eLiterals name="OR" value="6"/> | ||
196 | <eLiterals name="XOR" value="7"/> | ||
202 | </eClassifiers> | 197 | </eClassifiers> |
203 | <eClassifiers xsi:type="ecore:EClass" name="ArithmeticUnaryExpr" eSuperTypes="#//UnaryExpr"> | 198 | <eClassifiers xsi:type="ecore:EClass" name="ArithmeticUnaryExpr" eSuperTypes="#//UnaryExpr"> |
204 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="op" eType="#//UnaryOp"/> | 199 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="op" eType="#//UnaryOp"/> |
@@ -208,13 +203,7 @@ | |||
208 | containment="true"/> | 203 | containment="true"/> |
209 | <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#//Expr" | 204 | <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#//Expr" |
210 | containment="true"/> | 205 | containment="true"/> |
211 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="op" eType="#//AggregationOp"/> | 206 | <eStructuralFeatures xsi:type="ecore:EReference" name="aggregator" eType="#//AggregatorDeclaration"/> |
212 | </eClassifiers> | ||
213 | <eClassifiers xsi:type="ecore:EEnum" name="AggregationOp"> | ||
214 | <eLiterals name="SUM"/> | ||
215 | <eLiterals name="PROD" value="1"/> | ||
216 | <eLiterals name="MIN" value="2"/> | ||
217 | <eLiterals name="MAX" value="3"/> | ||
218 | </eClassifiers> | 207 | </eClassifiers> |
219 | <eClassifiers xsi:type="ecore:EClass" name="ComparisonExpr" eSuperTypes="#//BinaryExpr"> | 208 | <eClassifiers xsi:type="ecore:EClass" name="ComparisonExpr" eSuperTypes="#//BinaryExpr"> |
220 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="op" eType="#//ComparisonOp"/> | 209 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="op" eType="#//ComparisonOp"/> |
@@ -243,9 +232,6 @@ | |||
243 | <eClassifiers xsi:type="ecore:EClass" name="NegationExpr" eSuperTypes="#//QuantifiedUnaryExpr"/> | 232 | <eClassifiers xsi:type="ecore:EClass" name="NegationExpr" eSuperTypes="#//QuantifiedUnaryExpr"/> |
244 | <eClassifiers xsi:type="ecore:EClass" name="CountExpr" eSuperTypes="#//QuantifiedUnaryExpr"/> | 233 | <eClassifiers xsi:type="ecore:EClass" name="CountExpr" eSuperTypes="#//QuantifiedUnaryExpr"/> |
245 | <eClassifiers xsi:type="ecore:EClass" name="Relation" abstract="true" eSuperTypes="#//NamedElement"/> | 234 | <eClassifiers xsi:type="ecore:EClass" name="Relation" abstract="true" eSuperTypes="#//NamedElement"/> |
246 | <eClassifiers xsi:type="ecore:EClass" name="ModalExpr" eSuperTypes="#//UnaryExpr"> | ||
247 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="modality" eType="#//Modality"/> | ||
248 | </eClassifiers> | ||
249 | <eClassifiers xsi:type="ecore:EClass" name="RangeExpr" eSuperTypes="#//BinaryExpr"/> | 235 | <eClassifiers xsi:type="ecore:EClass" name="RangeExpr" eSuperTypes="#//BinaryExpr"/> |
250 | <eClassifiers xsi:type="ecore:EClass" name="LogicConstant" eSuperTypes="#//Constant"> | 236 | <eClassifiers xsi:type="ecore:EClass" name="LogicConstant" eSuperTypes="#//Constant"> |
251 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="logicValue" eType="#//LogicValue"/> | 237 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="logicValue" eType="#//LogicValue"/> |
@@ -276,4 +262,6 @@ | |||
276 | <eStructuralFeatures xsi:type="ecore:EReference" name="targetType" eType="#//Relation"/> | 262 | <eStructuralFeatures xsi:type="ecore:EReference" name="targetType" eType="#//Relation"/> |
277 | </eClassifiers> | 263 | </eClassifiers> |
278 | <eClassifiers xsi:type="ecore:EClass" name="AssignmentExpr" eSuperTypes="#//BinaryExpr"/> | 264 | <eClassifiers xsi:type="ecore:EClass" name="AssignmentExpr" eSuperTypes="#//BinaryExpr"/> |
265 | <eClassifiers xsi:type="ecore:EClass" name="InfiniteConstant" eSuperTypes="#//Constant"/> | ||
266 | <eClassifiers xsi:type="ecore:EClass" name="AggregatorDeclaration" eSuperTypes="#//Statement #//NamedElement"/> | ||
279 | </ecore:EPackage> | 267 | </ecore:EPackage> |
diff --git a/subprojects/language-model/src/main/resources/model/problem.genmodel b/subprojects/language-model/src/main/resources/model/problem.genmodel index 927ec609..2a1d8522 100644 --- a/subprojects/language-model/src/main/resources/model/problem.genmodel +++ b/subprojects/language-model/src/main/resources/model/problem.genmodel | |||
@@ -16,12 +16,6 @@ | |||
16 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//LogicValue/UNKNOWN"/> | 16 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//LogicValue/UNKNOWN"/> |
17 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//LogicValue/ERROR"/> | 17 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//LogicValue/ERROR"/> |
18 | </genEnums> | 18 | </genEnums> |
19 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//Modality"> | ||
20 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//Modality/DEFAULT"/> | ||
21 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//Modality/MAY"/> | ||
22 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//Modality/MUST"/> | ||
23 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//Modality/CURRENT"/> | ||
24 | </genEnums> | ||
25 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//ComparisonOp"> | 19 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//ComparisonOp"> |
26 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/LESS"/> | 20 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/LESS"/> |
27 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/LESS_EQ"/> | 21 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/LESS_EQ"/> |
@@ -30,10 +24,8 @@ | |||
30 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/EQ"/> | 24 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/EQ"/> |
31 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/NOT_EQ"/> | 25 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/NOT_EQ"/> |
32 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/IN"/> | 26 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/IN"/> |
33 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/SUBSUMES"/> | 27 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/NODE_EQ"/> |
34 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/SUBSUMED_BY"/> | 28 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/NODE_NOT_EQ"/> |
35 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/ABS_EQ"/> | ||
36 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/ABS_NOT_EQ"/> | ||
37 | </genEnums> | 29 | </genEnums> |
38 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//ReferenceKind"> | 30 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//ReferenceKind"> |
39 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ReferenceKind/DEFAULT"/> | 31 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ReferenceKind/DEFAULT"/> |
@@ -51,12 +43,9 @@ | |||
51 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/MUL"/> | 43 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/MUL"/> |
52 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/DIV"/> | 44 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/DIV"/> |
53 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/POW"/> | 45 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/POW"/> |
54 | </genEnums> | 46 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/AND"/> |
55 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//AggregationOp"> | 47 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/OR"/> |
56 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//AggregationOp/SUM"/> | 48 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/XOR"/> |
57 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//AggregationOp/PROD"/> | ||
58 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//AggregationOp/MIN"/> | ||
59 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//AggregationOp/MAX"/> | ||
60 | </genEnums> | 49 | </genEnums> |
61 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//ModuleKind"> | 50 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//ModuleKind"> |
62 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ModuleKind/PROBLEM"/> | 51 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ModuleKind/PROBLEM"/> |
@@ -200,7 +189,7 @@ | |||
200 | <genClasses ecoreClass="problem.ecore#//AggregationExpr"> | 189 | <genClasses ecoreClass="problem.ecore#//AggregationExpr"> |
201 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//AggregationExpr/value"/> | 190 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//AggregationExpr/value"/> |
202 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//AggregationExpr/condition"/> | 191 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//AggregationExpr/condition"/> |
203 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//AggregationExpr/op"/> | 192 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//AggregationExpr/aggregator"/> |
204 | </genClasses> | 193 | </genClasses> |
205 | <genClasses ecoreClass="problem.ecore#//ComparisonExpr"> | 194 | <genClasses ecoreClass="problem.ecore#//ComparisonExpr"> |
206 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//ComparisonExpr/op"/> | 195 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//ComparisonExpr/op"/> |
@@ -224,9 +213,6 @@ | |||
224 | <genClasses ecoreClass="problem.ecore#//NegationExpr"/> | 213 | <genClasses ecoreClass="problem.ecore#//NegationExpr"/> |
225 | <genClasses ecoreClass="problem.ecore#//CountExpr"/> | 214 | <genClasses ecoreClass="problem.ecore#//CountExpr"/> |
226 | <genClasses ecoreClass="problem.ecore#//Relation"/> | 215 | <genClasses ecoreClass="problem.ecore#//Relation"/> |
227 | <genClasses ecoreClass="problem.ecore#//ModalExpr"> | ||
228 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//ModalExpr/modality"/> | ||
229 | </genClasses> | ||
230 | <genClasses ecoreClass="problem.ecore#//RangeExpr"/> | 216 | <genClasses ecoreClass="problem.ecore#//RangeExpr"/> |
231 | <genClasses ecoreClass="problem.ecore#//LogicConstant"> | 217 | <genClasses ecoreClass="problem.ecore#//LogicConstant"> |
232 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//LogicConstant/logicValue"/> | 218 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//LogicConstant/logicValue"/> |
@@ -244,5 +230,7 @@ | |||
244 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//CastExpr/targetType"/> | 230 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//CastExpr/targetType"/> |
245 | </genClasses> | 231 | </genClasses> |
246 | <genClasses ecoreClass="problem.ecore#//AssignmentExpr"/> | 232 | <genClasses ecoreClass="problem.ecore#//AssignmentExpr"/> |
233 | <genClasses ecoreClass="problem.ecore#//InfiniteConstant"/> | ||
234 | <genClasses ecoreClass="problem.ecore#//AggregatorDeclaration"/> | ||
247 | </genPackages> | 235 | </genPackages> |
248 | </genmodel:GenModel> | 236 | </genmodel:GenModel> |