![]() |
![]() ![]() ![]() ![]() |
![]() |
Semantic Actions with ParsersBoost , Spirit 2.5.2 , Reference
|
||||||||||||||
|
выражение |
Семантика |
|---|---|
|
Если |
Возможными сигнатурами для функций, используемых в качестве семантических действий, являются:
template <typename Attrib> void fa(Attrib& attr); template <typename Attrib, typename Context> void fa(Attrib& attr, Context& context); template <typename Attrib, typename Context> void fa(Attrib& attr, Context& context, bool& pass);
Предполагается, что функция или объект функции возвращают значение для генерации вывода путем присвоения ему первого параметраattr.ЗдесьАттрибявляется типом атрибута парсера, прикрепленного к семантическому действию.
ТипКонтекст— это тип контекста выполнения парсера. Этот тип не определен и зависит от контекста, в котором используется парсер. Значениеконтекста, используемое семантическими действиями, написанными с использованиемФениксадля доступа к различным зависящим от контекста атрибутам и значениям. Для получения дополнительной информации оФениксевыражениях, пригодных для использования в семантических действиях см.Nonterminal.
Третий параметр,проход, может быть использован семантическим действием, чтобы заставить связанный парсер выйти из строя. Если пас установлен наложный, парсер действия немедленно вернетложный, при этом не ссылаясьpи не генерируя никакого вывода.
|
выражение |
атрибут |
|---|---|
|
|
Сложность парсера действия определяется сложностью парсера, к которому прикреплено семантическое действие, и сложностью функции или объекта функции, используемого в качестве семантического действия.
Примеры семантических действий можно найти здесь:Примеры семантических действий.
Статья Semantic Actions with Parsers раздела Spirit 2.5.2 Reference может быть полезна для разработчиков на c++ и boost.
реклама |