Условные выражения в шаблонах строк Antlr

Мы используем Antlr StringTemplates, чтобы контролировать, как выводится имя сущности.

Основной Stringtemplate является

$ FirstName $ $ Initial $ $ LastName $, $ Суффикс $, $ Степень $

Я хочу добавить несколько смарт-символов в этот шаблон, чтобы запятые выводились только при необходимости, т. Е. Первая запятая выводится только при наличии суффикса или степени, а вторая запятая выводится только при наличии суффикса.

Я попробовал следующий бит строки шаблона, он не работает. Я думаю, что я неправильно понял

$ FirstName $ $ Initial $ $ LastName $,, $ Suffix $, $ Degree $

Если это поможет, мы обработаем шаблоны, используя этот 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=","$

Это может быть не точный ответ, но вы можете попробовать использовать разделитель, чтобы отделить имя от начального, и запятая будет вставлена, только если у вас есть второе значение. Скажем, если вы перебираете набор имен и инициалов, запятая будет только в том случае, если у вас есть инициалы.

Другие вопросы по тегам