2013-08-21 2 views
2

접미사을 C로 표현하는 동안 우리의 토큰이 연산자 인 경우 가장 우선 순위가 높은 방식으로 스택을 배치해야합니다.RPN의 연산자 우선 순위

제 질문은 가장 높은 우선 순위를 가진 연산자 *, /, %입니다.

우리는 연관성도 고려해야합니까? 이 모든 연산자는 왼쪽에서 오른쪽 연관성이므로 /*보다 높은 우선 순위를 갖습니까?

+0

알아 내기 위해 테스트를 작성하는 이유는 무엇입니까? – Soosh

+2

@AmirNoori 어떤 테스트가 있습니까? 모든 가능성을 철저히 시험해야합니다. 근원적 ​​인 원리를 구하는 것이 훨씬 더 합리적입니다. – EJP

+4

잠깐 ... RPN의 요점은 당신이 * 연산자 우선 순위가 없다는 것입니다. –

답변

0

내 질문은 연산자 우선 순위가 가장 높은 *, /, % 중 하나입니다.

이들은 동일하며, +- (이진수)이 동일합니다.

연관성도 고려해야합니까?

예, 예를 들어 1 + 2 + 31, 2, 3, ADD, ADD.

에 모든 운영자가 왼쪽에서 오른쪽으로했기 때문에 연관성을 반대 */이상 높은 선호도를 얻을 것이다, (1 + 2) + 3, 즉 1, 2, ADD, 3, ADD, 될 필요가 ?

어소시에이션은 precence와는 아무런 관련이 없습니다. 질문은 의미가 없습니다.

하지만 기존 RPN 표현을 계산하는 중이라면 제목에서 말한 것처럼 내가 왜이 것을 묻는 지 알 수 없습니다. 연산자를 푸시하고 연산자가 발생할 때 평가합니다. 번역에 대한 질문이 RPN입니까?

+0

@ GrijeshChauhan 두 번째 대답은 무엇입니까? 너 무슨 소리 야? – EJP

+0

질문에 눈치 채면 두 번째 점에서 단어 접미사 표현식으로 혼란 스럽습니다.'1 2 + 3 +'의 후미 번체에 해당하는 접미사를 부여하고 이에 대한 응답을 투표하십시오. –

+0

@GrijeshChauhan '1,2, ADD, 3, ADD' 부분을 의미합니까? 그렇다면 왜 그렇게 말하지 않습니까? 그렇지 않다면, 나는 아직도 당신이 무슨 말을하고 있는지 모른다. – EJP

3

연산자 *, /, %precedence에서 동일하며 연관성은 오른쪽에서 왼쪽입니다.

a/b * c   /* both operators have same precedence */ 

가 동일로 :

(a * b)/c 

유사하게 표현 같은 : 그래서 같은 표현 :

(a/b) * c 

그래서 심지어 사업자이기 때문에

a * b/c   /* both operators have same precedence */ 

은 동일합니다 우선 순위는 같지만, (괄호없이) 표현식에 나타나면 왼쪽에서 오른쪽으로 결합되어 있기 때문에 대부분의 연산자가 우선 순위가 더 높습니다.a/b * c이와 동일합니다 :

개념적으로 우리가 표현 그래서 비록, 연산자의 우선 순위를 덮어 표현식에서 괄호를 사용 (a/b) * c하지만 우리는 먼저 a/(b * c)으로 식을 작성하여 ()를 사용하여 *을 평가하기 위해 강제로 할 수 있습니다. 코드를 작성하는 동안 연산자 우선 순위에 혼란이 있다면 괄호를 사용합니다.

편집 : POSTFIX 및 PREFIX 양식에서

괄호 ()를 사용하지 마십시오. 연산자의 우선 순위는 표현식에 나타나는 순서대로 결정되므로 표현식을 평가하는 동안 수행 할 다음 연산을 검색 할 필요가 없습니다. 따라서 평가는 이됩니다.

INFIX 표현식에서 연산자의 우선 순위는 괄호로 덮어 쓸 수 있습니다. (). 따라서 괄호는 중위 표현식에 있으며, 다음에 수행 할 연산을 검색해야합니다. a + b % d-이며, 표현의 평가는 이다.
이것이 컴퓨터 과학에서 변환이 유용한 이유입니다.

그래서 컴파일러는 중위어 표현식을 문법 규칙을 사용하여 동등한 후위어 형식으로 변환 한 다음 대상 코드를 생성하여 표현식 값을 계산합니다. 이것이 우리가 접미사와 접두사 형식을 연구하는 이유입니다.

및 우선 순위와 연산에 따라 다음 식 규칙 :

a/b * c   /* both operators have same precedence */ 

,536로 변환한다

a b * c/

표현 :

a * b/c   /* both operators have same precedence */ 

가 될 것이다로 변환

+1

네, 저의 답변이 꽤 좋다고 생각합니다. 고마워요 !! – KShirish

+0

@KayShree 지금 업데이트 된 답변 읽기. –

7

우선 순위은 보통 중절 표기법에만 적용됩니다. Postfix (및 Prefix) 표기법은 대개 어떤 연산자가 어떤 연산자와 연관되는지 명시 적으로 지정하는 것으로 간주됩니다. 우선 순위는 구문 분석에 모호한 부분이있을 때만 작용합니다. 구문 분석은 후치 표기법의 경우와 다릅니다. 항식

4 * 5 + 3/12 

에서 발생

선행의 문제는 단순히 RPN 양식

4 5 * 3 + 12/

또는 접두어 양식

(/ (+ (* 4 5) 3) 12) 

로 변환 후 존재하지 않습니다.

Shunting-Yard Algorithm과 같은 것을 고려할 때 혼란을 일으킬 가능성이 있습니다.이 중독 표현을 RPN 표현을 생성하거나 직접 평가하는 데 사용할 수 있습니다.우선 순위가 낮은 연산자가 강제로이를 팝하고 평가 (또는 출력) 할 때까지 운영자를 보조 스택으로 연기하여 연산자 우선 순위를 처리합니다.