aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language-model/src/main
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2024-03-05 22:01:10 +0100
committerLibravatar Kristóf Marussy <kristof@marussy.com>2024-04-07 14:55:46 +0200
commitc14d8efd509f834b80573bc0339bb990698b265c (patch)
treedc3ca21785ea17bc75a861f373ee69ec64d6e97f /subprojects/language-model/src/main
parentfeat(language): validate assignment expressions (diff)
downloadrefinery-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')
-rw-r--r--subprojects/language-model/src/main/resources/model/problem.ecore28
-rw-r--r--subprojects/language-model/src/main/resources/model/problem.genmodel28
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>