- What are the arguments for and against Java’s implicit heap storage recovery, when compared with the explicit heap storage recovery required in C++? Consider real-time systems.
Answer :
Implicit eliminates the creation of dangling pointers. Disadvantage : cpu-time to do recovery, sometimes when there’s plenty of heap storage so recovery isn’t necessary.
- What are the arguments for the inclusion of enumeration types in C#, although they were not in the first few versions of Java?
Answer :
Java are strongly typed in the same sense as Ada. Types can be explicitly cast, which could result in a type error. However, there are rules of a language have an important effect on the value of an arithmetic operator with one floating-point operand and one integer operand is legal. The value of the integer operand is coerced to floating-point, and a floating point operation takes place. This is what is usually intended by the programmer.
- What would you expect to be the level of use of pointers in C#? How often will they be used when it is not absolutely necessary?
Answer :
In C#, memory address pointers can only be used within blocks specifically marked as unsafe, and programs with unsafe code need appropriate permissions to run.
- What array operations are provided specifically for single-dimensioned arrays in Ada?
Answer :
There are specifically a array operations provided for single-dimensioned arrays in Ada, it is “Catenation” specified by the associative array.
- Define row major order and column major order.
Answer :
For row major order, the elements of the array that have as their first subscript the lower bound value of that subscript are stored first, followed by the elements of the second value of the first subscript, and so forth. If the array is a matrix, it is stored by rows.For column major order, the elements of an array that have as their last subscript the lower bound value of that subscript are stored first, followed by the elements of the second value of the last subscript, and so forth. If the array is a matrix, it is stored by columns.
- What is an access function for an array?
Answer :
Access function maps subscript expressions to an address in the array.
- What are the required entries in a Java array descriptor, and when must they be stored (at compile time or run time)?
Answer :
In Java all arrays are fixed heap-dynamic arrays. Once created, tese arrays keep the same subscript ranges and storage. Secondarily, Java supports jagged arrays and not rectangular arrays. Being a fixed heap-dynamic array the entries will be established and fixed at run time.
- What is the structure of an associative array?
Answer :
The structure of an associative array is the unordered collection of elements indexed by an equal number of KEYS.
7. Assume the following JavaScript program was interpreted using static-scoping rules. What value of x is displayed in function sub1? Under dynamic-scoping rules, what value of x is displayed in function sub1 ?
Answer :
var x;
function sub1() {
document.write(“x = ” + x + “<br />”);
}
function sub2() {
var x;
x = 10;
sub1();
}
x = 5;
sub2();
var x;
function sub1() {
document.write(“x = ” + x + “<br />”);
}
function sub2() {
var x;
x = 10;
sub1();
}
x = 5;
sub2();
Answer:
Static scope: x=5, Dynamic scoping: x=10.
Static scope: x=5, Dynamic scoping: x=10.
8. Consider the following JavaScript program:
Answer :
var x, y, z;
function sub1() {
var a, y, z;
function sub2() {
var a, b, z;
. . .
}
. . .
}
function sub3() {
var a, x, w;
. . .
}
List all the variables, along with the program units where they are declared, that are visible in the bodies of sub1, sub2, and sub3, assuming static scoping is used.
Answer:
Sub1: a(sub1), y(sub1), z(sub1), x(main)
Sub2: a(sub2), b(sub2), z(sub2), y(sub1), x(main)
Sub3: a(sub3), x(sub3), w(sub3), y(main), z(main)
var x, y, z;
function sub1() {
var a, y, z;
function sub2() {
var a, b, z;
. . .
}
. . .
}
function sub3() {
var a, x, w;
. . .
}
List all the variables, along with the program units where they are declared, that are visible in the bodies of sub1, sub2, and sub3, assuming static scoping is used.
Answer:
Sub1: a(sub1), y(sub1), z(sub1), x(main)
Sub2: a(sub2), b(sub2), z(sub2), y(sub1), x(main)
Sub3: a(sub3), x(sub3), w(sub3), y(main), z(main)
9. Consider the following Python program:
Answer :
x = 1;
y = 3;
z = 5;
def sub1():
a = 7;
y = 9;
z = 11;
. . .
def sub2():
global x;
a = 13;
x = 15;
w = 17;
. . .
def sub3():
nonlocal a;
a = 19;
b = 21;
z = 23;
. . .
. . .
List all the variables, along with the program units where they are
declared, that are visible in the bodies of sub1, sub2, and sub3, assumingstatic scoping is used.
x = 1;
y = 3;
z = 5;
def sub1():
a = 7;
y = 9;
z = 11;
. . .
def sub2():
global x;
a = 13;
x = 15;
w = 17;
. . .
def sub3():
nonlocal a;
a = 19;
b = 21;
z = 23;
. . .
. . .
List all the variables, along with the program units where they are
declared, that are visible in the bodies of sub1, sub2, and sub3, assumingstatic scoping is used.
Answer:
point 1 : x = 1(main), y = 9 (sub1), z = 11(sub1) ,a = 7(sub1);
point 2 : x =15(sub2), w = 17(sub2), a = 13(sub2), y = 9(sub1);
point 3 : x = 15(sub2), b = 21(sub3), a = 19(sub1), z = 23(sub3), w = 17(sub 2);
point 4 : x = 15(sub2), b = 21(sub3), a = 19(sub1), z = 23(sub3), w = 17(sub 2);
point 1 : x = 1(main), y = 9 (sub1), z = 11(sub1) ,a = 7(sub1);
point 2 : x =15(sub2), w = 17(sub2), a = 13(sub2), y = 9(sub1);
point 3 : x = 15(sub2), b = 21(sub3), a = 19(sub1), z = 23(sub3), w = 17(sub 2);
point 4 : x = 15(sub2), b = 21(sub3), a = 19(sub1), z = 23(sub3), w = 17(sub 2);
10. Consider the following C program:
Answer :
void fun(void) {
int a, b, c; /* definition 1 */
. . .
while (. . .) {
int b, c, d; /*definition 2 */
. . . 1
while (. . .) {
int c, d, e; /* definition 3 */
. . . 2
}
. . . 3
}
. . . 4
}
For each of the four marked points in this function, list each visible variable,
along with the number of the definition statement that defines it.
int a, b, c; /* definition 1 */
. . .
while (. . .) {
int b, c, d; /*definition 2 */
. . . 1
while (. . .) {
int c, d, e; /* definition 3 */
. . . 2
}
. . . 3
}
. . . 4
}
For each of the four marked points in this function, list each visible variable,
along with the number of the definition statement that defines it.
Answer:
Point 1: a:1, b:2, c:2, d:2
Point 2: a:1, b:2, c:3, d:3, e:3
Point 3: a:1, b:2, c:2, d:2
Point 4: a:1, b:1, c:1
Point 1: a:1, b:2, c:2, d:2
Point 2: a:1, b:2, c:3, d:3, e:3
Point 3: a:1, b:2, c:2, d:2
Point 4: a:1, b:1, c:1
11. Consider the following skeletal C program:
Answer :
void fun1(void); /* prototype */
void fun2(void); /* prototype */
void fun3(void); /* prototype */
void main() {
int a, b, c;
. . .
}
void fun1(void) {
int b, c, d;
. . .
}
void fun2(void) {
int c, d, e;
. . .
}
void fun3(void) {
int d, e, f;
. . .
}
Given the following calling sequences and assuming that dynamic scoping
is used, what variables are visible during execution of the last function
called? Include with each visible variable the name of the function in
which it was defined.
a. main calls fun1; fun1 calls fun2; fun2 calls fun3.Answer:
var a = main ; var b = fun1 ; var c = fun2 ;var d,e,f = fun3
void fun1(void); /* prototype */
void fun2(void); /* prototype */
void fun3(void); /* prototype */
void main() {
int a, b, c;
. . .
}
void fun1(void) {
int b, c, d;
. . .
}
void fun2(void) {
int c, d, e;
. . .
}
void fun3(void) {
int d, e, f;
. . .
}
Given the following calling sequences and assuming that dynamic scoping
is used, what variables are visible during execution of the last function
called? Include with each visible variable the name of the function in
which it was defined.
a. main calls fun1; fun1 calls fun2; fun2 calls fun3.Answer:
var a = main ; var b = fun1 ; var c = fun2 ;var d,e,f = fun3
b. main calls fun1; fun1 calls fun3.Answer:
var a = main; var b,c = fun1; var d,e,f = fun3
var a = main; var b,c = fun1; var d,e,f = fun3
c. main calls fun2; fun2 calls fun3; fun3 calls fun1.
Answer:
var a= main; var b,c,d = fun1 ;var e,f = fun3
Answer:
var a= main; var b,c,d = fun1 ;var e,f = fun3
d. main calls fun3; fun3 calls fun1.
Answer:
var a = main; var b,c,d = fun1; var e,f = fun3
Answer:
var a = main; var b,c,d = fun1; var e,f = fun3
e. main calls fun1; fun1 calls fun3; fun3 calls fun2.
Answer:
var a=main;var c,d,e=fun2; var b =fun1; var f= fun3
Answer:
var a=main;var c,d,e=fun2; var b =fun1; var f= fun3
f. main calls fun3; fun3 calls fun2; fun2 calls fun1.
Answer:
var a=main; var b,c,d = fun1; var f= fun3;var e=fun2
Answer:
var a=main; var b,c,d = fun1; var f= fun3;var e=fun2
12. Consider the following program, written in JavaScript-like syntax:
// main program
var x, y, z;
// main program
var x, y, z;
Answer :
function sub1() {
var a, y, z;
. . .
}
function sub2() {
var a, b, z;
. . .
}
function sub3() {
var a, x, w;
. . .
}
Given the following calling sequences and assuming that dynamic scoping
is used, what variables are visible during execution of the last subprogram
activated? Include with each visible variable the name of the unit
where it is declared.
a. main calls sub1; sub1 calls sub2; sub2 calls sub3.Answer:
a x w in sub3. b, z in sub2, y in sub1.
function sub1() {
var a, y, z;
. . .
}
function sub2() {
var a, b, z;
. . .
}
function sub3() {
var a, x, w;
. . .
}
Given the following calling sequences and assuming that dynamic scoping
is used, what variables are visible during execution of the last subprogram
activated? Include with each visible variable the name of the unit
where it is declared.
a. main calls sub1; sub1 calls sub2; sub2 calls sub3.Answer:
a x w in sub3. b, z in sub2, y in sub1.
b. main calls sub1; sub1 calls sub3.Answer:
a x w in sub3, y z in sub1.
a x w in sub3, y z in sub1.
c. main calls sub2; sub2 calls sub3; sub3 calls sub1.Answer:
a y z in sub1, x w in sub3, b in sub2.
a y z in sub1, x w in sub3, b in sub2.
d. main calls sub3; sub3 calls sub1.Answer:
a y z in sub1; x w in sub3;
a y z in sub1; x w in sub3;
e. main calls sub1; sub1 calls sub3; sub3 calls sub2.Answer:
a b z in sub2, x w in sub3; y in sub1.
a b z in sub2, x w in sub3; y in sub1.
f. main calls sub3; sub3 calls sub2; sub2 calls sub1.Answer:
a y z in sub1; b in sub2; x w in sub3.
a y z in sub1; b in sub2; x w in sub3.
16. What is the referencing environment of a statement?
Answer :
The referencing environment of a statement is the collection of all variables that are visible in the statement. The referencing environment of a statement in a static-scoped language is the variables declared in its local scope plus the collection of all variables of its ancestor scopes that are visible.
The referencing environment of a statement is the collection of all variables that are visible in the statement. The referencing environment of a statement in a static-scoped language is the variables declared in its local scope plus the collection of all variables of its ancestor scopes that are visible.
17. What is a static ancestor of a subprogram? What is a dynamic ancestor of a subprogram?
Answer :
Answer :
The static ancestors of a subprogram sub() are all the procedures in the program within which the procedure sub() is defined, i.e., the definition of the procedure sub() is nested. The definition of a procedure may be directly nested within only one procedure, called its static parent procedure. However, this static parent procedure may itself be nested within another procedure, and so on up to the main() program. All these procedures are considered to be static ancestors of the procedure sub(). Simply put, the static ancestors are those that strictly contain the subprogram in question.
The dynamic ancestors of a subprogram sub() are all the procedures called before sub() during the execution of a program, that have not yet finished executing. These are the procedures that are waiting for procedure sub() to finish executing before they can terminate. Simply put, dynamic ancestors are those that are called to reach the subprogram in question.
The dynamic ancestors of a subprogram sub() are all the procedures called before sub() during the execution of a program, that have not yet finished executing. These are the procedures that are waiting for procedure sub() to finish executing before they can terminate. Simply put, dynamic ancestors are those that are called to reach the subprogram in question.
18. What is a block?
Answer :
Answer :
Such vari-ables are typically stack dynamic, so their storage is allocated when the section is entered and deallocated when the section is exited
19. What is the purpose of the let constructs in functional languages?
Answer :
Answer :
“let” introduces a new variable scope, and allows you to bind variables to values for that scope. It is often read as “let x be [value] in …”
20. What is the difference between the names defined in an ML let construct from the variables declared in a C block?
6. Given the following grammar and the right sentential form, draw a parse tree and show the phrases and simple phrases, as well as the handle.
Answer :
S → AbB bAc A → Ab aBB B → Ac cBb c a.
a. aAcccbbc
S -> AbB -> aBBbB -> aAcBbB -> aAccBbbB -> aAcccbbc
S -> AbB -> aBBbB -> aAcBbB -> aAccBbbB -> aAcccbbc
b. AbcaBccb
S -> AbB -> AbcBb -> AbcAcb -> AbcaBBcb -> AbcaBccb
S -> AbB -> AbcBb -> AbcAcb -> AbcaBBcb -> AbcaBccb
c. baBcBbbc
S -> bAc -> baBBc -> baBcBbc -> baBcBbbc
S -> bAc -> baBBc -> baBcBbc -> baBcBbbc
7. Show a complete parse, including the parse stack contents, input string, and action for the string id * (id + id), using the grammar and parse table in Section 4.5.3.
Answer :

