The C language allows you to define new names for existing types using typedefs. Here is an example:
typedef int money; int x; money y; typedef money dollars; dollars z; x = 10; // OK because x and 10 are of type int y = x; // OK because x and y are of type int z = y; // OK because y and z are of type intA typedef can occur anywhere that a variable declaration (local or global) can occur. The usual static scoping rules apply to the names in typedefs. Note that
typedef int money;is considered to be a declaration of the name money and that both
money x; and
typedef money dollars; are considered to be uses of the name
Assume that the Drewno Mars language has been extended with typedefs. Now consider the name-analysis phase of the compiler. Note that, in addition to the usual errors for multiply-defined names and for uses of undefined names, the name analyzer must enforce the following rules:
For the remaining questions, you will be asked various questions about how this extension to the language might change semantic analysis. Illustrate your answers about name analysis by showing the entries that would be in the symbol table after processing the following declarations:
typedef string date; date today; typedef int dollars; dollars salary; typedef dollars moreDollars; moreDollars md; int d;
You may answer the questions about type analysis with your own examples or with descriptions of what changes should be made. If no changes to an analysis is needed, you may simply state that.
What should be done to process a typedef
typedef T xxx; in name analysis and type analysis?
What should be done to process a declaration of a variable, function, or parameter named xxx and declared to be of type T in name analysis and type analysis?
What should be done to process the use of a name xxx in a statement in name analysis and type analysis?