【问题标题】:Error after generating model生成模型后出错
【发布时间】:2015-08-01 12:45:48
【问题描述】:

我想学习 xtext,多年来我学习了 xpand 和 xtend 并且工作正常,但 xtext 似乎取代了其他两者。 xtext 方式对我来说看起来不错。

一开始我阅读以下教程:http://www.eclipse.org/Xtext/documentation/101_five_minutes.html,包括“15 分钟教程”和“15 分钟教程 - 扩展”等。所以我创建了一个简单的“模型”

grammar org.bs.test.Test with org.eclipse.xtext.common.Terminals

generate Test "http://www.bs.org/test/Test"

Test:
    main=TMain;

TMain:
    'main' name=ID 
    'done';

按以下方式生成:“GenerateTest.mwe2”> 右键单击​​ > 'Run As' → 'MWE2 Workflow'。

然后制作了项目的副本。这已经是我第二次或第三次尝试找出我做错了什么。

现在我在模型中更改了以下行:“main=TMain;”到“main=TMain?;”。然后我再次使用'MWE2 Workflow',它运行成功,但运行后发生以下情况: 'src-gen/org/bs/test/Test/' 下的所有文件和子文件夹 'impl' 和 'util' 中的文件都被删除。所以他们被删除了,然后我复制了保存的项目并尝试在“Test.xtext”上执行以下操作>右键单击>“运行方式”→“生成 Xtext Artifacts”,结果相同。

我有两个问题: 1)“生成 Xtext 工件”和“MWE2 工作流程”有什么区别,我什么时候需要它们。我无法在教程中弄清楚这一点,尤其是何时使用它们。 2)我做错了什么,以及我必须做什么才能从更改的模型中生成元素

我在这方面找不到太多,我希望有人可以帮助我。这两个问题我都没有找到。

编辑 1:

当我创建一个完整的新测试项目时,它可以工作:

项目名称:org.test

名称:org.test.MyTest

扩展:mytest

使用以下 xtext:

grammar org.test.MyTest with org.eclipse.xtext.common.Terminals

generate myTest "http://www.test.org/MyTest"

Test:
    main=TMain;

TMain:
    'main' name=ID 
    'done'

但是当我对以下输入做同样的事情时:

项目名称:org.bs.craass

名称:org.bs.craass.CraAss

扩展名:craass

xtext:

grammar org.bs.craass.CraAss with org.eclipse.xtext.common.Terminals

generate craAss "http://www.bs.org/craass/CraAss"

CraAss:
    main=CAMain;

CAMain:
    'main' name=ID 
    'done';

稍后我将尝试以下操作:安装一个新的 eclispe emf 并创建一个新的工作区。

EDIT2:

所以我测试了一个新的工作区,它看起来很像,它正在工作。也许与旧工作区有关。就像在评论中一样,在原始工作区中,在我得到一个好的“版本”之后,我想把它放在 git 上(学习原因)。从那以后,这不再起作用了。这里是生成的一些输出:

