首页 > 解决方案 > Xtext 语法更多抽象类实例化

问题描述

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

但我看到一个错误:一个类可能不是它自己的超类型。我怎样才能提供这样的功能?

标签: dslxtext

解决方案


推荐阅读