Write a compiler for a language that looks ahead and multiple files?

Posted by acidzombie24 on Stack Overflow See other posts from Stack Overflow or by acidzombie24
Published on 2009-10-16T15:32:57Z Indexed on 2010/04/12 13:13 UTC
Read the original article Hit count: 431

In my language I can use a class variable in my method when the definition appears below the method. It can also call methods below my method and etc. There are no 'headers'. Take this C# example.

class A
{
    public void callMethods() { print(); B b; b.notYetSeen();
    public void print() { Console.Write("v = {0}", v); }
    int v=9;
}

class B
{
    public void notYetSeen() { Console.Write("notYetSeen()\n"); }
}

How should I compile that? what i was thinking is:

  • pass1: convert everything to an AST
  • pass2: go through all classes and build a list of define classes/variable/etc
  • pass3: go through code and check if there's any errors such as undefined variable, wrong use etc and create my output

But it seems like for this to work I have to do pass 1 and 2 for ALL files before doing pass3. Also it feels like a lot of work to do until I find a syntax error (other than the obvious that can be done at parse time such as forgetting to close a brace or writing 0xLETTERS instead of a hex value). My gut says there is some other way.

Note: I am using bison/flex to generate my compiler.

© Stack Overflow or respective owner

Related posts about compiler-theory

Related posts about compiler