0    [main] INFO  lipse.emf.mwe.utils.StandaloneSetup  - Registering platform uri 'C:\workspaces\emf_01'
401  [main] WARN  lipse.emf.mwe.utils.StandaloneSetup  - Skipping conflicting project org.bs.craass at 'file:/C:/workspaces/emf_01/org.bs.craass/' and using 'file:/C:/workspaces/emf_01/error_01/org.bs.craass/' instead.
926  [main] WARN  lipse.emf.mwe.utils.StandaloneSetup  - Skipping conflicting project org.bs.craass at 'file:/C:/workspaces/emf_01/error_01/org.bs.craass/' and using 'file:/C:/workspaces/emf_01/org.bs.craass/' instead.
939  [main] WARN  lipse.emf.mwe.utils.StandaloneSetup  - Skipping conflicting project org.bs.craass.sdk at 'file:/C:/workspaces/emf_01/error_01/org.bs.craass.sdk/' and using 'file:/C:/workspaces/emf_01/org.bs.craass.sdk/' instead.
970  [main] WARN  lipse.emf.mwe.utils.StandaloneSetup  - Skipping conflicting project org.bs.craass.tests at 'file:/C:/workspaces/emf_01/error_01/org.bs.craass.tests/' and using 'file:/C:/workspaces/emf_01/org.bs.craass.tests/' instead.
1090 [main] WARN  lipse.emf.mwe.utils.StandaloneSetup  - Skipping conflicting project org.bs.craass.ui at 'file:/C:/workspaces/emf_01/error_01/org.bs.craass.ui/' and using 'file:/C:/workspaces/emf_01/org.bs.craass.ui/' instead.
1749 [main] WARN  lipse.emf.mwe.utils.StandaloneSetup  - Skipping conflicting project org.bs.craass at 'file:/C:/workspaces/emf_01/org.bs.craass/' and using 'file:/C:/workspaces/emf_01/save_01/org.bs.craass/' instead.
1762 [main] WARN  lipse.emf.mwe.utils.StandaloneSetup  - Skipping conflicting project org.bs.craass.sdk at 'file:/C:/workspaces/emf_01/org.bs.craass.sdk/' and using 'file:/C:/workspaces/emf_01/save_01/org.bs.craass.sdk/' instead.
1820 [main] WARN  lipse.emf.mwe.utils.StandaloneSetup  - Skipping conflicting project org.bs.craass.tests at 'file:/C:/workspaces/emf_01/org.bs.craass.tests/' and using 'file:/C:/workspaces/emf_01/save_01/org.bs.craass.tests/' instead.
2082 [main] WARN  lipse.emf.mwe.utils.StandaloneSetup  - Skipping conflicting project org.bs.craass.ui at 'file:/C:/workspaces/emf_01/org.bs.craass.ui/' and using 'file:/C:/workspaces/emf_01/save_01/org.bs.craass.ui/' instead.
2577 [main] INFO  lipse.emf.mwe.utils.StandaloneSetup  - Adding generated EPackage 'org.eclipse.xtext.xbase.XbasePackage'
4253 [main] INFO  clipse.emf.mwe.utils.GenModelHelper  - Registered GenModel 'http://www.eclipse.org/Xtext/Xbase/XAnnotations' from 'platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel'
4265 [main] INFO  clipse.emf.mwe.utils.GenModelHelper  - Registered GenModel 'http://www.eclipse.org/xtext/xbase/Xtype' from 'platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel'
4335 [main] INFO  clipse.emf.mwe.utils.GenModelHelper  - Registered GenModel 'http://www.eclipse.org/xtext/xbase/Xbase' from 'platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel'
4335 [main] INFO  clipse.emf.mwe.utils.GenModelHelper  - Registered GenModel 'http://www.eclipse.org/xtext/common/JavaVMTypes' from 'platform:/resource/org.eclipse.xtext.common.types/model/JavaVMTypes.genmodel'
6234 [main] INFO  lipse.emf.mwe.utils.StandaloneSetup  - Adding generated EPackage 'org.eclipse.xtext.common.types.TypesPackage'
6267 [main] INFO  ipse.emf.mwe.utils.DirectoryCleaner  - Cleaning C:\workspaces\emf_01\org.bs.craass\..\org.bs.craass\src-gen
6326 [main] INFO  ipse.emf.mwe.utils.DirectoryCleaner  - Cleaning C:\workspaces\emf_01\org.bs.craass\..\org.bs.craass\model\generated
6330 [main] INFO  ipse.emf.mwe.utils.DirectoryCleaner  - Cleaning C:\workspaces\emf_01\org.bs.craass\..\org.bs.craass.ui\src-gen
6378 [main] INFO  ipse.emf.mwe.utils.DirectoryCleaner  - Cleaning C:\workspaces\emf_01\org.bs.craass\..\org.bs.craass.tests\src-gen
9146 [main] INFO  clipse.emf.mwe.utils.GenModelHelper  - Registered GenModel 'http://www.bs.org/craass/CraAss' from 'file:/C:/workspaces/emf_01/org.bs.craass/model/generated/CraAss.genmodel'
15709 [main] INFO  text.generator.junit.Junit4Fragment  - generating Junit4 Test support classes
15731 [main] INFO  text.generator.junit.Junit4Fragment  - generating Compare Framework infrastructure
15973 [main] INFO  .emf.mwe2.runtime.workflow.Workflow  - Done.

我与在其他工作区中运行相比,WARN 并没有出现。老实说,我首先忽略了,因为它是“唯一的”警告。运行成功的运行:

