You are on page 1of 8

EXERCISE

the following productions define the fraction part of a binary number.


F

N 0 | 1 N0 0 N1 N0 1 N1

1.

2.

define a SAG to compute the decimal value of a binary fraction number define a LAG for the same semantic
1

FRACTIONS USING JUST SYNTHESIZED ATTRIBUTES


(SAG)
NT F N attribute val val type float float mode
F.val = 1.25 / 2 = 0.625

F . N
N.val= 0.5 / 2 + 1 =1.25

1
rule F semantic rule

N.val=1/2 = 0.5

.N

F.val N.val N.val N0.val N0.val

= N.val / 2 = 0 = 1 = N1.val / 2 = N1.val / 2 + 1

N.val=1

N 0 N 1 N0 0 N1 N0 1 N1

FRACTIONS (ALTERNATE SOLUTION) : INHERITED AND SYNTHESIZED ATTRIBUTES (LAG) MORE EFFICIENT SOLUTION
NT F N attribute val val pow type float float int mode

rule
F

.N

semantic rule F.val = N.val N.pow = 1 // initial value


N.val N.val = 0 = (1/2^N.pow)

N 0 N 1 N0 0 N1 N0 1 N1

N1.pow = 1 + N0.pow N0.val = N1.val N1.pow = 1 + N0.pow N0.val = N1.val +(1/2^N0.pow)


3

DECORATED PARSE TREE FOR

.101
F -> . N F.val = N.val N.pow = 1 N.val N.val N1.pow N0.val = 0 = (1/2^N.pow) = 1 + N0.pow = N1.val N -> 0 N -> 1 N0 -> 0 N1 N0 -> 1 N1

F.val

= N.val = 0.625

N1.pow = 1 + N0.pow N0.val = N1.val +(1/2^N0.pow)

.
N.pow = 1

6 N
N0.val = N1.val + (1/2^N0.pow)=1/8+1/2 = 0.125+0.5= 0.625

1 1
N1.pow = 1 + N0.pow = 2

5 N
N0.val = N1.val=1/8

2 0
N1.pow = 1 + N0.pow=3

4 N
N.val = (1/2^N.pow)= 1/8

3 1

FRACTIONAL BINARY NUMBER DECIMAL VALUE USING SAG

DECORATED PARSE TREE

In left part (before .) l is not computed

BINARY NUMBERS (WITH FRACTION): LAG

DECORATED PARSE TREE 101.101


N
L.p=0 L.v=13 L.v=12 L.p=0+1=1

N.v=L1.v + L2.v=13+0.25=13.25 L.v=0.25

L.l=2

L.p=-L.l=-2 B.v=

.
B.p=0

B.v=1

L.l=1 L.p=-1 L.v=0

2^-2= 0.25

B.p=-2

L.v=12 L.p=1+1=2

B.p=1 B B.v=0

B.p=0

B.v=0

L.v=B.v=8 L L.p=3

B.p=2 B

B.v=4

0 0

B.p=3

B B.v=
2^B.p =8

You might also like