Answer :

8. Show a complete parse, including the parse stack contents, input string, and action for the string (id + id) * id, using the grammar and parse table in Section 4.5.3.
Answer :
Answer :
9. Write an EBNF rule that describes the while statement of Java or C++. Write the recursive-descent subprogram in Java or C++ for this rule.
Answer :
Answer :
<while_stmt> -> WHILE ‘(‘ (<arith_expr> | <logic_expr>) ‘)’
<block> <block> -> <stmt> | ‘{‘ <stmt> {<stmt>} ‘}’
10. Write an EBNF rule that describes the for statement of Java or C++. Write the recursive-descent subprogram in Java or C++ for this rule.
Answer :
10. Write an EBNF rule that describes the for statement of Java or C++. Write the recursive-descent subprogram in Java or C++ for this rule.
Answer :
Assume the following non-terminals are given: <type>, <id>, <literal>, <assign>, <expr>, and <stmt_list>.
<for> -> for ‘(‘ [[<type>] <id> = <expr> {, [<type>] <id> = <expr>}] ; [<expr>] ; [<expr> {, <expr>}] ‘)’ ‘{‘ <stmt_list> ‘}’
16. What is the FIRST set for a given grammar and sentential form?
Answer :
FIRST( ) = {a => * a } (If => * , is in FIRST( ))
in which =>* means 0 or more derivation steps
Answer :
FIRST( ) = {a => * a } (If => * , is in FIRST( ))
in which =>* means 0 or more derivation steps
17. Describe the pairwise disjointness test.
Answer :
It is a test of non-left recursive grammar that indicates whether left recursion can be done. It requires the ability to compute a set based on the RHS of a given nonterminal symbol in a grammar.
18. What is left factoring ?
Answer :
Left factoring is the action taken when a grammar leads backtracking while marking parsing.syntax tree.
Read More
Read More
19. What is a phrase of a sentential form ?
Answer :
A phrase is a subsequence of a sentential form that is eventually reduced to a single non-termin
20. What is a simple phrases of a sentential form ?
Answer :
Simple phrases is just a phrases that takes a single derivation step from it’s root non-terminal node.
14. Draw parse trees for the sentences aabb and aaaabbbb, as derived from the grammar of Problem 13
15. Convert the BNF of Example 3.1 to EBNF.
16. Convert the BNF of Example 3.3 to EBNF.
<assign> → <id> = <expr>
<id> → A | B | C
<expr> → <expr> {(+ | *) <expr>}
| <id>
17. Convert the following EBNF to BNF: S → A{bA} A → a[b]A
An intrinsic attribute is an inherent characteristic of a terminal symbol in the grammar. So the value of the attribute is determined solely from the terminal symbol. A nonintrinsic synthesized attribute is an attribute of a non-terminal symbol in the grammar.
15. Convert the BNF of Example 3.1 to EBNF.
EBNF:
<program> → begin <stmt_list> end
<stmt_list> → <stmt> { ; <stmt_list>}
<stmt> → <var> = <expression>
<var> → A | B | C
<expression> → <var> { (+|-) <var>}
16. Convert the BNF of Example 3.3 to EBNF.
<assign> → <id> = <expr>
<id> → A | B | C
<expr> → <expr> {(+ | *) <expr>}
| <id>
17. Convert the following EBNF to BNF: S → A{bA} A → a[b]A
S -> A | AX
X -> bA | bAX
A -> aA | abA
18. What is the difference between an intrinsic attribute and a nonintrinsic synthesized attribute?X -> bA | bAX
A -> aA | abA
An intrinsic attribute is an inherent characteristic of a terminal symbol in the grammar. So the value of the attribute is determined solely from the terminal symbol. A nonintrinsic synthesized attribute is an attribute of a non-terminal symbol in the grammar.