Sie sind auf Seite 1von 7

ANSWER

2. Write EBNF descriptions for the following


a) A Java class definition header statement
b)A Java method call statement
c)A C switch statement.
d)A C union statement
e)C float literals
Ans 2.a. Public class A extends B implements C, D
where “public” is a modifier and “A” ,”B”, “C”, and “D” are identifiers.

Ans 2.
b.
If the loop is such as:

for (int k = 0, m = 100; k < n; k++, m++)


{
x = x + 1;
y = y – 1;
}
where “int k = 0, m = 100” is an variable declaration, in which “int” is a type name, “k” and
“m” are identifiers, and “0” and “100” are literals. If there is no appearance of “int”, “k = 0,
m = 100” are a sequence of assignments. Also, “k < n” is an expression, “k++; m++” are
also expressions, and “x=x+1;y=y+1;” is a statement list.

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> ‘}’

c.
A Java switch statement

The following is an example switch statement:

switch (a+b)
{
case 1 : x = 7; break;
case 2 : x = 8; break;
default : x = 9;
}

where “a+b” is an expression, “1” and “2” are literals, and “x=7;break;”, “x=8;break;” and “x=9;”
are statement lists. Assume non-terminals <expr>, <literal>, and <stmt_list> are given.

<switch> -> switch ‘(‘ <expr> ‘)’ ‘{‘ {case <literal> : <stmt_list>} [default : <stmt_list>] ‘}’

3. Rewrite the given grammar to give + precedence over * and force + to be right associative.

<assign> -> <id> = <expr>


<id> -> A | B | C
<expr> -> <expr> * <term> | <term>
<term> -> <factor> + <term> | <factor>
<factor> -> ( <expr> ) | <id>

4. Rewrite the given grammar to add ++ and - - unary operators of Java

<assign> -> <id> = <expr>


<id> -> A | B | C
<expr> -> <expr> + <term> | <term>
<term> -> <term> * <factor> | <factor>
<factor> -> ( <expr> ) | <id> | <id> ++ | <id> - -
5.Write a BNF description of the Boolean expression of Java, including the three operators
&&, ||, and !, and the relational expressions with operators = =, !=, <, <=, >=, >.

<Boolean_expr> -> <Boolean_expression> || <Boolean_term> | <Boolean_term>


<Boolean_term> -> <Boolean_term> && <Boolean_factor> | <Boolean_factor>
<Boolean_factor> -> id | ! <Boolean_factor> | ( <Boolean_expr> ) | <relation_expr>
<relation_expr> -> id = = id | id != id | id < id | id <= id | id >= id | id > id

6.Using the above grammar show a parse tree and a leftmost derivation for each of the following
statements:
a) A = A * (B + (C * A))
Derivation:
<assign> => <id> = <expr>
=> A = <expr>
=> A = <id> * <expr>
=> A = A * <expr>
=> A = A * ( <expr> )
=> A = A * ( <id> + <expr> )
=> A = A * ( B + <expr> )
=> A = A * (B + ( <expr> ))
=> A = A * (B + ( <id> * <expr> ))
=> A = A * (B + ( C * <expr> ))
=> A = A * (B + ( C * <id> ))
=> A = A * (B + ( C * A ))

b)B = C * (A * C + B)

Derivation:
<assign> => <id> = <expr>
=> B = <expr>
=> B = <id> * <expr>
=> B = C * <expr>
=> B = C * ( <expr> )
=> B = C * ( <id> * <expr> )
=> B = C * ( A * <expr> )
=> B = C * ( A * <id> + <expr> )
=> B = C * ( A * C + <expr> )
=> B = C * (A * C + <id> )
=> B = C * (A * C + B )

c) A = A * (B + ( C ))
Derivation:
<assign> => <id> = <expr>
=> A = <expr>
=> A = <id> * <expr>
=> A = A * <expr>
=> A = A * ( <expr> )
=> A = A * ( <id> + <expr> )
=> A = A * ( B + <expr> )
=> A = A * (B + ( <expr> ))
=> A = A * (B + ( <id> ))
=> A = A * (B + ( C ))

7.
a.. A =(A+B)*C
b. A = B+C+A
c. A= A*(B+C)
d. A= B*(C*(A+B)

Ans 7.
a.
<assign> => <id> = <expr>
=>A = <expr>
=>A = <expr>*<id>
=>A = (<expr>) *<id>
=>A = (<id>+<expr>)*<id>
=>A = (A + <expr>)*<id>
=>A = (A+<id>)*<id>
=>A = (A+B)*<id>
=>A = (A+B)*C

b.
A= B+C+A
<assign> => <id> = <expr>
=> A = <expr>
=> A= <expr>+<term>
` => A= <expr>+<term>+<term>
=> A= <term>+<term>+ <term>
=> A= <factor>+<term>+<term>
=> A= <id>+<term>+<term>
=> A= B+ <term> + <term>
=> A= B+<factor>+<term>
=> A= B+<id>+<term>
=> A= B+C+<term>
=> A= B +C+<factor>
=> A= B+C+<id>
=> A= B+C+A

c.
A = A * (B+C)
<assign> => <id> = <expr>
A=<expr>
A=<id>*<expr>
A= A *<expr>
A =A *(<expr>)
A =A *( <id>+<expr>)
A = A *( C + (<expr>)
A = A *( C + (<id> + <expr>)
A = A *( C + ( A + <expr>)
A = A * ( C + ( A + <id> )
A= A * (C+ (A + B)

d.

A = B*(C*(A+B))
A = <expr>
A = <id>*<expr>
A = B*<expr>
A = B*(<expr>)
A = B*(<id>*<expr>)
A = B*(C*<expr>)
A = B*(C*(<expr>))
A = B*(C*(<id>+<expr>))
A = B*(C*(A+<expr>))
A = B*(C*(A+<id>))
A = B*(C*(A+B))

8.Prove that the following grammar is ambiguous:

<S> -> <A>


<A> -> <A> + <A> | <id>
<id> -> a | b | c

Example ambiguous sentence: a + b + c

      Parse tree 1:


      <S>
                  <A>
                              <A>
                                          <A>
                                                      <id>
                                                                  a
                                          +
                                          <A>
                                                      <id>
                                                                  b
                              +
                              <A>
                                          <id>
                                                      c
 
      Parse tree 2:
      <S>
                  <A>
                              <A>
                                          <id>
                                                      a
                              +
                              <A>
                                          <A>
                                                      <id>
                                                                  b
                                          +
                                          <A>
                                                      <id>
                                                                  c

Note in the above representation of a tree, all symbol(s) with N column indentations are
children nodes of the parent node that is immediately above these symbol(s) and has N-1
column indentations.
9. Modify the grammer in eg. 3.4 to add a unary minus operator that has higher preceedence
than either + or *.

Ans 9.
<assign> -> <id> = <expr>
<id> -> A | B | C
<expr> -> <expr> * <term> | <term>
<term> -> <factor> + <term> | <factor>
<factor> -> ( <expr> ) | <id>

10.
Describe, in English, the language defined by the following grammar in BNF
<S> -> <A> <B> <C>
<A> -> a <A> | a
<B> -> b <B> | b
<C> -> c <C> | c
Ans.One or more a's followed by one or more b's followed by one or more c's.
11.

Consider the following grammer:


<S> -> <A>a<B>b
<A> -><A> b | b
<B> -> a<B> | a
Which of the following sentences are in the language generated by thre grammer ?
a. baab
b. bbbab
c.bbaaaaa
d.bbaab

Ans.
Options a b and d are correct

Das könnte Ihnen auch gefallen