2012-08-10 2 views
1

나는 boost :: proto를 사용하여 매우 제한된 파서 연결자 라이브러리를 정의하려고 시도하고 있으며, 기본이 아닌 기본 proto 터미널을 정의 할 수 있는지 궁금해하고있다. 내가 프로토 식의 부스트 프로토 터미널로 사용하려는기본이 아닌 boost :: proto 터미널을 구축했다

struct symbol 
{ 
    symbol(const string &str): str_(str) {} 
    bool operator()(const string &str) const { 
     return (str == str_); 
    } 

    string str_; 
}; 

:

는이 같은 구조를 가지고있다. 나는 BOOST_PROTO_DEFINE_OPERATORS의 도움으로 작동하도록 얻을 수 있었다, 그러나 나는 자주 프로토 식 내부 proto::lit()에 포장해야하는 것이 다소 불편 찾을 :

match(symbol("abc") >> (proto::lit(symbol("xyz")) | symbol("klm"))) 

나는 프로토 터미널을 만들 수 있는지 궁금 해서요

proto::terminal<symbol>::type sym; 

문자열 인수를 받아서 symbol 생성자에 전달할 수 있습니다

참고 : 성령에 대해 알고 있지만 제 컴파일러가이를 잘 지원하지 않습니다!

많은 lit 같은
proto::terminal<symbol>::type sym(std::string const& s) 
{ return { symbol(s) }; } 

터미널로의 매개 변수를 켤 수있는 기능 템플릿은 다음과 같습니다

답변

5

당신은 이름 sym 터미널을 반환하는 함수를 만들 수 있습니다.

+0

바로! 얼마나 어리석은 나를 :) 감사합니다! –

관련 문제