0    [main] INFO  lipse.emf.mwe.utils.StandaloneSetup  - Registering platform uri 'C:\workspaces\emf'
541  [main] INFO  lipse.emf.mwe.utils.StandaloneSetup  - Adding generated EPackage 'org.eclipse.xtext.xbase.XbasePackage'
1020 [main] INFO  clipse.emf.mwe.utils.GenModelHelper  - Registered GenModel 'http://www.eclipse.org/Xtext/Xbase/XAnnotations' from 'platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel'
1031 [main] INFO  clipse.emf.mwe.utils.GenModelHelper  - Registered GenModel 'http://www.eclipse.org/xtext/xbase/Xtype' from 'platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel'
1064 [main] INFO  clipse.emf.mwe.utils.GenModelHelper  - Registered GenModel 'http://www.eclipse.org/xtext/xbase/Xbase' from 'platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel'
1064 [main] INFO  clipse.emf.mwe.utils.GenModelHelper  - Registered GenModel 'http://www.eclipse.org/xtext/common/JavaVMTypes' from 'platform:/resource/org.eclipse.xtext.common.types/model/JavaVMTypes.genmodel'
2307 [main] INFO  lipse.emf.mwe.utils.StandaloneSetup  - Adding generated EPackage 'org.eclipse.xtext.common.types.TypesPackage'
2355 [main] INFO  ipse.emf.mwe.utils.DirectoryCleaner  - Cleaning C:\workspaces\emf\org.bs.craass\..\org.bs.craass\src-gen
2382 [main] INFO  ipse.emf.mwe.utils.DirectoryCleaner  - Cleaning C:\workspaces\emf\org.bs.craass\..\org.bs.craass\model\generated
2390 [main] INFO  ipse.emf.mwe.utils.DirectoryCleaner  - Cleaning C:\workspaces\emf\org.bs.craass\..\org.bs.craass.ui\src-gen
2407 [main] INFO  ipse.emf.mwe.utils.DirectoryCleaner  - Cleaning C:\workspaces\emf\org.bs.craass\..\org.bs.craass.tests\src-gen
4446 [main] INFO  clipse.emf.mwe.utils.GenModelHelper  - Registered GenModel 'http://www.bs.org/craass/CraAss' from 'platform:/resource/org.bs.craass/model/generated/CraAss.genmodel'
11647 [main] INFO  text.generator.junit.Junit4Fragment  - generating Junit4 Test support classes
11719 [main] INFO  text.generator.junit.Junit4Fragment  - generating Compare Framework infrastructure
11997 [main] INFO  .emf.mwe2.runtime.workflow.Workflow  - Done.

到目前为止,我的故障排除情况。

编辑 3:

我不知道为什么,但它现在接受我创建的旧 xtext 文件,并且在运行时出现以下错误(但似乎没有太大影响),完整日志:

