Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Xtext: Cannot resolve reference

I have the following Xtext grammar:

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)*
;

However when writing a sample script ex:

    Plugin x{
        description = "test"

        function f;
        function f2;

        manifest{

            dep1 => x

            ExtensionPoint ep.ep1{
                ref f;
            }

            ext1 -> ep.ep1
        }    
}

I get the following error:

Couldn't resolve reference to Plugin 'x'. Couldn't resolve reference to Functionality 'f'. ... etc

This is my first attempt at xtext and I cannot figure out what I'm doing wrong

Thanks in advance for any help!!

like image 981
Jonny Avatar asked Dec 05 '25 08:12

Jonny


1 Answers

hi you should name you elements name attribute name and NOT Name and you have to make sure the (actual) qualified names in the scope at the place you use it match the terminal or datatype rule you use (in your case EntityName) alternatively you can change IQualifiedNameProvider

like image 54
Christian Dietrich Avatar answered Dec 07 '25 21:12

Christian Dietrich



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!