当前位置: 首页 > 知识库问答 >
问题:

我怎么能在Xtext中生成与它写的X倾向生成器代码?

薛彭薄
2023-03-14

我在Xtext中定义了这个语法,当使用Xtend生成代码时,我希望得到编写时的选择表达式。

所以当选择表达式如x=“abc”| |(y=“pqr”

Queries:
    (query+=Query)*;
Query:
    'get' 'patient' selection = Selection ('view' view = View)? ';'
;
View:
    'examination'| 'bill' | 'illness' | 'prescription'
;
Selection:
    OrSelection | {Selection} '*'
;   
OrSelection returns Selection:
    AndSelection ({OrSelection.left=current} "||" right=AndSelection)*  
;   
AndSelection returns Selection:
    PrimarySelection ({AndSelection.left=current} "&&" right=PrimarySelection)*  
;
PrimarySelection returns Selection:
    "(" Selection ")"
| Literal
;
Literal returns Selection:
   {Literal}  attribute = Attribute '=' value = Value 
;
Attribute:
   name = ID
;
Value:
    name = STRING
;

共有1个答案

弓晔
2023-03-14

您可以使用nodemodultils获取EObjectINode,然后向节点索要其文本

NodeModelUtils.findActualNodeFor(obj).getText()

NodeModelUtils.getNode(obj).getText()

后者可能包括评论等。

 类似资料:
  • 我用Xtext写了一个DSL。我想要的是执行DSL,从中获得一些好的结果。 我编写了myDslGenerator类,在xtend中实现接口IGenerator,以生成java代码,它运行良好。 我有两个问题; 解释器和代码生成器有什么区别?不都是为了执行DSL吗? 如何编写一个解释器?有没有一步一步的教程链接?我找到了许多使用xint生成代码的教程,但找不到任何用于编写解释器的教程。 谢谢你, 萨

  • 我是Xtext和Xtend的新手,正在尝试使用Xtext文档中的Xtext教程学习Xtext。我正在使用Xtext 2.14在Java10下运行Eclipse光子。我刚开始学习扩展教程,很早就遇到了一个问题。以下是我尝试使用代码生成器的代码: 这是我的语法文件: 我的问题是Eclipse说@Inject注释有问题,它说,这是在一个Eclipse Xtext项目中根据教程中的说明生成的。 我该如何从

  • 我正在尝试使用xText和xtendbuilding与gradle创建第一个项目。 我按照xText文档中的指导创建了语法,还创建了xtend生成器。 在eclipse中,代码按预期生成到src-gen文件夹。 当我创建gradle脚本时,也遵循http://xtext.github.io/xtext-gradle-plugin/xtext-builder.html来构建我的代码,而不是在它生成的

  • 我试图理解代码生成器doGenerate如何调用。我拿了一个没有任何自定义更改的Xtext Project示例(只有问候)。由默认代码生成器看起来像这样: 运行生成的Eclipse插件并在/src中创建了新的Java项目,文件扩展名为right(src.MyDsl)。并将项目转换为xtext nature,我写了一些问候语并保存了下来。但在src gen中,我没有看到生成的文件问候语。txt。所以

  • 许多编程语言都做了这样的转变:迭代集合中的数据不再使用需要初始化变量并作为索引的 for 循环,转而使用迭代器(iterator)对象来程序化地返回集合中下一位置的项。迭代器使得集合的操作变得更容易,ECMAScript 6 也将其添加到了 JavaScript 当中。当迭代器和数组方法以及新添加的集合类型(如 set 和 map)结合之后,它就成为了高效处理数据的关键,而且该语言中很多部分都有迭

  • 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法:iter() 和 next()。 字符串,列表或元组对象都可用于创建迭代器: 实例(Python 3.0+)>>>list=[1,2,3,4] >>> it = iter(