我正在使用Xtext进行Expression DSL,并且我希望某些类可以继承一些抽象的类。 层次结构: 表达式是由BinaryOperation,UnaryOperation,Number和Atomic扩展的抽象类。 BinaryOperation是由Add,Sub,Mul,Div,Power扩展的抽象类 UnaryOperation是由UnaryPlus,UnaryMinus和Factorial扩展的抽象类。
整个语法:
Expressions:
elements+=EvalExpr;
EvalExpr:
'eval' expression=Expression ';';
Expression: AddOrSub;
UnaryOperation:
Expression;
BinaryOperation:
Expression;
AddOrSub returns BinaryOperation:
MulOrDivOrPower (( {Add.left=current} '+' |
{Sub.left=current} '-'
) right=MulOrDivOrPower)*;
MulOrDivOrPower returns BinaryOperation:
UnaryPlusOrMinus (( {Mul.left=current} '*' |
{Div.left=current} '/' |
{Power.left=current} '^'
) right=UnaryPlusOrMinus)*;
UnaryPlusOrMinus returns UnaryOperation:
'-' {UnaryMinus} expression=Factorial | '+' {UnaryPlus} expression=Factorial | Factorial;
Factorial returns UnaryOperation:
Atomic ({Factorial.expression=current} '!')?;
Atomic returns Expression:
'(' Expression ')' | Number;
Number returns Expression:
{IntConstant} value=INT;
但是我看到一个错误:类可能不是它本身的超类型。我如何提供这样的功能?