Xtext грамматика более абстрактные экземпляры классов - PullRequest
0 голосов
/ 25 ноября 2018

Я делаю DSL-выражения с использованием Xtext и хочу, чтобы некоторые классы наследовали от некоторых абстрактных.Иерархия: выражение - это абстрактный класс, расширенный с помощью 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; 

Но я 'Я вижу ошибку: класс не может быть супер типом самого себя.Как я могу предоставить такую ​​функциональность?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...