Add nested-function support in a language the based on a stack-machine
Mon, 12 Feb 2018 11:25:36 -0800 (PST)

          From comp.compilers

Related articles
Add nested-function support in a language the based on a stack-machine (2018-02-12)
| List of all articles for this month |

Newsgroups: comp.compilers
Date: Mon, 12 Feb 2018 11:25:36 -0800 (PST)
Organization: Compilers Central
Injection-Info:; posting-host=""; logging-data="60035"; mail-complaints-to=""
Keywords: code, question, comment
Posted-Date: 12 Feb 2018 15:51:16 EST

Suppose I have a simple C-like programming language:

        int foo() {
                int x = 10;
                int bar(y int) {
                        return y * 2
                return bar() + x

Like you can see, it supports nested functions.

I already implemented the lexing-parsing phases, and now I'm working
on the code generation and the stack-machine. most of the operations,
and the simple flow-control already implemented but I need some
help/ideas how to solve the nested-function task.

The stack-machine has two registers, accumulator, and a temporary register.

Each frame contains: `[arguments, local variables, return address,
caller frame and stack pointer, temporaries and data operations]`. I
read about two ways to implement the nested-function. one, using an
activation-link (also called static-link), and display. Is there any
better idea to handle this? If I'll choose one of these idea, is it
compile time calculation or do I need to store something in runtime?
if it's a runtime thing, what's the time complexity for it? is it O(1)
operation, or something like O(k) where k is the depth of the
[This at least used to be a standard topic in compiler texts. You should
be able to do either in O(1). -John]

Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.