Условные выражения в шаблонах строк Antlr - PullRequest
1 голос
/ 09 октября 2009

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

Основной шаблон строки -

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

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

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

$ FirstName $ $ Initial $ $ LastName $ , , $ Suffix $ , $ Степень $

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

1 голос
/ 04 января 2011

Просто используйте разделитель в вашем шаблоне строки, например: $ FirstName; separator = "," $ $ Initial; separator = "," $

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

1 голос
/ 09 октября 2009

Используйте $ FirstName $ $ Initial $ $ LastName $ $ if (Suffix) $, $ Suffix $ $ endif $ $ if (Degree) $, $ Degree $ $ endif $

N

...