The Dragon book it is :)

On Wed, Jul 14, 2010 at 11:01 AM, Gene <[email protected]> wrote:

> The classic reference is "the Dragon Book", Aho Sethi and Ullman,
> Compiler Design, but there are many others. Louden Compiler
> Construction is a little easier to read.  I have not found much
> comprehensive material in the Internet.  A good book is the best way
> to go.
>
> On Jul 14, 12:13 am, Anand <[email protected]> wrote:
> > @ Gene:  Thanks for the nice explanation. Any pointers on where we can
> find
> > such detailed explanation about compilation/compiler.
> >
> >
> >
> > On Tue, Jul 13, 2010 at 6:25 PM, Ashish Goel <[email protected]> wrote:
> > > the highest scope may not be true, it uses the current scope to chk if
> the
> > > variable is defined there
> > > any pointer to study material?
> >
> > > Best Regards
> > > Ashish Goel
> > > "Think positive and find fuel in failure"
> > > +919985813081
> > > +919966006652
> >
> > > On Wed, Jul 14, 2010 at 6:28 AM, Gene <[email protected]> wrote:
> >
> > >> On Jul 8, 1:34 pm, gopinath sikha <[email protected]> wrote:
> > >> > Hi guys,
> >
> > >> > How gcc or any c compiler maintains the scope of the variable?
> > >> > Especially all the static variable are maintained in the data
> section.
> >
> > >> > Can anyone please respond.
> >
> > >> As a compiler processes the program, it maintains a table that maps
> > >> identifier strings to associated attributes like type information,
> > >> line number of declaration, etc., etc.  This is called the symbol
> > >> table. It's often implemented as a hash table.  Self-balancing trees
> > >> work fine, too.
> >
> > >> There are at least a couple of different ways to process scopes.  Here
> > >> is one.
> >
> > >> The symbol table must allow duplicate keys for this technique, so it's
> > >> a multi-map rather than map.
> >
> > >> The compiler gives every scope a number.  It does this by keeping a
> > >> counter initialized at 0.  Every time it sees a {, it increments the
> > >> counter and the new value becomes the scope number.  It also pushes
> > >> each new scope number on a stack.  At any given time, the stack
> > >> contains the numbers of open scopes, with the innermost scope at the
> > >> top.
> >
> > >> When the compiler processes a declaration, the declared name is added
> > >> to the symbol table, and the scope number becomes one of its
> > >> attributes.  If an attempt is made to add a variable twice with the
> > >> same scope number, a re-declaration error is printed for the user.
> >
> > >> When the compiler processes a variable use (as in x = 42), it looks up
> > >> the variable (x) in the symbol table.  If there is more than a single
> > >> x, it uses the one with the highest scope number because this must be
> > >> the "inner" scope where there is an x.  If the variable (x) is not
> > >> found at all, then an "undefined identifier" error is printed for the
> > >> user.
> >
> > >> When the compiler processes the end of a scope, a }, it pops the scope
> > >> stack.  Say the closing scope is number N.  Then the compiler removes
> > >> all symbol table entries with scope N as attributes and keeps on
> > >> processing.
> >
> > >> That's about it.  There are some details like handling the id's for
> > >> fields within structs, but I'm sure you can figure out how that works
> > >> on your own.  I.e. when you have struct point { float x, y; } x;  x.x
> > >> = 42; think about what the compiler is doing when it processes the
> > >> { in the strut declaration, when it sees the x and the y, when it sees
> > >> the second x and the third.
> >
> > >> Cheers.
> >
> > >> --
> > >> You received this message because you are subscribed to the Google
> Groups
> > >> "Algorithm Geeks" group.
> > >> To post to this group, send email to [email protected].
> > >> To unsubscribe from this group, send email to
> > >> [email protected]<algogeeks%[email protected]>
> <algogeeks%2bunsubscr...@googlegroups .com>
> > >> .
> > >> For more options, visit this group at
> > >>http://groups.google.com/group/algogeeks?hl=en.
> >
> > >  --
> > > You received this message because you are subscribed to the Google
> Groups
> > > "Algorithm Geeks" group.
> > > To post to this group, send email to [email protected].
> > > To unsubscribe from this group, send email to
> > > [email protected]<algogeeks%[email protected]>
> <algogeeks%2bunsubscr...@googlegroups .com>
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/algogeeks?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<algogeeks%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/algogeeks?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to