부울 표현식 구문 분석은 컴퓨터 과학의 기본 작업입니다. 여기에는 사람이 읽을 수 있는 표현을 컴퓨터가 해석할 수 있는 데이터 구조로 변환하는 작업이 포함됩니다.
부울 표현식을 구문 분석하는 널리 사용되는 접근 방식 중 하나는 Boost Spirit 라이브러리를 사용하는 것입니다. Spirit은 문법 정의 및 구문 분석을 위한 강력하고 유연한 프레임워크를 제공합니다.
다음은 Spirit을 기반으로 한 C 구현입니다.
#include <boost/spirit/include/qi.hpp> #include <boost/variant/recursive_wrapper.hpp> using namespace boost::spirit; using namespace boost::spirit::qi; struct op_or {}; struct op_and {}; struct op_xor {}; typedef std::string var; template <typename tag> struct binop; template <typename tag> struct unop; typedef boost::variant<var, boost::recursive_wrapper<unop <op_not> >, boost::recursive_wrapper<binop<op_and> >, boost::recursive_wrapper<binop<op_xor> >, boost::recursive_wrapper<binop<op_or> > > expr; template <typename tag> struct binop { explicit binop(const expr& l, const expr& r) : oper1(l), oper2(r) { } expr oper1, oper2; }; template <typename tag> struct unop { explicit unop(const expr& o) : oper1(o) { } expr oper1; }; template <typename It, typename Skipper = qi::space_type> struct parser : qi::grammar<It, expr(), Skipper> { parser() : parser::base_type(expr_) { using namespace qi; expr_ = or_.alias(); not_ = ("not" > simple ) [ _val = phx::construct<unop <op_not> >(_1) ] | simple [ _val = _1 ]; or_ = (xor_ >> "or" >> or_ ) [ _val = phx::construct<binop<op_or> >(_1, _2) ] | xor_ [ _val = _1 ]; xor_ = (and_ >> "xor" >> xor_) [ _val = phx::construct<binop<op_xor> >(_1, _2) ] | and_ [ _val = _1 ]; and_ = (not_ >> "and" >> and_) [ _val = phx::construct<binop<op_and> >(_1, _2) ] | not_ [ _val = _1 ]; simple = (('(' > expr_ > ')') | var_); var_ = qi::lexeme[ +alpha ]; } private: qi::rule<It, var() , Skipper> var_; qi::rule<It, expr(), Skipper> not_, and_, xor_, or_, simple, expr_; };
파서를 사용하려면:
auto expr = "a and b xor (c and d or a and b);"; expr parsed_expr; qi::parse(expr.begin(), expr.end(), parser<std::string::const_iterator>(), parsed_expr); std::cout << "Parsed expression: " << parsed_expr << std::endl;
Parsed expression: ((a and b) xor ((c and d) or (a and b)))
이 구현은 Boost Spirit의 재귀 하강 파서 생성기를 활용하여 구문 분석된 표현식을 나타내는 구문 트리. 우선순위 규칙을 올바르게 처리하여 표현식의 논리적 구조를 정확하게 포착하는 트리가 생성됩니다.
위 내용은 Boost Spirit 라이브러리를 사용하여 C에서 부울 표현식을 어떻게 구문 분석할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!