Xtext语法更抽象的类实例化

时间:2018-11-25 08:37:50

标签: dsl xtext

我正在使用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; 

但是我看到一个错误:类可能不是它本身的超类型。我如何提供这样的功能?

0 个答案:

没有答案