Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

More on Actions

Boost , Chapter 1. Phoenix 3.2.0 , Inside Phoenix

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Как вы знаете из разделаАктеры в деталях, действия — это то, что приносит жизнь в дерево выражения Феникса.

При работе с деревом выражения Феникса оно оценивается сверху вниз. Пример:

_1 + 3 * _2

Можно визуализировать как AST следующим образом:

С точки зрения действий это означает:

  • <rule::plus>Соответствует
  • Оценка слева:
    • <rule::placeholder>соответствует
    • <rule::multiplies>соответствует
      • оценка слева:
        • <rule::value>соответствует
        • <rule::placeholder><rule::placeholder>[<rule::placeholder>]

Каждый раз, когда выполняется какое-то правило, называется действие. Действие определяет, как будет проходить Phoenix AST.

Writing an Action

Как упоминалось вАктёры в деталяхдействийПротопримитивные преобразованиядля удобства Феникс предоставляет абстракцию к этому:

template <typename Fun>
struct call;

Это подобно<proto::call>, но делает больше. Он называет объект функции<Fun>принятым в качестве шаблонного параметра с<Context>и детьми выражения, связанного с правилом.

Приведем (упрощенный) пример того, как написать оценочное действие для<rule::plus>:

struct plus_eval
{
    typedef int result_type;
    template <typename Lhs, typename Rhs, typename Context>
    result_type operator()(Lhs const& lhs, Rhs const &rhs, Context & ctx)
    {
        return eval(lhs, ctx) + eval(rhs, ctx);
    }
};
template <>
struct default_actions::when<rule::plus>
    : call<plus_eval>
{};

Вот так. При оценке выражения<plus>вызывающий<plus_eval>вызывается выражением левой стороны и правой стороны и связанным с ним контекстом.

Но есть и другое:Поскольку действиямогут быть полными, а— полными,Прото-преобразования, вы можете фактически использовать любое прото-выражение, которое вы можете себе представить как действие. Феникс предопределяет набор вызывающих и трансформирует, чтобы иметь дело с передаваемой контекстной информацией, и, конечно, каждое выражение Феникса может использоваться в качестве грамматики Феникса или. Прото проходит через трансформацию.

functional::context(Env, Actions)

Прото-вызываемая трансформация, создающая новый контекст из параметра<Env>и<Actions>.

functional::env(Context)

Прото-вызываемое преобразование, которое возвращает окружающую среду из<Context>параметра

functional::actions(Context)

Преобразование, которое возвращает действия из<Context>параметра

_context

Протопримитивная трансформация, возвращающая текущий контекст

_env

Протопримитивная трансформация, возвращающая текущую среду

_actions

Протопримитивная трансформация, возвращающая текущие действия

context(env, actions)

Регулярная функция, создающая контекст

env(ctx)

Регулярная функция, которая возвращает окружающую среду из данного контекста.

actions(ctx)

Регулярная функция, которая возвращает действия из данного контекста.

Phoenix оснащен предопределенным набором выражений, правил и действий, чтобы заставить работать все, что вы узнали в разделахStarter KitиModules. Смотрите следующий разделдля более подробной информации!


PrevUpHomeNext

Статья More on Actions раздела Chapter 1. Phoenix 3.2.0 Inside Phoenix может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Inside Phoenix ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 21:29:11/0.0090219974517822/1