我有以下Xtext语法:
grammar dsl.miniproject.Question2.EclipsePluginLanguage with org.eclipse.xtext.common.Terminals
import "platform:/resource/Question2/model/EclipsePluginModel.ecore"
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
Plugin:
{Plugin}
'Plugin' Name = EntityName
'{'
(documentation = Documentation)?
(functions += Functionality)*
manifest = Manifest
'}'
;
Documentation:
{Documentation}
'description =' documentation = STRING
;
Manifest:
{Manifest}
'manifest'
'{'
(dependencies += Dependency)*
(extensionPoints += ExtensionPoint)*
(extensions += Extension)*
'}'
;
Functionality:
{Functionality}
'function' Name = EntityName ';'
;
Dependency:
{Dependency}
Name = EntityName '=>' depends = [Plugin|EntityName]
;
Extension:
{Extension}
Name = EntityName '->' extends = [ExtensionPoint|EntityName]
;
ExtensionPoint:
{ExtensionPoint}
'ExtensionPoint' Name = EntityName
'{'
'ref' functions += [Functionality|EntityName] ';'
'}'
;
EntityName:
ID ('.' ID)*
;
但是在编写示例脚本ex:
时 Plugin x{
description = "test"
function f;
function f2;
manifest{
dep1 => x
ExtensionPoint ep.ep1{
ref f;
}
ext1 -> ep.ep1
}
}
我收到以下错误:
无法解析对Plugin' x'的引用。 无法解析对功能的引用' f'。 ......等等。
这是我对xtext的第一次尝试,我无法弄清楚我做错了什么
提前感谢您的帮助!!
答案 0 :(得分:2)
嗨,您应该将元素命名为属性name
而不是Name
并且您必须确保您使用它的位置范围内的(实际)限定名称与您使用的终端或数据类型规则匹配(在您的情况下为EntityName
),或者您可以更改IQualifiedNameProvider