나는 boost spirit x3을 가진 파서를 연구 중이다. 나는 문법을 끝내고 파서는 예상대로 파싱한다. 이제 오류 처리 기능을 추가하여 문법에 예상 지점을 추가해야합니다. 제 질문은 정확히 "후행"연산자 대신 >
연산자를 사용할 수 있습니까? >>
? 문법의 다른 부분에서 a >> b
이 발생하지 않으면 a > b
과 같이 사용할 수 있습니까?정확히 언제 기대 연산자를 사용할 수 있습니까?
1
A
답변
6
기대 연산자는 기본적으로 백 트랙킹을 비활성화합니다. b
이 항상 a
을 따라야하는 경우 예상 지점 (>
)을 사용하는 것이 좋습니다. a
다음에 다른 결과가 나오는 논리 조합이 있다면 기대를 사용해서는 안되며 대신 >>
을 사용해야합니다.
문법에 다른 대안이있는 경우 유효한 백 트랙을 물리 친 적이 없다는 점에 특히주의해야합니다.
if_statement = lit("if") > '(' > statement > ')';
if
키워드이며해야합니다 당신이 괄호로 if 문의 조건식을 필요로하는 언어 파서를 작성하는 경우
예를 들어, 유효한 문법은 포함 할 수 있습니다 그 뒤에는 (
이옵니다. 아마도 if
과 (
사이에 공백이 있지만 if
키워드 뒤에 (
이 와야합니다.
(참고 :. 현실은 문법이 조금 더 복잡한보다 때문이다 if
는 그냥 나 편지로 시작하는 일부 토큰과 일치하지 수있는 키워드 및하려면 F)
당신이 할 수있는 규칙이 발생할 때 a
뒤에 항상 b
을 붙여야한다는 것을 알고있는 경우 문법에 a > b
을 사용하십시오. 전반적인 문법에 어딘가에 a >> b
이있을 수 있습니다.
'>'과'>>'을 섞어 쓰면 자동 속성 전파와 변환이 복잡해질 수 있다는 점에 유의해야한다. (리터럴 질문 _ "정확히 기대 연산자를 사용할 수있을 때?"_). 문제는 'vector3'이 예를 들어 'vector2 , double>'그런 경우에 –
sehe
@sehe X3에 대한 경험이별로 없기 때문에 슬프게도 내가 말할 수는 없지만 Joel de Guzman은이 문제를 기억하고있는 것 같다. 제나라에서 많은 두통을줬고, X3에서 이미 해결되었습니다. 추신 : [진술에 대한 링크를 찾았습니다] (http://boost.2283326.n4.nabble.com/Unexpected-behavior-using-versus-tp4662087p4662153.html). – llonesmiz