фигурная скобка в StringTemplate

Следующий StringTemplate дает мне исключение «недопустимый символ '}'» из-за закрывающей фигурной скобки после return null;:

$StatementList:{statement | 
public T $statement$(X x) { return null; }  }$

Я хочу иметь вывод, например:

public T statement1(X x) {return null; }
public T statement2(X x) {return null; }

Как я могу избежать этой закрывающей фигурной скобки?


person Klaus Schulz    schedule 07.11.2014    source источник


Ответы (1)


Я не мог найти способ экранирования символов, но мне удалось заставить его работать, используя вместо этого символ юникода для фигурных скобок.

statementTemplate(StatementList) ::= <<
<StatementList:{statement | 
public T <statement>(X x) <\u007B> return null; <\u007D> }>
>>

который произвел:

public T statement1(X x) { return null; } 
public T statement2(X x) { return null; } 
public T statement3(X x) { return null; }
person Andy Stabler    schedule 08.11.2014
comment
Хороший обходной путь! Тем временем я нашел другой, но ваш более элегантный. Я добавил переменную $closingcurlybraclet$ в конец оператора и определил ее в моем генераторе с помощью template.add(closingCurlyBraclet, }); - person Klaus Schulz; 10.11.2014