问题标签 [xtext]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
3933 浏览

java - 如何在我的 Android 项目中使用 Eclipse 的新 Xtend 语言?

我想用 Xtend 语言编写 Java 类(仅仅是因为它更简洁),并将它编译回 Java 类,我可以在我的 Java 项目中使用这些类。就像咖啡脚本一样。我怎样才能做到这一点?

我尝试像创建一个新类一样创建一个 Xtend 文件,但是我收到此错误:

'org.eclipse.xtext.xbase.lib'在类路径中找不到强制库包。

这会禁用智能感知(自动完成)。此外,即使我确实可以正常工作,我怎样才能将它编译为 Java 类?

0 投票
2 回答
2605 浏览

antlr - 编写没有语法文件的自定义 Xtext/ANTLR 词法分析器

我正在为 CoffeeScript 编写一个 Eclipse/Xtext 插件,我意识到我可能需要手动为它编写一个词法分析器。CoffeeScript 解析器还使用手写词法分析器来处理语法中的缩进和其他技巧。

Xtext 生成一个扩展类,而扩展类org.eclipse.xtext.parser.antlr.Lexer又扩展了org.antlr.runtime.Lexer。所以我想我会延长它。我可以看到两种方法来做到这一点

  • 覆盖mTokens()。这是由生成的代码完成的,改变了内部状态。
  • 覆盖nextToken()这似乎是一种自然的方法,但是我必须跟踪内部状态。

我找不到任何示例如何在没有语法文件的情况下为 ANTLR 编写一个简单的词法分析器。所以最简单的答案是指向一个的指针。

Xtext的答案:具有重要/语义空白的语言的语法是指todotext,它通过更改底层输入流中的标记来处理缩进问题。我不想那样做,因为处理咖啡脚本语法的其他技巧会很困难。

更新:

同时我意识到我的问题部分是特定于 Xtext 的。

0 投票
1 回答
276 浏览

eclipse - 如何限制一条规则在 XTEXT 中重复的次数?

我的语言有某些关键字,它们只接受特定长度范围的值(例如,5 到 10 个十进制数)。此 ID 正确:

这是不正确的:

我有一个规则;

如何限制INT可以重复的次数?如果它是一种更像正则表达式的语法,这会容易得多

0 投票
1 回答
1541 浏览

eclipse - 如何为我的 Xtext DSL 包含没有扩展名的文件?

默认情况下,Xtext 允许在创建新项目时为 DSL 文件指定单个扩展名。但是,可以为单个 DSL 添加更多扩展,如Xtext FAQ中所述。但我无法让它处理没有扩展名的文件。

一个典型的例子是Make构建系统的 makefile。可以使用Makefile,GNUmakefile*.mk名称,Eclipse 将为此类文件打开同一个编辑器。

我想让 Xtext 识别*.mydsl文件和名为Mydsl.

我试图添加

属性到我的 UI 项目中扩展点的editor节点。这使 Eclipse 能够在适当的编辑器中打开文件。但是当我尝试从任何其他文件中引用定义的元素时,Xtext 不会索引这些文件并报告链接错误。org.eclipse.ui.editorsplugin.xmlMydslMydsl

有没有办法让 Xtext 处理具有固定名称但没有扩展名的源文件以及常规文件?

UPD。1

根据塞巴斯蒂安的回答,我尝试plugin.xml在主项目中指定自定义内容类型:

并将其绑定如下:

但我仍然得到如上所述的链接错误。我还在所有方法中添加了断点MyDslResourceServiceProvider,它似乎甚至没有被实例化或以某种方式调用。

我还尝试将这些扩展移动到 UI 项目,但也没有任何效果。

UPD。2

最后,我做到了。简而言之,让事情顺利进行的步骤:

  • org.eclipse.core.contenttype.contentTypes使用扩展点定义新的内容类型
  • org.eclipse.emf.ecore.resource.impl.PlatformContentHandlerImpl通过扩展类和覆盖方法来创建内容处理程序,当且仅当参数不是时才canHandle(URI)返回truenull
  • 注册它org.eclipse.emf.ecore.content_handler
  • 创建一个始终canHandle(URI)返回的新资源服务提供者。true可以扩展org.eclipse.xtext.resource.impl.DefaultResourceServiceProvider和覆盖相应的方法
  • 在UI项目中绑定它org.eclipse.xtext.content_resourceServiceProvider,别忘了在类名前指定一个扩展工厂
  • 在 UI 项目中注册org.eclipse.xtext.resource.IResourceFactoryorg.eclipse.emf.ecore.content_parser,再次使用扩展工厂
  • 将内容类型绑定添加到org.eclipse.ui.editors,org.eclipse.compare.contentViewersorg.eclipse.compare.contentMergeViewers
  • 根据您是否需要旧的扩展绑定,删除org.eclipse.emf.ecore.extension_parserorg.eclipse.xtext.extension_resourceServiceProvider扩展

