dsl - 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;
但我看到一个错误:一个类可能不是它自己的超类型。我怎样才能提供这样的功能?
解决方案
推荐阅读
- html - 带有黑色覆盖的 Img html 标签?
- javascript - React useState 的 setter 是否会过时?
- python - 在 Kivy (Python) 中跨屏幕更新标签 - .kv 和 .py 文件与 ScreenManager 之间的交互(缺乏)问题
- scala - Spark中多个数据帧上的大量转换
- python - 深度学习 TensorFlow 中的文本生成
- python - 模型中的时期获得准确性的最佳方法是什么
- spring-boot - [请求处理失败;嵌套异常是 java.lang.IllegalStateException: 没有可用的实例
- javascript - 编码新手,我不知道为什么我的 javascript 按钮无法正常工作?
- c++ - 编译时显示未定义的引用
- xamarin - AdMob 横幅不会显示,测试广告没有错误消息并且无法加载:3 与真实广告