我正在尝试将现有的Xtext 2.21.0项目从Eclipse 2020-03移植到Maven。
我使用Eclipse生成了一个XtextMaven项目示例,然后用我的DSL填充它。问题是我的语法找不到对其他语法的引用。
529 ERROR XtextGeneratorLanguage - [XtextLinkingDiagnostic: null:1 Couldn't resolve reference to Grammar 'abc.generator.ServiceGenerator'., XtextLinkingDiagnostic: null:4 Couldn't resolve reference to EPackage 'http://www.generator.abc/ServiceGenerator'., XtextLinkingDiagnostic: null:117 STRING cannot be resolved to a rule, XtextLinkingDiagnostic: null:249 INT cannot be resolved to a rule, TransformationDiagnostic: null:248 Datatype rules may only use other datatype rules, lexer rules and keywords. (ErrorCode: InvalidDatatypeRule)]
531 ERROR Mwe2Launcher - Problems running workflow abc.generator.GenerateRawNotificationGenerator: Problem parsing 'file:/C:/Users/xxx/Desktop/eclipse_plugin_pom/abc.generator/../abc.generator/src/abc/generator/VarDefinitionGenerator.xtext':
XtextLinkingDiagnostic: null:1 Couldn't resolve reference to Grammar 'abc.generator.ServiceGenerator'.
XtextLinkingDiagnostic: null:4 Couldn't resolve reference to EPackage 'http://www.generator.abc/ServiceGenerator'.
XtextLinkingDiagnostic: null:117 STRING cannot be resolved to a rule
XtextLinkingDiagnostic: null:249 INT cannot be resolved to a rule
TransformationDiagnostic: null:248 Datatype rules may only use other datatype rules, lexer rules and keywords. (ErrorCode: InvalidDatatypeRule)
POM文件只是Eclipse Xtext 2.21.0默认生成的POM,唯一的修改是我的项目名称和URI。
Mwe 2文件:
module abc.generator.GenerateRawNotificationGenerator
import org.eclipse.xtext.xtext.generator.*
import org.eclipse.emf.mwe.utils.StandaloneSetup
import org.eclipse.xtext.xtext.generator.model.project.*
var rootPath = ".."
Workflow {
component = XtextGenerator
{
configuration =
{
project = StandardProjectConfig
{
baseName = "abc.generator"
rootPath = rootPath
runtimeTest =
{
enabled = true
}
eclipsePlugin =
{
enabled = true
}
eclipsePluginTest =
{
enabled = true
}
createEclipseMetaData = true
}
code =
{
encoding = "windows-1252"
lineDelimiter = "\r\n"
fileHeader = "/*\n * generated by Xtext \${version}\n */"
}
}
language = StandardLanguage
{
name = "abc.generator.ServiceGenerator"
fileExtensions = "services"
serializer =
{
generateStub = false
}
validator =
{
composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
}
}
language = StandardLanguage
{
name = "abc.generator.VarDefinitionGenerator"
fileExtensions = "vardefinition"
serializer =
{
generateStub = false
}
validator =
{
composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
}
}
}
}
ServiceGenerator标题:
grammar abc.generator.ServiceGenerator with org.eclipse.xtext.common.Terminals
generate serviceGenerator "http://www.generator.abc/ServiceGenerator"
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
变容发生器标题:
grammar abc.generator.VarDefinitionGenerator with abc.generator.ServiceGenerator
generate varDefinitionGenerator "http://www.generator.abc/VarDefinitionGenerator"
import "http://www.generator.abc/ServiceGenerator"
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
我必须提到我对Xtext一点也不熟悉,但我对Maven很熟悉。这个项目在Eclipse 2020-03中运行得很好,但是我们需要摆脱Eclipse,因为它的bug。我尝试升级到Eclipse 2023-09,Java 17和Xtext 2.32.0,但项目无法工作(一些注入变量返回为null)。
我不明白的是Eclipse plugin.xml文件是否应该添加到mwe 2文件中的某个地方。
<?xml version="1.0" encoding="windows-1252"?>
<?eclipse version="3.0"?>
<plugin>
<extension point="org.eclipse.emf.ecore.generated_package">
<package
uri = "http://www.generator.abc/ServiceGenerator"
class = "abc.generator.serviceGenerator.ServiceGeneratorPackage"
genModel = "model/generated/ServiceGenerator.genmodel" />
</extension>
<extension point="org.eclipse.emf.ecore.generated_package">
<package
uri = "http://www.generator.abc/VarDefinitionGenerator"
class = "abc.generator.varDefinitionGenerator.VarDefinitionGeneratorPackage"
genModel = "model/generated/VarDefinitionGenerator.genmodel" />
</extension>
</plugin>
1条答案
按热度按时间rm5edbpk1#
你可以用第二种语言来描述第一种语言