2016-11-28 1 views
0

사람들이 일부 변수를 선언 할 수있는 텍스트에 dsl을 쓰고 있습니다. 문법은 다음과 같다 :Xtext, 인터프리터에서 ID와 문자열의 차이 만들기

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" 

수 갈까요 문자열 및 ID의 차이를 만들 수 있지만

"the value of attribut2" "the value of attribut2" 
를 얻을 수

답변

0

지도를 채우는 시점에 정보를 버리면 현재 문법 구조가 어렵습니다.

다음 유형을 살펴 수 있습니다 여전히 ""

를 포함하여 원래 값을 포함 할 수 있습니다 실제 텍스트를 (얻을 org.eclipse.xtext.nodemodel.util.NodeModelUtils.findNodesForFeature(EObject, EStructuralFeature)를 사용하거나이

var0=Value ... 
Value: IDValue | StringValue; 
IDValue: value=ID; 
StringValue: value=STRING; 

에 문법을 변경

(IDValue 또는 StringValue)를 사용하여 텍스트를 "" (org.eclipse.xtext.util.Strings.convertToJavaString(String, boolean))에 넣어야하는지 결정하십시오.

또는 특수 대체 f 또는 인용 부호를 벗지 않는 STRINGValueaConcerter

+0

답변 해 주셔서 감사합니다. 어떻게 확인할 수 있습니까? 저의 낮은 평판 때문에 나는 할 수 없습니까? –

+0

을 찾은 것처럼 보입니다. –