Referencias cruzadas y alcance de Xtext

Tengo algunos problemas con las referencias cruzadas de xtext Aquí hay una gramática muy simple:

grammar org.xtext.example.mydsl1.Test with org.eclipse.xtext.common.Terminals
generate test "http://www.xtext.org/example/mydsl1/Test"
Model: block=Block? cs+=Company* ; 
Block:  '{' g=[Employee] '}';
Company: 'Company' name=ID
    '{' es+= Employee* '}';
Employee: 'Employee' name=ID ';' ;

y es mi dsl:

{ Pooyan }
Company Sony{
    Employee Pooyan;
    Employee John;
}

Siempre mostraba que "No se pudo resolver la referencia al empleado 'Pooyan'". ¿Podría alguien ayudarme por favor? No tengo ni idea...

preguntado el 27 de julio de 12 a las 18:07

2 Respuestas

El nombre completo de Pooyan es Sony.Pooyan. Dado que la referencia cruzada 'g' en su bloque está definida en otro contenedor, debe realizar una personalización menor para colocarla en el alcance.

  1. Si su idioma siempre usa un espacio de nombres plano, puede habilitar SimpleNamesFragment en el generador de idioma y eliminar QualifiedNamesFragment. Esto debería funcionar.
  2. Alternativamente, puede personalizar el alcance para la referencia concreta 'g' en su proveedor de alcance.

Respondido 30 Jul 12, 08:07

Agregando a la respuesta de Sebastians para que sea más precisa: debe cambiar "fragmento = exportar. QualifiedNamesFragment auto-inject {}" a "fragmento = exportar. SimpleNamesFragment" en el archivo .mwe2 correspondiente de su proyecto xtext.

Espero que esto ayude.

Respondido 06 ago 14, 01:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.