问题标签 [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.
java - 如何在我的 Android 项目中使用 Eclipse 的新 Xtend 语言?
我想用 Xtend 语言编写 Java 类(仅仅是因为它更简洁),并将它编译回 Java 类,我可以在我的 Java 项目中使用这些类。就像咖啡脚本一样。我怎样才能做到这一点?
我尝试像创建一个新类一样创建一个 Xtend 文件,但是我收到此错误:
'org.eclipse.xtext.xbase.lib'
在类路径中找不到强制库包。
这会禁用智能感知(自动完成)。此外,即使我确实可以正常工作,我怎样才能将它编译为 Java 类?
antlr - 编写没有语法文件的自定义 Xtext/ANTLR 词法分析器
我正在为 CoffeeScript 编写一个 Eclipse/Xtext 插件,我意识到我可能需要手动为它编写一个词法分析器。CoffeeScript 解析器还使用手写词法分析器来处理语法中的缩进和其他技巧。
Xtext 生成一个扩展类,而扩展类org.eclipse.xtext.parser.antlr.Lexer
又扩展了org.antlr.runtime.Lexer
。所以我想我会延长它。我可以看到两种方法来做到这一点
- 覆盖
mTokens()
。这是由生成的代码完成的,改变了内部状态。 - 覆盖
nextToken()
这似乎是一种自然的方法,但是我必须跟踪内部状态。
我找不到任何示例如何在没有语法文件的情况下为 ANTLR 编写一个简单的词法分析器。所以最简单的答案是指向一个的指针。
Xtext的答案:具有重要/语义空白的语言的语法是指todotext,它通过更改底层输入流中的标记来处理缩进问题。我不想那样做,因为处理咖啡脚本语法的其他技巧会很困难。
更新:
同时我意识到我的问题部分是特定于 Xtext 的。
eclipse - 如何限制一条规则在 XTEXT 中重复的次数?
我的语言有某些关键字,它们只接受特定长度范围的值(例如,5 到 10 个十进制数)。此 ID 正确:
这是不正确的:
我有一个规则;
如何限制INT可以重复的次数?如果它是一种更像正则表达式的语法,这会容易得多
eclipse - 如何为我的 Xtext DSL 包含没有扩展名的文件?
默认情况下,Xtext 允许在创建新项目时为 DSL 文件指定单个扩展名。但是,可以为单个 DSL 添加更多扩展,如Xtext FAQ中所述。但我无法让它处理没有扩展名的文件。
一个典型的例子是Make构建系统的 makefile。可以使用Makefile
,GNUmakefile
和*.mk
名称,Eclipse 将为此类文件打开同一个编辑器。
我想让 Xtext 识别*.mydsl
文件和名为Mydsl
.
我试图添加
属性到我的 UI 项目中扩展点的editor
节点。这使 Eclipse 能够在适当的编辑器中打开文件。但是当我尝试从任何其他文件中引用定义的元素时,Xtext 不会索引这些文件并报告链接错误。org.eclipse.ui.editors
plugin.xml
Mydsl
Mydsl
有没有办法让 Xtext 处理具有固定名称但没有扩展名的源文件以及常规文件?
UPD。1
根据塞巴斯蒂安的回答,我尝试plugin.xml
在主项目中指定自定义内容类型:
并将其绑定如下:
但我仍然得到如上所述的链接错误。我还在所有方法中添加了断点MyDslResourceServiceProvider
,它似乎甚至没有被实例化或以某种方式调用。
我还尝试将这些扩展移动到 UI 项目,但也没有任何效果。
UPD。2
最后,我做到了。简而言之,让事情顺利进行的步骤:
org.eclipse.core.contenttype.contentTypes
使用扩展点定义新的内容类型org.eclipse.emf.ecore.resource.impl.PlatformContentHandlerImpl
通过扩展类和覆盖方法来创建内容处理程序,当且仅当参数不是时才canHandle(URI)
返回true
null
- 注册它
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.IResourceFactory
为org.eclipse.emf.ecore.content_parser
,再次使用扩展工厂 - 将内容类型绑定添加到
org.eclipse.ui.editors
,org.eclipse.compare.contentViewers
和org.eclipse.compare.contentMergeViewers
- 根据您是否需要旧的扩展绑定,删除
org.eclipse.emf.ecore.extension_parser
和org.eclipse.xtext.extension_resourceServiceProvider
扩展
我的案例的变更集(应用于新项目)可以在这里找到。
eclipse - Mwe2Launcher - 找不到模块
我不断得到:
尽管 x.mwe2 文件存在,但错误。我已经为项目启用了 xtext 特性并添加了相关模块。
这是 .mwe2 文件:
可能是什么问题?(一个名为 src-gen 的文件夹已经存在)
java - DSL - groovy 与 xtext
我精通Java。我很少有从 DSL 中受益的用例。在开始构建它们之前,我想听取已经构建它们的人的意见。有人可以帮助我了解在 Groovy 和 xtext 中编写 DSL 的优缺点。
eclipse - 如何将 log4j 配置传递给 Eclipse IDE 本身?
我不是想为 Eclipse 项目配置 log4j,而是为 IDE 本身配置!!
使用基于 Xtext 的插件时,我在控制台中看到此警告:
如何为 IDE 本身提供 log4j 配置?
我尝试添加-Dlog4j.configuration=.../log4j.properties
到eclipse.ini
. 该条目在 About/Configuration 中可见,并且文件路径正确但未被拾取。
eclipse-plugin - 无法在基于 Xtext 的插件中打开工作区外部文件
我正在使用 Xtext 框架开发一个支持我的 DSL 的 Eclipse 插件。当我尝试在我的系统上打开一个具有匹配文件扩展名的文件时.gf
——但它不在我的工作区中——我得到以下信息:
我试图以编程方式执行此操作,但是当我使用File UI 菜单打开时,我得到了完全相同的错误。有任何想法吗?
antlr - coffeescript 表达式的左分解语法
我正在为咖啡脚本语法编写 Antlr/Xtext 解析器。现在才刚刚开始,我只是移动了原始语法的一个子集,而且我被表达式所困。这是可怕的“规则表达式具有非 LL(*) 决策”错误。我在这里找到了一些相关的问题,Help with left factoring a grammar to remove left recursion和ANTLR 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
显示了我的洞察力。
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 约定。
至少对于简单的情况,是否有一种工具可以自动进行这种转换?如果没有,是否有更完整的此类所需修改的清单?