저는 인터럽터를 사용하여 자신의 연산자를 정의 할 수 있습니다. 목표는 exp op exp op exp
과 같이 보이는 AST를 취하여 두 연산자의 상대적 우선 순위와 연관성에 따라 exp op (exp op exp)
또는 (exp op exp) op exp
으로 변환하는 것입니다. 언어는 동적이므로 사용할 연산자의 버전을 알 수있는 유일한 방법은 첫 번째 표현식을 평가하고 어떤 버전의 op
을 사용할지 묻는 것입니다.올바른 연관 단락 회로 연산자가 있습니까
op
는 ||
경우 때문에 우리는 두 번째 식을 계산할 수 없다 (통상적으로 사용되는) 제 exp
가 false
이면 우리가 단락 할 수 있어야한다는 것이 중요하다.
일부 연산자가 올바른 연결 및 단락 회로 모두에 문제가 발생할 수 있습니다. 내 질문에 거기에 공통적으로 사용하는 오른쪽 연관, 단락 연산자 ("공통"의 선택한 값에 대한)?
N.b. 대입은 파서가 별도로 처리하므로 =
은 연산자가 아니며 a (op)= b
은 a = a op b
의 구문 설탕입니다.
사실 올바른 연관성은 훨씬 더 의미가 있습니다. 'a or b or c or d or e'의 파스 트리를 시각화 해보십시오. 왼쪽 연관성이 있고 'a'가 참일 때, 우리는 나무 위로 올라가고 위로 올라가 정상에 오르게됩니다. 우회적 인 경우, 'a'가 맞으면 타 - 다, 끝났어! 나머지 부분은 무시하는 것이 훨씬 쉽습니다. 옳은 연관성에 문제가있는 이유는 무엇입니까? 그들은 둘 다 같은 행동 IMHO 있습니다. –