Условные выражения в шаблонах строк Antlr
Мы используем Antlr StringTemplates, чтобы контролировать, как выводится имя сущности.
Основной Stringtemplate является
$ FirstName $ $ Initial $ $ LastName $, $ Суффикс $, $ Степень $
Я хочу добавить несколько смарт-символов в этот шаблон, чтобы запятые выводились только при необходимости, т. Е. Первая запятая выводится только при наличии суффикса или степени, а вторая запятая выводится только при наличии суффикса.
Я попробовал следующий бит строки шаблона, он не работает. Я думаю, что я неправильно понял
$ FirstName $ $ Initial $ $ LastName $
Если это поможет, мы обработаем шаблоны, используя этот C#
StringTemplate stringtemplate = new Antlr.StringTemplate.StringTemplate(template.Data);
foreach (Pair<string, string> pair in dictionary)
{
if (pair.First != null && pair.Second != null)
{
stringtemplate.SetAttribute(pair.First, pair.Second);
}
}
return stringtemplate.ToString();
2 ответа
Используйте $ FirstName $ $ Initial $ $ LastName $ $ if (Suffix) $, $ Suffix $ $ endif $ $ if (Degree) $, $ Degree $ $ endif $
N
Просто используйте разделитель в вашем шаблоне строки, например: $FirstName;separator=","$ $Initial;separator=","$
Это может быть не точный ответ, но вы можете попробовать использовать разделитель, чтобы отделить имя от начального, и запятая будет вставлена, только если у вас есть второе значение. Скажем, если вы перебираете набор имен и инициалов, запятая будет только в том случае, если у вас есть инициалы.