The Gateway to Computer Science Excellence
First time here? Checkout the FAQ!
+15 votes

The expression $( a * b) * c \; op \dots$

where ‘op’ is one of ‘$+$’, ‘$*$’ and ‘$\uparrow$’ (exponentiation) can be evaluated on a CPU with single register without  storing the value of ($a * b$) if

  1. $\text{‘op’}$ is ‘$+$’ or ‘$*$’

  2. $\text{‘op’}$ is ‘$\uparrow$’ or ‘$*$’

  3. $\text{‘op’}$ is ‘$\uparrow$’ or ‘$+$’

  4. not possible to evaluate without storing

asked in Compiler Design by Veteran (59.5k points)
edited by | 712 views

2 Answers

+18 votes
Best answer


$\uparrow$ has higer precedence than $\{*,+,-,/ \}$

So, if op $ = \uparrow$ implies, we need to evaluate the right hand side of $\uparrow$ first and then do the lhs part, which would definitely require us to store the value of lhs

but if its a '$+$' or '$*$' , we don't need to store the values evaluated, and on the go can do the operation directly on one register.

answered by Junior (909 points)
edited by
+4 votes
Let say, the expression is one of the below:




In any case, brackets has the highest priority always. So I have to compute brackets first. Now, for + and *, I can do the rest of the operation and save results in the same register. But for exponentiation, I have to store the result of a*b, then do the computation of c^d, then multiply these two results.

So option A is correct.
answered by (159 points)

Related questions

Quick search syntax
tags tag:apple
author user:martin
title title:apple
content content:apple
exclude -tag:apple
force match +apple
views views:100
score score:10
answers answers:2
is accepted isaccepted:true
is closed isclosed:true

39,441 questions
46,623 answers
57,028 users