标签: xtext

Jetbrains的MPS和Eclipse Xtext之间的主要区别是什么?

我在几个项目中使用了Eclipse Xtext.我喜欢在Ecore(meta)模型上定义语法的简易性,并为你生成所有内容,包括令人敬畏的Eclipse插件编辑器,但我对基础EMF框架感到非常不舒服,所有内容都在静态字段中进行了硬连接.

最近我遇到了Jetbrains的MPS(元编程系统).它基于完全不同的哲学.虽然Xtext用于创建基于文本的DSL,为您生成解析器(并实例化那些EObject),但在MPS创建的语言中,可直接编辑基础模型结构.到目前为止,我明白了.

有没有人使用这两种DSL工具来指出在使用它们方面的主要差异,预期用例和受众,复杂性,学习曲线(说实话,开始使用Xtext应该对EMF的内容有很多了解) ,代码生成等?

dsl xtext mps eclipse-emf

50
推荐指数
3
解决办法
9382
查看次数

Xtext可以用于解析通用编程语言吗?

我目前正在开发一种基于代理的通用编程语言(它的语法将受到Java的启发,我们也使用这种语言的对象).

自项目开始以来,我们怀疑使用ANTLRXtext的事实.那时我们发现Xtext正在实现ANTLR功能的一个子集.所以我们决定在我们的语言中使用ANLTR,失去了为我们的语言免费提供一个完整的Eclipse编辑器的可能性(这是Xtext提供的一个很好的功能).

然而,据我所知,今年夏天Xtext项目向前迈出了大步.引用链接:

Xtext有什么限制?

Sven:您可以使用Xtext实现几乎任何类型的编程语言或DSL.有一个例外,那就是如果你需要使用所谓的"语义谓词",这是一个相当复杂的事情我不认为值得在这里解释.很少有语言真正需要这个概念.然而,突出的例子是C/C++.我们想在下一个版本中查看该主题.

Xtext文档中也强调了这一点:

什么是Xtext?无论您是想创建一个小的文本域特定语言(DSL),还是想要实现一个完整的通用编程语言.使用Xtext,您可以快速创建自己的语言.此外,如果您已经拥有现有语言但缺乏合适的工具支持,则可以使用Xtext创建复杂的基于Eclipse的开发环境,从而在极短的时间内提供现代Java IDE所知的编辑体验.我们称Xtext为语言开发框架.

如果Xtext已经摆脱了过去的限制,为什么仍然无法为最着名的编程语言(Java,C#等)找到复杂的Xtext语法?

在ANTLR网站上,您可以找到大量这样的语法示例,对于Xtext而言,我能够找到的唯一示例是文档中报告的示例.也许Xtext仍然不成熟,无法用于实现通用编程语言?我有点担心这个...我不会开始在Xtext中重写语法,然后才能认识到它不适合那个.

parsing antlr xtext antlr3

19
推荐指数
1
解决办法
7249
查看次数

XText没有提供ANTLR的哪些功能?

我刚刚遇到了非常好的工具Xtext来创建DSL以及IDE进行编辑.我在网上做了一些搜索,发现人们说它没有提供ANTLR的所有功能.我使用ANTLR作为我的解析器生成器.

我甚至不确定ANTLR的哪些功能我需要为我的语言编写完整的解析器,但ANTLR已经存在了很长时间,并且可能支持比Xtext更多的功能.

任何人都可以举一些不能在Xtext语法中指定的例子吗?

eclipse dsl antlr parser-generator xtext

18
推荐指数
1
解决办法
4819
查看次数

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

我想用Xtend语言编写Java类(仅仅因为它更简洁),并将它编译回Java类,我可以在Java项目中使用它们.就像coffeescript.我怎样才能做到这一点?

我尝试创建一个Xtend文件,就像我对新类一样,但是我得到了这个错误:

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

这会禁用智能感知(自动完成).而且,即使我确实能够工作,我怎样才能将它编译成Java类?

java eclipse android xtext xtend

17
推荐指数
2
解决办法
3805
查看次数

Xtext和MPS等不同语言工作台工具的优缺点?

有没有人有使用Xtext,Spoofax和JetBrains的MPS等语言工作台工具的经验?我想尝试一下,并且很难找到不同工具的良好比较.各自的优点和缺点是什么?

我正在寻找构建生成python代码的DSL,所以我特别感兴趣的是听到那些使用python这些工具之一的人(这三个看起来都非常注重Java ......为什么会这样?).DLS主要供我自己使用,因此我不太关心构建一个非常漂亮的IDE,而不是关于它是KISS来定义语法和编写代码生成器.对DLS进行类型检查/执行静态分析的能力也非常酷.

我有点害怕走远一条路,撞墙,意识到我的所有代码都采用了无法移植到其他任何地方的格式 - 这些工具是否存在风险?特别是MPS看起来有点可怕,因为据我所知,你并没有真正生成基于文本的语法,而是为AST构建专门的编辑器.

dsl dsl-tools xtext mps workbench

16
推荐指数
3
解决办法
5234
查看次数

ClassNotFoundException:org.eclipse.xtext.junit_2.4.3.v201309030823找不到junit.framework.TestCase

我对这个错误感到困惑:

java.lang.NoClassDefFoundError: junit/framework/TestCase
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClassHoldingLock(ClasspathManager.java:638)
...
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:693)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:429)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.main(RemotePluginTestRunner.java:62)
    at org.eclipse.pde.internal.junit.runtime.CoreTestApplication.run(CoreTestApplication.java:23)