0    [main] INFO  lipse.emf.mwe.utils.StandaloneSetup  - Registering platform uri 'C:\workspaces\emf'
664  [main] INFO  lipse.emf.mwe.utils.StandaloneSetup  - Adding generated EPackage 'org.eclipse.xtext.xbase.XbasePackage'
1864 [main] INFO  clipse.emf.mwe.utils.GenModelHelper  - Registered GenModel 'http://www.eclipse.org/Xtext/Xbase/XAnnotations' from 'platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel'
1882 [main] INFO  clipse.emf.mwe.utils.GenModelHelper  - Registered GenModel 'http://www.eclipse.org/xtext/xbase/Xtype' from 'platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel'
1987 [main] INFO  clipse.emf.mwe.utils.GenModelHelper  - Registered GenModel 'http://www.eclipse.org/xtext/xbase/Xbase' from 'platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel'
1987 [main] INFO  clipse.emf.mwe.utils.GenModelHelper  - Registered GenModel 'http://www.eclipse.org/xtext/common/JavaVMTypes' from 'platform:/resource/org.eclipse.xtext.common.types/model/JavaVMTypes.genmodel'
3982 [main] INFO  lipse.emf.mwe.utils.StandaloneSetup  - Adding generated EPackage 'org.eclipse.xtext.common.types.TypesPackage'
4018 [main] INFO  ipse.emf.mwe.utils.DirectoryCleaner  - Cleaning C:\workspaces\emf\org.bs.craass\..\org.bs.craass\src-gen
4061 [main] INFO  ipse.emf.mwe.utils.DirectoryCleaner  - Cleaning C:\workspaces\emf\org.bs.craass\..\org.bs.craass\model\generated
4064 [main] INFO  ipse.emf.mwe.utils.DirectoryCleaner  - Cleaning C:\workspaces\emf\org.bs.craass\..\org.bs.craass.ui\src-gen
4087 [main] INFO  ipse.emf.mwe.utils.DirectoryCleaner  - Cleaning C:\workspaces\emf\org.bs.craass\..\org.bs.craass.tests\src-gen
7153 [main] INFO  clipse.emf.mwe.utils.GenModelHelper  - Registered GenModel 'http://www.bs.org/craass/CraAss' from 'platform:/resource/org.bs.craass/model/generated/CraAss.genmodel'
error(208): ../org.bs.craass/src-gen/org/bs/craass/parser/antlr/internal/InternalCraAss.g:1199:1: The following token definitions can never be matched because prior tokens match the same input: RULE_INT
error(208): ../org.bs.craass.ui/src-gen/org/bs/craass/ui/contentassist/antlr/internal/InternalCraAss.g:2688:1: The following token definitions can never be matched because prior tokens match the same input: RULE_INT
16642 [main] INFO  text.generator.junit.Junit4Fragment  - generating Junit4 Test support classes
16661 [main] INFO  text.generator.junit.Junit4Fragment  - generating Compare Framework infrastructure
16804 [main] INFO  .emf.mwe2.runtime.workflow.Workflow  - Done.

问题似乎是,我有以下几点:

grammar org.bs.craass.CraAss with org.eclipse.xtext.common.Terminals

但另一方面:

terminal INTEGER : '-'?('0'..'9')+;

terminal VAR_TERMINAL       : '_' ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;

terminal REGISTER_TERMINAL  : ('ax' | 'bx' );

terminal FUNCTION_TERMINAL  : (('a'..'z'|'_'|'0'..'9')*'.')?('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;

而在org.eclipse.xtext.common.Terminals中是

terminal INT returns ecore::EInt: ('0'..'9')+;

但我没有办法处理它。

问题本身,同时在 srce-gen/ 中生成所有内容,但在 src-gen/org.bs.craass.craAss 和子文件夹下生成的 java 文件除外。现在也有创造。所以我试图找出更多,所以更少的错误是可重现的。好吧,我会看到,当我再次将其推送到 git 时,错误可能又回来了。

谢谢

【问题讨论】:

    标签: eclipse xtext


    【解决方案1】:

    直接运行工作流或调用 generate language artefacts 也是如此。工作流读取您的 Xtext 文件并生成 Xtext 为您的语言提供的所有基础设施。因此,如果您更改语法或工作流程本身,则必须调用它。如果您的语言配置错误或语法错误,则生成可能会失败。工作流程也可能引用可能必须采用的项目名称(不知道您如何进行复制和粘贴 - 您应该使用 Xtext 项目向导来创建项目以确保安全)

    【讨论】:

    • 问题是,我创建了项目,如上所述,然后做了一个小改动并再次创建项目,然后问题就出现了。 “有趣”的事情是,我创建了其他测试项目。我也这样做,但它有效。我将其添加到我的问题中。也许我必须“安装”一个新的 eclipse emf 实例并创建一个新项目。
    • 控制台的工作流日志中是否有任何错误?
    • 这很有趣(对我来说),没有人。它运行完全成功。在 src-gen 文件夹中,它不会创建“org.bs.craass.craAss”元素,也在子文件夹“impl”和“util”中,并且从“run”中生成的元素之前被简单地删除。我将“运行”的输出放在原始帖子中。我记得当我将项目与 git(到 github)连接时,问题就开始了。自那时候起。在新的工作空间中,问题似乎消失了。我似乎认为,当我将项目命名为“org.bs.craass”时,它只是在这个工作区中不起作用。
    • 也许它是在其他地方创建的。你确定工作流中的路径没问题吗=
    • 无法再次检查,我再次删除该项目(x 次)。现在它似乎接受了旧的 xtext,在我尝试将它推送到 git 系统之后,它突然不接受了大约 1 年。现在只有一个“错误”,但似乎没有问题,一切都很好。我把它放到原来的帖子里了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多