【发布时间】: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 时,错误可能又回来了。
谢谢
【问题讨论】: