To make our C-- language more powerful, we sometimes need to learn from other ex
ID: 3738495 • Letter: T
Question
To make our C-- language more powerful, we sometimes need to learn from other existing languages. The C language allows you to define new names for existing types using typedefs. Here is some example code that uses typedefs:
The first typedef defines money to be a synonym for int. Any declaration that follows this typedef can use money instead of int. The second typedef defines dollars to be a synonym for money, which makes it a synonym for int. Any declaration that follows this typedef can use dollars instead of int.
Typedefs can also be used with struct types:
A typedef can occur anywhere that a variable declaration (local or global) can occur. The usual C scoping rules apply to the names in typedefs.
a. Assume that the following productions have been added to the grammar for the c-- language:
What other productions need to be changed and/or added to the c-- grammar to allow typedefs?
b. 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:
The declaration typedef T xxx; is an error if T is not a built-in type (e.g., int, bool) or a struct type (in which case T will be of the form: struct ttt) or a new type defined by a previous typedef in the current or an enclosing scope.
The declaration typedef T xxx; is an error if xxx has already been declared in the current scope (as a variable, function, parameter, or new type).
A variable, function, or parameter can only be declared to be of type T if T is either a built-in type or a new type defined by a previous typedef in the current or an enclosing scope. (A variable can still be declared to be of type struct ttt as before.)
Answer each of the following questions:
1. What should be done to process a typedef: typedef T xxx;?
2. What information should be stored with each name in the symbol table?
Explanation / Answer
ANSWER:
Productions need to be changed and/or added to the cats grammar to allow typedefs uses declspecs_ts after_type_declaration.
typedef int data1;
typedef float data2;
{
data1 data2;
}
declspecs_nots notype_declaration
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.