/*============================================================================= Copyright (c) 2001-2014 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) =============================================================================*/ #if !defined(BOOST_SPIRIT_X3_CALC8_STATEMENT_DEF_HPP) #define BOOST_SPIRIT_X3_CALC8_STATEMENT_DEF_HPP #include #include #include "ast.hpp" #include "ast_adapted.hpp" #include "statement.hpp" #include "expression.hpp" #include "common.hpp" #include "error_handler.hpp" namespace client { namespace parser { using x3::raw; using x3::lexeme; using namespace x3::ascii; struct statement_list_class; struct variable_declaration_class; struct assignment_class; struct variable_class; typedef x3::rule statement_list_type; typedef x3::rule variable_declaration_type; typedef x3::rule assignment_type; typedef x3::rule variable_type; statement_type const statement = "statement"; statement_list_type const statement_list = "statement_list"; variable_declaration_type const variable_declaration = "variable_declaration"; assignment_type const assignment = "assignment"; variable_type const variable = "variable"; // Import the expression rule namespace { auto const& expression = client::expression(); } auto const statement_list_def = +(variable_declaration | assignment) ; auto const variable_declaration_def = lexeme["var" >> !(alnum | '_')] // make sure we have whole words > assignment ; auto const assignment_def = variable > '=' > expression > ';' ; auto const variable_def = identifier; auto const statement_def = statement_list; BOOST_SPIRIT_DEFINE( statement , statement_list , variable_declaration , assignment , variable ); struct statement_class : error_handler_base, x3::annotate_on_success {}; struct assignment_class : x3::annotate_on_success {}; struct variable_class : x3::annotate_on_success {}; }} namespace client { parser::statement_type const& statement() { return parser::statement; } } #endif