Comments (2)
My first stab at implementing it reveals a few problems, the biggest one being that I would have to change the analyses to always keep track of the whole inheritance hierarchy of a clafer to determine valid nesting and generate correct output. Currently, the code generated for left
is incorrect:
one sig c0_CptHook extends c0_Person
{ r_c0_left : one c0_left
, r_c0_right : one c0_right }
{ r_c0_right in r_c0_Hand }
The correct code should be
one sig c0_CptHook extends c0_Person
{ r_c0_left : one c0_left
, r_c0_right : one c0_right }
{ r_c0_left in r_c0_Hand
r_c0_right in r_c0_Hand }
The reason that the constraint r_c0_left in r_c0_Hand
is missing now is because in order to generate it one must go up to Person
, which defines Hand
but we only go to Hook
, which does not have a parent.
There's onc trick we could do: always interpret abstract top-level clafers which extend nested abstract clafers as actually their siblings. So, our example would actually be represented in IR as
abstract Person
abstract Hand
abstract Hook : Hand
that is the real semantics of allowing to define abstract Hook : Hand
as a top-level. Doing so, will not require any changes to code analysis nor code generation. It's a simple transformation that can be done after unique ids are generated. The positive is that desugared clafer will show that semantics.
from clafer.
Implementation. We execute the transformation in two phases:
- in
ResolverInheritance.resolveNClafer
, we change theparentUID
of a top-level abstract clafers to point to the parent of theirsuperClafer
. This makes these clafers logically siblings of their super. - in
ResolverInheritance.relocateTopLevelAbstractToParents
, we physically move the top-level clafers to their respecitive parents. This makes these clafers physically siblings of their super.
from clafer.
Related Issues (20)
- Incorrect neutral element for missing values
- The help message of claferIG does not explain how to change global scope HOT 1
- Precedence of ternary conditional expression in Clafer HOT 2
- Optimize away navigation paths to clafers with global cardinality <= 1
- Choco output should reflect the IR for group cardinality inheritance HOT 6
- Compiler enters infinite loop on inheritance by same type HOT 1
- Cannot inherit from a nested abstract clafer which itself has a superclafer
- add support for min and max to Alloy generator
- add backend compatibility information to the CheatSheet HOT 1
- Allow inheritance from concrete clafers
- Fresh install of 0.4.3 from Hackage fails HOT 2
- Support `parent` of top-level abstract clafers HOT 1
- Allow navigation paths containing <:
- Incorrect ambiguous name error
- help debugging the "dref problem"
- incorrect choco output for reference to a constant HOT 2
- allow self-explanatory parent expression HOT 1
- desugar enum to abstract final clafer in dynamic model
- Link broken for binary distribution? HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from clafer.