Я реализую грамматику с тремя разделами. В первом разделе я объявляю компоненты с их интерфейсами, например, компонент A с интерфейсами interface_1, interface_2. В третьем разделе я объявляю некоторые ограничения, например, компонент A может получить доступ к компоненту B через интерфейс XXXX. Когда я пытаюсь сделать перекрестную ссылку на интерфейсы компонента, я получаю сообщение об ошибке «Не удалось разрешить ссылку на ProbeInterface 'interface_1'"?.
Я попробовал несколько примеров из интернета, но ни один из них не подходит для моего случая.
Это часть моей грамматики:
ArchitectureDefinition:
'Abstractions' '{' abstractions += DSLAbstraction+ '}'
'Compositions' '{' compositions += DSLComposition* '}'
'Restrictions' '{' restrictions += DSLRestriction* '}'
;
DSLComposition:
DSLProbe|DSLSensor
;
DSLRestriction:
'sensor' t=[DSLSensor] 'must-access-probe' type = [DSLProbe] 'through-interface' probeinterface=[ProbeInterface] ';'
;
DSLSensor:
'Sensor' name=ID ';'
;
DSLProbe:
'Probe' name=ID ('with-interface' probeinterface=ProbeInterface)? ';'
;
ProbeInterface :
name+=ID (',' name+=ID)*
;
И реализация:
Abstractions
{
Sensor sensor_1 ;
Probe probe_1 with-interface interface_1, interface_2;
}
Compositions{}
Restrictions
{
sensor sensor_1 must-access-probe probe_1 through-interface
interface_1;
}
Я ожидаю, что на interface_1 или interface_2 можно ссылаться по грамматике.
Спасибо.