Está en la página 1de 8

COMPILADORES (CIC220)

Nome: Rafael Greca Vieira Matrícula: 2018000434

1)

S→(T)|x
T → ST | S

Depois de formatado:

S’ → S
S→(T)
S→x
T → ST
T→S

a) A gramática não é LR(0).

Estado 0:

S’ → * S;
S → * ( T );
S → *x;

Estado 1:

S → ( * T );
T → *S T;
T → *S;
S → * ( T );
S → *x;

Estado 2:

S → x*;

Estado 3:

S’ → S*;

Estado 4:

S’ → S’ * $;

Estado 5:

S’ → S’ $ *;

Estado 6 (CONFLITO):
T → S * T;
T → S *;
T → *S T;
T → * S;
S → * ( T );
S → *x;

Estado 7:

S → ( T ) *;

Estado 8:

S → ( T ) *;

Estado 9:

T → S T *;

Apagando os estados 4 e 6, o autômato fica assim:

b)

first(S’) = {(, x}
first(S) = {(, x}
first(T) = {(, x}

follow(S’) = {$}
follow(S) = {$, (, x, ), }
follow(T) = {)}

Estado 0:

S → *S;
S → * ( T );
S → *x;

Estado 1:

S’ → S*;

Estado 2:

S → (* T );
T → *S T;
T → *S;
S →* ( T );
S → *x

Estado 3:

S → x*
Estado 4:

S → ( T*)

Estado 5:

T → S*T;
T → S*;
T → *S T;
T → *S;
S → * ( T );
S → *x

Estado 6:

S→(T)*

Estado 7:

T → S T*

( ) x $ S’ S T
0 e2 e3 1
1 OK
2 e2 e3 5 4
3 r2 r2 r2 r2
4 e6
5 e2 r4 e3 5 7
6 r1 r1 r1 r1
7 r3

c)
PILHA ENTRADA AÇÃO
0 ((x)x(x))$ e2
0(2 (x)x(x))$ e2
0(2(2 x)x(x))$ e3
0(2(2x3 )x(x))$ r2
0(2(2S )x(x))$ 5
0(2(2S5 )x(x))$ r4
0(2(2T )x(x))$ 4
0(2(2T4 )x(x))$ e6
0(2(2T4)6 x(x))$ r1
0(2S x(x))$ 5
0(2S5 x(x))$ e3
0(2S5x3 (x))$ r2
0(2S5S (x))$ 5
0(2S5S5 (x))$ e2
0(2S5S5(2 x))$ e3
0(2S5S5(2x3 ))$ r2
0(2S5S5(2S ))$ 5
0(2S5S5(2S5 ))$ r4
0(2S5S5(2T ))$ 4
0(2S5S5(2T4 ))$ e6
0(2S5S5(2T4)6 )$ r1
0(2S5S5S )$ 5
0(2S5S5S5 )$ r4
0(2S5S5T )$ 7
0(2S5S5T7 )$ r3
0(2S5T )$ 7
0(2S5T7 )$ r3
0(2T )$ 4
0(2T4 )$ e6
0(2T4)6 $ r1
0S $ 1
0S1 $ OK

d)

Estado 0:

S’ → *S, $;
S → * ( T ),
S → *x,

Estado 1:
S’ → S*, $

Estado 2:

S → (*T ), $;
T → *S T, );
T → *S, );
S → * ( T ), (/x/);
S → *x, (/x/);

Estado 3:

S → x*, $

Estado 4:

S →( T*), $

Estado 5:

T → S*T, );
T → S*, );
T → *S T, );
T → *S, );
S → * ( T ), (/x/);
S → *x, (/x/);

Estado 6:

S → (*T ), (/x/);
T → *S T, );
T → *S, );
S → * ( T ). (/x/);
S → *x, (/x/);

Estado 7:

S → x*, (/x/);

Estado 8:

S → ( T )*, $;

Estado 9:

T → S T*, );

Estado 10:

S → ( T *), (/x/);
Estado 11:

S → ( T )*, (/x/);

e)

Estado 0:

S’ → *E, $;
E → *( L ), $;
E → *a, $

Estado 1:

S’ → E*, $

Estado 2:

E → (*L), $/(/a/);
L → *E L, );
L → *E, );
E → * ( L ), (/a/);
E → *a, (/a/);
Estado 3:

E → a*, $/(/a/);

Estado 4:

E → (L*), $/(/a/);

Estado 5:

L → E*L, );
L → E*, );
L → *E L, );
L → *E, );
E → * ( L ), (/a/);
E → *a, (/a/);

Estado 6:

E → ( L )*, $/(/a/);

Estado 7:

L → E L*, );

( ) x $ S’ S T
0 e2 e3 1
1 OK
2 e2 e3 5 4
3 r2 r2 r2 r2
4 e6
5 e2 r4 e3 5 7
6 r1 r1 r1 r1
7 r3

2)

num → num dígito | dígito


dígito → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Gramática de atributos:

Regras gramaticais:

num1 → num2 dígito


num → dígito

dígito → 0
dígito → 1
dígito → 2
dígito → 3
dígito → 4
dígito → 5
dígito → 6
dígito → 7
dígito → 8
dígito → 9

Regras semânticas:

num1.val = num2.val * 10 + dígito.val


num.val = dígito.val

dígito.val = 0
dígito.val = 1
dígito.val = 2
dígito.val = 3
dígito.val = 4
dígito.val = 5
dígito.val = 6
dígito.val = 7
dígito.val = 8
dígito.val = 9

También podría gustarte