Написание переводчика с использованием Antlr / Stringtemplates - PullRequest
0 голосов
/ 09 февраля 2011

Я хочу написать переводчик. Идея состоит в том, чтобы перевести специальные интерфейсы C ++ в C ++ / CLI. У меня есть грамматика antlr, которая анализирует все и генерирует AST. Теперь я хочу использовать эту информацию и некоторые строковые шаблоны для передачи исходного кода.

Моя идея состояла в том, чтобы преобразовать AST в некую иерархию объектов со свойствами (например, интерфейсный объект, содержащий методы индексированных свойств, который содержит объекты-описания-объектов). Затем шаблон мастер-строки подается вместе с корневым объектом и вставляет свойства в правильные позиции или передает их под-шаблонам.

Теперь мой вопрос: Как мне написать строковый шаблон / свойство, которое нужно вызывать некоторое неопределенное количество раз? Пример: интерфейс содержит несколько методов. Это означает, что подшаблон для метода должен вызываться несколько раз, каждый раз с другим свойством. Как я могу записать это как сочетание строкового шаблона и индексированного свойства?

Спасибо за вашу помощь Tobias

1 Ответ

0 голосов
/ 30 марта 2011

Я делаю что-то очень похожее.Основная идея заключается в том, что ваша модель должна предоставлять список некоторых объектов, и вы используете этот список в своих строковых шаблонах.Например, скажем, у меня очень мозговая реализация.Я собираюсь использовать Java, потому что это то, что я знаю лучше всего;Вы должны понять, что это за идеяшаблон для каждого объекта метода, который у меня есть;это то, что делает $methods:method().Если бы у меня был пустой список, никакой шаблон не был бы вызван вообще.Это решает проблему переменного размера.Я делаю похожую вещь в определении метода;($method.arguments:argument(); separator=","$).Это создаст разделенный запятыми список параметров метода в скобках, как и следовало ожидать.

...