Re[25]: Языки общего назначения не имеют смысла!
От: FR  
Дата: 17.04.12 05:26
Оценка: 105 (2) :))
Здравствуйте, 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")
    )
);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.