Generalization of Numbers [message #1767023] |
Thu, 29 June 2017 15:18  |
Marco Ullrich Messages: 14 Registered: December 2016 Location: Bayreuth |
Junior Member |
|
|
Hello everyone,
I'm working on a programming language for beginners and want to generalize integers and floatingpoint numbers to one datatype (instead of Integer and Double) so beginners don't have to bother with multiple types for numbers.
I decided to use java.lang.Numbers for this purpose (because it already generalizes java.lang.Integer and java.lang.Double).
I used https://koehnlein.blogspot.de/2011/07/extending-xbase.html and https://eclipse.org/Xtext/documentation/203_builddsl.html for a first approach.
But it seems that my extension methods for Number are ignored, because the operators are not working.
Here a minimal example, using the domainmodel dsl:
entity e1{
op op2 ():Number {
var Number n = 1
n = 1 - 1 //Doesnt work: "Couldn't resolve reference to JvmIdentifiableElement '-'."
n = (1 as Double) - 1 // Works, bacause of cast, uses DoubleExtensions
return 1 // Works
}
}
These are my customisations so far:
All XNumberLiteral are of type Number
class MyTypeComputer extends XbaseTypeComputer {
override void _computeTypes(XNumberLiteral object, ITypeComputationState state) {
val LightweightTypeReference result = getTypeForName(typeof(Number), state);
state.acceptActualType(result);
}
}
For the first approach, the compiler simply print out the XNumberLiteral -value
class MyCompiler extends XbaseCompiler {
override _toJavaExpression(XNumberLiteral expr, ITreeAppendable b) {
b.append(expr.value)
}
}
Providing some operators for the type Number
class NumberExtensions {
def public static Number operator_minus(Number x, Number y) {
return x - y;
}
//.....
}
Including the NumberExtensions
class MyImplicitlyImportedFeatures extends ImplicitlyImportedFeatures {
override protected getExtensionClasses() {
(super.getExtensionClasses() + #[NumberExtensions])
.toList
}
}
Thanks in advance for your help and best regards,
Marco
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.04773 seconds