2013-08-20 1 views
1

내 질문은 매우 간단합니다, 내 렉스 클래스 (lex::lexer<T> 확장)에서, 나는 다음과 같은;부스트 :: 성령 :: 렉스; 토큰 "||"을 어떻게 지정합니까?

this->self.add 
    ... 
    ("&&", AND_AND) 
    ("||", OR_OR) 
    ... 

괜찮 았지만 SegFault를 런타임에 실행하는 내 생성자 내부. 이 문제는 아주 명백합니다. |은 정규식 시스템에서 '또는'연산자입니다. 어떻게이 문제를 해결할 수 있습니까?

답변

4

\X 

X는 A, B, E, N, R, F, t, \는 x V 다음 ANSI-C 통역 인 경우

http://www.boost.org/doc/libs/1_54_0/libs/spirit/doc/html/spirit/lex/quick_reference/lexer.html 가입일. 그렇지 않으면 문자 X의 원인, 그래서 당신은

("\\|\\|", OR_OR) 

각 쌍의 첫 번째 백 슬래시는 C++ 문자열 파서 이스케이프 문자로 처리됩니다을 사용

(예 : * 같은 연산자를 탈출하는 데 사용) 두 번째는 문자열 내용에 배치됩니다. 문자열 내용의 백 슬래시는 Spirit :: Lex에서 볼 수 있으며 정규 표현식 연산자를 벗어나려고합니다.

+0

와우, 나는 똑같은 페이지를보고 있었는데, 이것을 보지 못했습니다. 늦어지고있을 것입니다. 어쨌든 감사합니다! 받아 들여! – Skeen

관련 문제