Я пишу dsl в тексте, в котором люди могут объявлять некоторые переменные. грамматика выглядит следующим образом:Xtext, делая разницу между идентификатором и строкой в интерпретаторе
Cosem:
cosem+=ID '=' 'COSEM' '(' class=INT ',' version=INT ',' obis=STRING ')' ;
Attributes :
attribute+=ID '=' 'ATTRIBUTE' '(' object=ID ',' attribute_name=STRING ')' ;
Action:
action+=ID '=' 'ACTION' '(' object=ID ',' action_name=STRING ')';
DSL, имеет некоторые методы, такие как метод печати:
Print:
'PRINT' '(' var0=(STRING|ID) (','var1+=(STRING|ID))* ')' |
'PRINT' '(' ')'
;
Я поместил все мои переменные на карту, чтобы впоследствии использовать их в своем коде. ключ идентифицирует их, это их идентификатор, который является строкой. Однако, в моем переводчика я не могу сделать разницу между строкой и ID
def dispatch void exec(Print p) {
if (LocalMapAttribute.containsKey(p.var0))
{print(LocalMapAttribute.get(p.var0))}
else if (LocalMapAction.containsKey(p.var0)){print(LocalMapAction.get(p.var0))}
else if (LocalMapCosem.containsKey(p.var0)){print(LocalMapCosem.get(p.var0))}
else
{print("erreeeur Print")}
p.var1.forEach[v
| if (LocalMapAttribute.containsKey(v)){print(LocalMapAttribute.get(v))}
else if (LocalMapAction.containsKey(v)){print(LocalMapAction.get(v))}
else if (LocalMapCosem.containsKey(v)){print(LocalMapCosem.get(v))}
else{print("erreur entre print")} ]
}
Например, когда я пишу PRINT ("attribut2",attribut2)
результат Шоуда быть
attribut2 "the value of attribut2"
, но я получаю
"the value of attribut2" "the value of attribut2"
спасибо за ответ, он действительно работает. как я могу проверить его? или я не могу из-за моей низкой репутации? –
похоже, что вы его нашли –