метка / ключ узла в XText при переводе из grako

В grako можно использовать следующий name:e, чтобы добавить результат e в AST, используя имя в качестве ключа. Например

var_def
    =
    var+:ID {',' var+:ID}*

Что было бы хорошим переводом этого на Xtext? Я пытался

var_def:
     var=ID (',' var=ID)*;

который не дает сбоев, но вызывает следующее предупреждение

Multiple markers at this line
- The possibly assigned value of feature 'var' may be overridden
   by subsequent assignments.
- This assignment will override the possibly assigned value of
   feature 'var'.

Я думаю, что пытаюсь имитировать поведение name, но без особого успеха.


person Quantico    schedule 21.04.2016    source источник
comment
Не ответ, но стоит отметить, что в последних версиях Grako можно писать: var:','.{ID}   -  person Apalala    schedule 22.04.2016


Ответы (1)


С вашим решением в AST будет доступен только последний идентификатор. Я предполагаю, что var должен быть многозначной функцией, содержащей все идентификаторы, а не только последний. Это можно выразить как

var_def:
    var+=ID (',' var+=ID)*;

В результате AST var представляет собой список идентификаторов.

person Miro Spönemann    schedule 25.04.2016