calc6c.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 65 行

HPP
65
字号
/*=============================================================================    Copyright (c) 2001-2007 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_CALC6C)#define BOOST_SPIRIT_CALC6C#include "calc6.hpp"/////////////////////////////////////////////////////////////////////////////////  Our statement grammar and compiler///////////////////////////////////////////////////////////////////////////////template <typename Iterator>statement<Iterator>::statement(std::vector<int>& code)  : statement::base_type(start)  , code(code)  , nvars(0)  , expr(code, vars)  , add_var(vars)  , op(code){    identifier %=        raw[lexeme[alpha >> *(alnum | '_')]]        ;    var_ref =        lexeme        [                vars        [_val = _1]            >>  !(alnum | '_') // make sure we have whole words        ]        ;    var_decl =            "var"        >   !var_ref        // make sure the variable isn't redeclared        >   identifier      [add_var(_1, ref(nvars))]        >   (';' | '=' > assignment_rhs(ref(nvars)-1))        ;    assignment =            var_ref         [_a = _1]        >>  '='        >   assignment_rhs(_a)        ;    assignment_rhs =            expr        >   char_(';')      [op(op_store, _r1)]        ;    start = +(var_decl | assignment);    identifier.name("identifier");    var_ref.name("variable-reference");    var_decl.name("variable-declaration");    assignment.name("assignment");    assignment_rhs.name("assignment-rhs");    on_error<fail>(start, error_handler(_4, _3, _2));}#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?