Вот вывод из консоли,Rascal: Get-аннотации не поддерживаются значение, когда ясно, что есть соответствующая @lab аннотация
Debug print..
exprNode(
assign(
var(name(name("alpha")))[
@at=|file:///Users/apil/Dropbox/Scripts/Class_Based_Analysis/SimpleClass_CopyObject.php|(56,6,<9,0>,<9,0>),
@scope="scope"("","","",""),
@decl=|php+variable:///alpha|,
@phpdoc="",
@lab=lab(3)
],
new(
name(name("MyClass")[
@at=|file:///Users/apil/Dropbox/Scripts/Class_Based_Analysis/SimpleClass_CopyObject.php|(67,7,<9,0>,<9,0>),
@scope="scope"("","","",""),
@phpdoc=""
]),
[])[
@at=|file:///Users/apil/Dropbox/Scripts/Class_Based_Analysis/SimpleClass_CopyObject.php|(63,13,<9,0>,<9,0>),
@scope="scope"("","","",""),
@phpdoc="",
@lab=lab(4)
])[
@at=|file:///Users/apil/Dropbox/Scripts/Class_Based_Analysis/SimpleClass_CopyObject.php|(56,20,<9,0>,<9,0>),
@scope="scope"("","","",""),
@phpdoc="",
@lab=lab(5)
],
lab(5))[
@lab=lab(5)
]
var(name(name("alpha")))[
@at=|file:///Users/apil/Dropbox/Scripts/Class_Based_Analysis/SimpleClass_CopyObject.php|(56,6,<9,0>,<9,0>),
@scope="scope"("","","",""),
@decl=|php+variable:///alpha|,
@phpdoc="",
@lab=lab(3)
]
|rascal://soft::typing::php::elements::Identifier|(1678,6,<54,10>,<54,16>): get-annotation not supported on value at |rascal://soft::typing::php::elements::Identifier|(1678,6,<54,10>,<54,16>)
☞ Advice
и вот скрипт отвечает за генерацию контента:
LabelToIdentifierMap mapp=();
println("Debug print..");
iprintln(cfgNode);
result=[e | /assign(e,_):=cfgNode];
if(isEmpty(result))
return mapp;
result=getElementFromSingletonList(result);
iprintln(result);
if(var(name(name(str x))):=result)
mapp +=([email protected]:var(x));
else if(propertyFetch(var(name(name(str x))),name(name(str y))):=result)
mapp +=([email protected]:propertySet(var(x),var(y)));
else
throw "Unsupported expression encountered at left hand side of an assignment node.\n"+
"Got: <result>. Error loc: 510142847";
return mapp;
Я забочусь о том, что вывод переменной «result»: var (name (name («alpha»))) [@at = ...] показывает, что в прикрепленном к переменной знаке есть аннотация @lab. Почему я не могу получить его? Кроме того, как я могу получить его, если это вообще возможно!
Спасибо .. это имеет смысл. Однако я использую параметризованную функцию для возврата элемента из «getElementFromSingletonList (..)». Эта функция гарантирует, что переданный аргумент представляет собой список только с одним элементом и в противном случае исключает исключение. Я думаю, что это может решить проблему. Result = [e |/assign (Expr e, _): = cfgNode], так как теперь шаблон явно сопоставляется с типом Expr, для которого аннотации справедливо объявлены. Есть предположения?? –
Это поможет увидеть подпись функции, но если это что-то вроде 'value getElementFromSingletonList (list [value] l), было бы лучше иметь' & T getElementFromSingletonList (list [& T] l), чтобы он поддерживал тип элемент. –