Здравствуйте, vdimas, Вы писали:
V>Почему? Смотрел на boost::lambda? Они почти весь синтаксис С++ умудрились сделать как генератор работающего AST. Отличный пример того, как это надо делать и стартовая точка для своих наработок.
V>Ес-но, для каждого выражения — свой узел. Вот здесь в двойных скобках приводил в примере именно генерацию AST, которое исполняется "потом":
Не так давно зарелизился
Boost.Phoenix 3.0 там практически полностью
ленивый (привет хаскелю
) встроенный в C++ DSL, и AST там гораздо богаче чем в boost::lambda, есть все конструкции языка практически,
в примере ниже они с _ в конце (if_, switch_ и т. п.)
std::for_each(v.begin(), v.end(),
if_(arg1 > 5)
[
std::cout << arg1 << ", "
]
);
//...
std::for_each(c.begin(), c.end(),
switch_(arg1)
[
case_<1>(std::cout << val("one") << '\n'),
case_<2>(std::cout << val("two") << '\n'),
default_(std::cout << val("other value") << '\n')
]
);
//...
std::for_each(c.begin(), c.end(),
(
while_(arg1--)
[
cout << arg1 << ", "
],
cout << val("\n")
)
);