...
Caused by: java.lang.ClassNotFoundException: junit.framework.TestCase cannot be found by org.eclipse.xtext.junit_2.4.3.v201309030823
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 78 more
Run Code Online (Sandbox Code Playgroud)

当我将Xtext DSL的测试作为插件测试运行时(例如,在内部启动新的Eclipse平台时)会发生异常.这我的任何代码执行之前发生.

当我查看插件依赖项时,我可以看到它org.junit_4.11.0.v201303080030.jar在类路径上,我也看到了/.../workspace/.metadata/.plugins/org.eclipse.pde.core/.external_libraries/org.junit_4.11.0.v201303080030/junit.jar

所以OSGis绝对应该能够解决这种依赖.

Xtext 2.4.3是否可以与JUnit 4.11一起使用,还是必须将Eclipse安装降级为JUnit 4.10?

java eclipse junit4 xtext

14
推荐指数
1
解决办法
3万
查看次数

java.lang.OutOfMemoryError:Eclipse Helios中的PermGen空间

我在eclipse中创建了一个Xtext插件.每次我通过上下文菜单将其作为"Eclipse应用程序"启动时,我会在新的Eclipse实例崩溃之前获得一些优势.我切换回原始实例并在控制台窗口中看到

Root exception:
java.lang.OutOfMemoryError: PermGen space
Run Code Online (Sandbox Code Playgroud)

我回顾了论坛中的一些解决方案,但与tomcat有很多关系.有人可以给我一些建议,我该如何解决这个问题?我正在使用Eclipse helios.我的'eclipse.ini'文件看起来像:

-startup
plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101222
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx384m
Run Code Online (Sandbox Code Playgroud)

我运行eclipse的机器只有大约4GB的RAM

================================================== ====================

更新:我希望这对任何可能遇到同样问题的人都有帮助.我按照这里的说明尝试 -XX:MaxPermSize=256m在我的eclipse.ini文件中设置.这没用.最后,我不得不卸载java sdk(我使用的是最新的jdk1.6.0_26),我从这里安装了旧版本(jdk1.6.0_20).然后-XX:MaxPermSize=256m 我在我的eclipse.ini中设置它现在看起来如下:

-startup
plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101222
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.defaultAction
openFile
-vmargs
-Xms40m
-Xmx1024m
-XX:MaxPermSize=256m
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助处于相同情况的人.当我启动我的Xtext插件时,就会发生这个问题.

eclipse out-of-memory xtext helios

12
推荐指数
1
解决办法
2万
查看次数

Xtext:具有重要/语义空白的语言的语法

如何使用Xtext解析具有语义空白的语言?我正在尝试为CoffeeScript编写语法,但我找不到任何好的文档.

eclipse grammar parsing xtext coffeescript

11
推荐指数
2
解决办法
3705
查看次数

是否可以在没有eclipse的情况下使用Xtext?

我有一个DSL(用ANTLR实现),我需要编写内容辅助/自动完成编辑器.我已将我的语法原型移植到Xtext,我对它生成的编辑器的质量非常满意.

不幸的是,我不能使用Eclipse作为我的编辑器.相反,我想使用Xtext语法生成一些我可以在Eclipse之外重用的工件.从我所看到的,我需要的最小工件集是:

  • EMF模型,
  • 解析器,
  • *ProposalProviders,和
  • 所需的库.

有没有人试图在Eclipse之外使用Xtext?它依赖多少外部库?

谢谢!

antlr xtext

11
推荐指数
2
解决办法
2765
查看次数

Unparse AST <O(exp(n))?

摘要问题描述:

我看到它的方式,unparsing意味着从AST创建一个令牌流,当再次解析时产生一个相等的AST.

所以 parse(unparse(AST)) = AST持有.

这等于找到一个有效的解析树,它将生成相同的AST.

该语言由使用eBNF变体的无上下文 S属性语法描述.

因此,解析者必须通过所有语法约束所包含的遍历节点找到有效的"路径".这基本上意味着找到AST节点到语法生成规则的有效分配.这通常是一个约束满足问题(CSP),可以通过回溯 O(exp(n))来解决,如解析.

幸运的是,对于解析,这可以使用GLR(或更好地限制语法)在O(n³)中完成.因为AST结构非常接近语法生成规则结构,所以我真的很惊讶看到运行时比解析更糟糕的实现:XText使用ANTLR进行解析和回溯以进行解析.

问题

  1. 是一个上下文无关的S属性语法解析器和解析器需要共享的所有东西,还是有进一步的约束,例如解析技术/解析器实现?
  2. 我觉得这个问题一般不是O(exp(n)) - 有些天才可以帮助我吗?
  3. 这基本上是一个上下文敏感的语法吗?

例1:

Area    returns AnyObject   -> Pedestrian | Highway
Highway returns AnyObject   -> "Foo" Car
Pedestrian  returns AnyObject   -> "Bar" Bike
Car     returns Vehicle     -> anyObjectInstance.name="Car"
Bike    returns Vehicle     -> anyObjectInstance.name="Bike" 
Run Code Online (Sandbox Code Playgroud)

所以,如果我有一个AST包含

AnyObject -> AnyObject -> Vehicle [name="Car"] 我知道root可以是Area,我可以解决它

Area    -> Highway  -> Car
Run Code Online (Sandbox Code Playgroud)

因此(公路|行人)决定取决于子树决策.当一片叶子乍一看是几种类型中的一种时,问题会变得更糟,但必须是特定的一种,以便稍后形成有效路径. …

parsing antlr abstract-syntax-tree xtext constraint-satisfaction

11
推荐指数
1
解决办法
572
查看次数