Related articles |
---|
Interpreted language: Choosing intermediate code perfry@got.wmdata.se (Per Frykenvall) (1995-05-12) |
Newsgroups: | comp.compilers |
From: | Per Frykenvall <perfry@got.wmdata.se> |
Keywords: | interpreter, design, question, comment |
Organization: | WM-data Applikationslosningar |
Date: | Fri, 12 May 1995 07:16:00 GMT |
What are the pros and cons of using an intermediate code, as
output of a compiler (and to be executed by an interpreter), based on:
(1) Postfix operators, pushing operands on a stack
a := f(a+b,2*(a+b)); -> PUSH a
PUSH b
ADD
PUSH 2
MUL // 2*(a+b) on top of stack
PUSH a
PUSH b
ADD // a+b on top of stack
CALL f // f will push return value
POP a // assign return value to a
POP // adjust stack
POP
(2) Similar to machine language
a := f(a+b,2*(a+b)); -> ADD a,b,t1 // t1=a+b
MUL 2,t1,t1 // t1=2*t1
PARAM t1
ADD a,b,t1 // t1=a+b
PARAM t1
CALL f,2,a // a=f(2 parameters)
(Of course, the output should be binary coded)
Source in our case is a PL/1 derivate.
The language I depicted in (2) is on the "three-address code" form
described in the dragon book. Are there any reasons not to use three-address
code as final output of the compiler?
References on these topics are welcome.
Regards, Per
* Per Frykenvall Internet: per.frykenvall@got.wmdata.se *
* WM-data Applikationslosningar AB Fax: +46-31-45 05 88 *
* Box 2065, S-421 02 V.FROLUNDA, Sweden Voice: +46-31-89 04 78 *
[It's a little eaiser to build ab RPN interpreter than a 3-address one, but
the main advantage seems to me to be that RPN lets you avoid having to deal
with allocation of temporaries. -John]
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.