我的案例的变更集(应用于新项目)可以在这里找到。

0 投票
3 回答
1365 浏览

eclipse - Mwe2Launcher - 找不到模块

我不断得到:

尽管 x.mwe2 文件存在,但错误。我已经为项目启用了 xtext 特性并添加了相关模块。

这是 .mwe2 文件:

可能是什么问题?(一个名为 src-gen 的文件夹已经存在)

0 投票
0 回答
945 浏览

java - DSL - groovy 与 xtext

我精通Java。我很少有从 DSL 中受益的用例。在开始构建它们之前,我想听取已经构建它们的人的意见。有人可以帮助我了解在 Groovy 和 xtext 中编写 DSL 的优缺点。

0 投票
2 回答
3500 浏览

eclipse - 如何将 log4j 配置传递给 Eclipse IDE 本身?

我不是想为 Eclipse 项目配置 log4j,而是为 IDE 本身配置!!

使用基于 Xtext 的插件时,我在控制台中看到此警告:

如何为 IDE 本身提供 log4j 配置?

我尝试添加-Dlog4j.configuration=.../log4j.propertieseclipse.ini. 该条目在 About/Configuration 中可见,并且文件路径正确但未被拾取。

0 投票
1 回答
675 浏览

eclipse-plugin - 无法在基于 Xtext 的插件中打开工作区外部文件

我正在使用 Xtext 框架开发一个支持我的 DSL 的 Eclipse 插件。当我尝试在我的系统上打开一个具有匹配文件扩展名的文件时.gf——但它不在我的工作区中——我得到以下信息:

我试图以编程方式执行此操作,但是当我使用File UI 菜单打开时,我得到了完全相同的错误。有任何想法吗?

0 投票
1 回答
1422 浏览

antlr - coffeescript 表达式的左分解语法

我正在为咖啡脚本语法编写 Antlr/Xtext 解析器。现在才刚刚开始,我只是移动了原始语法的一个子集,而且我被表达式所困。这是可怕的“规则表达式具有非 LL(*) 决策”错误。我在这里找到了一些相关的问题,Help with left factoring a grammar to remove left recursionANTLR Grammar for expressions。我还尝试了 How to remove global backtracking from your grammar,但它只是演示了一个我在现实生活中无法使用的非常简单的案例。关于ANTLR Grammar Tip: LL() and Left Factoring的帖子给了我更多的见解,但我仍然无法掌握。

我的问题是如何修复以下语法(对不起,我无法简化它并仍然保留错误)。我想麻烦制造者是term规则,所以我很感激对它进行本地修复,而不是改变整个事情(我试图保持接近原始语法的规则)。也欢迎指针提示如何在您的脑海中“调试”这种错误的语法。

更新:最终解决方案将使用 Xtext 和外部词法分析器,以避免处理重要空白的复杂性。这是我的 Xtext 版本的一个片段:

我的策略是首先在没有可用 AST 的情况下制作一个可以工作的 Antlr 解析器。(好吧,如果这是一种可行的方法,那么值得提出一个单独的问题。)所以我现在不关心令牌,它们被包括在内是为了使开发更容易。

我知道原始语法是LR。我不知道在变身为LL时我能离它有多近。

UPDATE2 和解决方案:我可以通过从 Bart 的回答中获得的见解来简化我的问题。这是一个有效的玩具语法,用于处理带有函数调用的简单表达式来说明它。之前的评论expression显示了我的洞察力。

0 投票
1 回答
4016 浏览

antlr - 将简单的 Antlr 语法转换为 Xtext

我想将一个非常简单的 Antlr 语法转换为 Xtext,所以没有语法谓词,也没有Xtext 不提供的 Antlr 的花哨功能。考虑这个语法

及其 Xtext 对应物

Xtext 在幕后使用 Antlr,但两种格式并不完全相同。我必须修改很多烦人(部分可以理解)的东西,包括:

  • terminal使用关键字前缀终端
  • 包括import "http://www.eclipse.org/emf/2002/Ecore" as ecore使终端工作
  • 向顶级规则添加功能,例如foo: dummy=number+
  • 请记住,规则和终端名称必须是唯一的,即使不区分大小写。
  • 或者,将规则名称的第一个字母大写以遵循 Java 约定。

至少对于简单的情况,是否有一种工具可以自动进行这种转换?如果没有,是否有更完整的此类所需修改的清单?