У меня есть DSL, который позволяет явно импортировать ресурсы (через атрибут importURI
). Все работает просто отлично, за исключением того факта, что я хотел бы ссылаться на импортированные элементы напрямую по их идентификатору (а не по полному имени).
Я не использую importedNamespace
, потому что я ограничил GlobalScope только тем, что явно импортировано, и для каждого ресурса мне нужны все элементы (например, ModelName . *).
Итак, сейчас я могу ссылаться на импортированные элементы следующим образом:
ModelName . OuterElement . InnerElement
но я хотел бы иметь что-то вроде этого:
OuterElement или InnerElement .
Конечно, общий контекст более сложный и немного другой, но я попытался упростить все вокруг этого вопроса. Поэтому, пожалуйста, обратитесь к следующей грамматике:
Model:
name=ID ':'
(include+=Include)?
(outerElems+=OuterElement ';')*
(uses+=Use ';')*;
Include:
'import' importURI=STRING ;
OuterElement:
'def' name=ID
'(' (innerElements+=InnerElement (',' innerElements+=InnerElement)* )? ')' ;
InnerElement:
name=ID;
Element:
OuterElement | InnerElement;
Use:
'use' use =[Element|FQN];
FQN:
ID('.'ID)* ;