Xtext:无法解析引用

时间:2014-12-27 19:21:17

标签: java eclipse eclipse-plugin xtext metamodel

我有以下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的第一次尝试,我无法弄清楚我做错了什么

提前感谢您的帮助!!

1 个答案:

答案 0 :(得分:2)

嗨,您应该将元素命名为属性name而不是Name 并且您必须确保您使用它的位置范围内的(实际)限定名称与您使用的终端或数据类型规则匹配(在您的情况下为EntityName),或者您可以更改IQualifiedNameProvider