Как я могу создать в Xtext с кодом Xtend Generator, как он был написан? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть эта грамматика, определенная в Xtext, и при генерации кода с помощью Xtend я хочу получить выражение выбора в том виде, в котором оно было написано.

Чтобы при выборе выражения типа x = "abc" ||(y = "pqr" && z = "lmn") записывается с этой грамматикой, код генератора подготавливает выражение в виде строки типа "x =" abc "|| (y =" pqr "&& z =" lmn ")».Как это можно сделать?

Queries:
    (query+=Query)*;
Query:
    'get' 'patient' selection = Selection ('view' view = View)? ';'
;
View:
    'examination'| 'bill' | 'illness' | 'prescription'
;
Selection:
    OrSelection | {Selection} '*'
;   
OrSelection returns Selection:
    AndSelection ({OrSelection.left=current} "||" right=AndSelection)*  
;   
AndSelection returns Selection:
    PrimarySelection ({AndSelection.left=current} "&&" right=PrimarySelection)*  
;
PrimarySelection returns Selection:
    "(" Selection ")"
| Literal
;
Literal returns Selection:
   {Literal}  attribute = Attribute '=' value = Value 
;
Attribute:
   name = ID
;
Value:
    name = STRING
;

1 Ответ

0 голосов
/ 08 июня 2018

Вы можете использовать NodeModelUtils, чтобы получить INode для EObject, а затем запросить у узла его текст

NodeModelUtils.findActualNodeFor(obj).getText()

или

NodeModelUtils.getNode(obj).getText()

, последний можетвключать комментарии и т. д.

...