@ 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]>
>> .
>> 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