qi 문법에서 키워드/식별자 사용의 뉘앙스와 관련된 몇 가지 게시물을 보았습니다. 그러나이 방법이 부스트 예제에서 어떻게 입증되었는지 이해할 수 없습니다boost :: spirit :: qi 키워드 및 식별자
qi::symbols<char> keywords;
예 키워드 세트 :
keywords.add
("foo")
("bar")
;
식별자 규칙 선언 :
...키워드 선언 작동하도록되어 여기
qi::rule<std::string::const_iterator, std::string(), ascii::space_type> identifier;
은 식별자 규칙은 제나라 CALC 및 컴파일러 예에서 정의하는 방법은 다음과 같습니다
identifier = !keywords >> qi::raw[ qi::lexeme[ (qi::alpha | '_') >> *(qi::alnum | '_') ] ];
은 아마도 내가 제나라의 구문이 잘못 읽고 있어요,하지만이 모든 문자를 허용하지 않을 것이라고 나에게 보인다 일치하거나 은으로 시작합니다. 전체 키워드 일치를 거부하면 원하는 동작입니다. 그러나 키워드 "foo"로 시작하는 경우에도 "음식"을 식별자로 사용하고 싶습니다. 이것은 꽤 표준적인 유스 케이스처럼 보이지만 실제로 이것을 못살게 굴는 문서를 찾는 데 어려움이 있습니다.
누구나 키워드와 정확히 일치하는 항목 만 거부하는 식별자 규칙을 제공 할 수 있습니까?
감사합니다.
사실이 질문은 투표권이 있습니다.훨씬 더 많이 실현되어야하며, 성령의 튜토리얼에서 종종 다루어 져야합니다. 종종 간과되기도합니다 (분명히 ** [컴파일러 샘플] (http://www.boost.org/doc/libs/1_57_0/libs/spirit/example/qi/compiler_tutorial /) ** ok) – sehe