You are on page 1of 14

TRABAJO PRCTICO N 3: ANLISIS SINTCTICO

"UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERA

Compiladores
TRABAJO PRCTICO N 3: ANLISIS
SINTCTICO

Alumnos:
Ali Luis Mariano

LU: 5804

Ingeniera Informtica

Aramayo Ubaldo J.M.

LU: 6696

Ingeniera Informtica

Castillo Natalia E.

LU: 3722

Ingeniera Informtica

Sandoval Ivan L.

LU: 6756

Ingeniera Informtica

Ejercicio 1: Construir una gramtica no ambigua que reconozca todas las declaraciones posibles
de variables de los siguientes tipos: int, String, boolean y double en Visual C#. Por ejemplo:
int x, y;
String cadena;
Double a;
Boolean b;

PARA UNA ENTRADA


entrada::= ID = exp
exp::= num | letra | exp or exp
op::= + | - | * | /
num::= [0-9]+
letra::= [a-z A-Z]+
PARA MAS DE UNA ENTRADA
entradas::= entradas entrada | entrada

Ejercicio 2: Construir los diagramas de sintaxis para la siguiente gramtica:


1.Programa

::= Declaraciones Sentencias

2.Declaraciones

::= (Decl ; )+

3.Decl

::= Entero Identificador

4.Sentencias

::= ( Asignacion ; )+

5.Asignacion

::= Identificador = Expresion

6.Expresion

::= ( Expresion + Expresion ) | ( Expresion - Expresion )

7.Expresion

::= (Identificador | Numero)

Ejercicio 3: Escribir una gramtica que describa la sintaxis de la sentencia switch en C#.

Para esta gramtica hay que considerar que dentro de una sentencia switch en C# puede haber
tanto otro switch como un if, while, o cualquier tipo de sentencia valida en C#.
Entonces a modo de simplificacion solo consideramos que una sentencia puede ser un
SWITCH_CASE o algunas de las expresiones matematicas y logicas que admite C#.

1)

lista_sentencia

::=

( E ; | SWITCH_CASE )+

2)

SWITCH_CASE

::=

switch ( Ident ) { lista_CASE

3)

lista_CASE

::=

( CASE )+ ( DEFAULT )* }

4)

CASE

::=

case numero : lista_sentencia break ;

5)

DEFAULT

::=

default lista_sentencia break ;

6)

condicion

::=

condicion_logica | condicion_AND | condicion_OR

7)

condicion_AND

::=

condicion_logica && condicion logica

8)

condicion_OR

::=

condicion_logica || condicion logica

9)

condicion_logica

::=

E > E | E < E | E > = E | E < = E | E = = E | E ! = E

10)

::=

E + T | E T | T

11)

::=

T * F | T / F | F

12) F
::=
Ident | numero
Ejercicio 4: Construir un diagrama de sintaxis que reconozca la entrada de la sentencia switch
definida en la gramtica del ejercicio anterior.
1)

2)

3)

4)

5)

6)

7)

8)

9)

10)

11)

12)

Ejercicio 5: Dada la siguiente gramtica definida por sus producciones P:


S::= QA
A::= or QA
A::=
Q::= RB
B::= RB
B::=
R::= F and
F::= x
F::= y
F::= z
a) Calcular los conjuntos PRIMERO
NO TERMINAL
S

PRODUCCION
CONJUNTO PRIMERO
S QA
PRIM(S) = { }
PRIM(S) = PRIM(S) U PRIM(Q)
PRIM(S) = { } U { x, y, z }
PRIM(S) = { x, y, z }

A or QA
A

QRB

BRB
B

R F and

PRIM(A) = { }
PRIM(A) = PRIM(A) U PRIM( or )
PRIM(A) = {} U { or }
PRIM(A) = { or } U { }
PRIM(A) = { or, }
PRIM(Q) = { }
PRIM(Q) = PRIM(Q) U PRIM(R)
PRIM(Q) = { } U { x, y, z }
PRIM(Q) = { x, y, z }
PRIM(B) = { }
PRIM(B)= PRIM(B) U PRIM(R)U{ }
PRIM(B) = { } U { x, y, z } U { }
PRIM(B) = { x, y, z , }
PRIM(R) = { }
PRIM(R) = PRIM(R) U PRIM(F)

PRIM(R) = { } U { x, y, z }
PRIM(R) = { x, y, z }
F

F x
F y
F z

PRIM(F) = { }
PRIM(F) = PRIM(F) U PRIM(x)
PRIM(F) = { } U { x }
PRIM(F) = { x } U PRIM( y )
PRIM(F) = { x } U { y }
PRIM(F) = { x, y } U PRIM(z)
PRIM(F) = { x, y } U { z }
PRIM(F) = { x, y, z }

b) Calcular los conjuntos SIGUIENTE


NO TERMINAL
S
AXIOMA
A

PRODUCCION
SIG(S) = { }
SQA

SQA

Aor QA
Q

S QA

SIG(A) = { }

CONJUNTO SIGUIENTE
SIG(S) = SIG(S) U { $ }
SIG(S) = { } U { $ }
SIG(S) = { $ }

SIG(A) = SIG(A) U SIG{ S }


SIG(A) = { } U { $ }
SIG(A) = { $ }
SIG(A) = SIG(A) U SIG(A)
SIG(A) = { $ } U { $ }
SIG(A) = { $ }
SIG(Q) = { }

SIG(Q) = SIG(Q) U ( PRIM{A} - { } )


SIG(Q) = { } U ( { or, } - { } )
SIG(Q) = { or }
SIG(Q) = SIG(Q) U SIG(S)
SIG(Q) = { or } U { $ }
SIG(Q) = { or, $ }
Aor QA SIG(Q) = SIG(Q) U ( PRIM(A) - { } )
SIG(Q) = {or, $ } U ( { or, } - { } )
SIG(Q) = { or , $}
SIG(Q) = SIG(Q) U SIG(A)
SIG(Q) = { or, $ } U { $ }
SIG(Q) = { or, $ }
QRB
SIG(B) = { }
SIG(B) = SIG(B) U SIG(Q)
SIG(B) = { } U { or, $ }
SIG(B) = { or, $}
BRB
SIG(B) = SIG(B) U SIG(B)
SIG(B) = { or, $ } U { or, $ }
SIG(B) = { or, $ }
QRB
SIG(R) = { }
SIG(R) = SIG(R) U ( PRIM(B) { } )
SIG(R) = { } U ({ x, y, z , } { } )
SIG(R) = { x, y, z }
SIG(R) = SIG(R) U SIG(Q)
SIG(R) = { x, y, z } U { or, $ }
SIG(R) = { x, y, z, or, $ }
BRB
SIG(R) = SIG(R) U ( PRIM(B) { } )
SIG(R)={x,y, z, or, $ } U ({ x, y, z , }{})

RF and SIG(F) = { }

No Terminal
S
A
Q
B
R
F
PRODUCCION
SQA
A orQA
A
Q RB
B RB
B
R F and
F x
F y
F z
c)

SIG(R) = { x, y, z, or, $ }
SIG(R) = SIG(R) U SIG(B)
SIG(R) = { x, y, z, or, $ }U { or, $ }
SIG(R) = { x, y, z, or, $ }
SIG(F) = SIG(F) U ( PRIM(and) { } )
SIG(F) = { } U ( { and } { } )
SIG(F) = { and }

Conjunto Primero
{ x, y,z }
{ or, }
{ x, y, z }
{ x, y, z , }
{ x, y, z }
{ x, y, z }

Conjunto Siguiente
{$}
{$}
{ or, $ }
{ or, $ }
{ x, y, z, or, $ }
{ and }

PREDICCION
PRED(SQA)={ x, y, z }
PRED(A orQA)={or}
PRED(A )={ $ }
PRED(Q RB)={ x, y, z }
PRED(B RB){ x, y, z }
PRED(B )={or, $ }
PRED(RF and)= {x, y, z}
PRED(Fx)={x}
PRED(Fy)={y}
PRED(Fz)={z}

PRIM(Q)
SIG(or)
SIG(A)
PRIM(R)
PRIM(R)
SIG(B)
PRIM(F)
PRIM(x)
PRIM(y)
PRIM(z)

Construir la tabla de anlisis sintctico para G


S
A
Q
B
R
F

x
SQA
ERROR
Q RB
B RB
RF and
Fx

y
SQA
ERROR
Q RB
B RB
RF and
Fy

z
SQA
ERROR
Q RB
B RB
RF and
Fz

or
ERROR
A orQA
ERROR
B
ERROR
ERROR

d) Probar si la siguiente entrada es analizada correctamente: z and or y x


PILA DE SIMBOLOS

$S
$ AQ
$ AB R
$ A B and F
$ A B and z
$ A B and
$ AB
$ AB
$A
$ A A Q or
$ AAQ
$ AAQ B R
$ A A Q B R and F

ENTRADA

z and or y x $
z and or y x $
z and or y x $
z and or y x $
z and or y x $
and or y x $
or y x $
or y x $
or y x $
or y x $
yx$
yx$
yx$

REGLA O ACCION

SQA
Q RB
RF and
Fz
EMPAREJAR(z)
EMPAREJAR(and)
B
EMPAREJAR()
A orQA
EMPAREJAR(or)
Q RB
RF and
Fy

$
ERROR
A
ERROR
B
ERROR
ERROR

$ A A Q B R and y
$ A A Q B R and

yx$
x$

EMPAREJAR(y)
Error CADENA NO ACEPTADA

Ejercicio 6: Dada la siguiente gramtica G = {N, T, E, P} donde:


N = {E, A, B, C, F}
T = {+, *, (, ), id}
P = { E := AB | , A := FC, B := +AB | , C := *FC | , F := (E) | id}
a) Calcular los conjuntos PRIMERO y SIGUIENTE
NO TERMINAL
PRODUCCION
CONJUNTO PRIMERO
E
E AB
PRIM(E) = { }
PRIM(E) = PRIM(E) U PRIM(A)
PRIM(E) = { } U { (, id }
E
PRIM(E) = { (, id } U { }
PRIM(E) = {( id, }
A
A FC
PRIM(A) = { }
PRIM(A) = PRIM(A) U PRIM(F)
PRIM(A) = { } U { (, id }
PRIM(A) = { (, id }
B
B+AB
PRIM(B) = { }
PRIM(B) = PRIM(B) U PRIM(+)
PRIM(B) = { } U { +}
B
PRIM(B) = PRIM(B) U { }
PRIM(B) = { +} U { }
PRIM(B) = { +, }
C
C*FC
PRIM(C) = { }
PRIM(C) = PRIM(C) U PRIM(*)
PRIM(C) = { } U { * }
C
PRIM(C) = PRIM(C) U { }
PRIM(C) = { * } U { }
PRIM(C) = {*, }
F
(E)
F
PRIM(F) = { }
PRIM(F) = PRIM(F) U PRIM( ( )
PRIM(F) = { } U { ( }
Fid
PRIM(F) = PRIM(F) U PRIM( id )
PRIM(F) = { (,}U { id }
PRIM(F) = { (, id }
NO TERMINAL
PRODUCCION
CONJUNTO SIGUIENTE
E
AXIOMA
SIG(E) = { }
SIG(E) = SIG(E) U { $ }
SIG(E) = { } U { $ }

SIG(E) = { $ }
A

EAB

NO TERMINAL
E
A
B
C

SIG(A) = { }

SIG(A) = SIG(A) U (PRIM(B) { })


SIG(A) = { } U ({ +, } - { })
SIG(A) = { + }
B+AB
SIG(A) = SIG(A) U (PRIM(B) { })
SIG(A) = { + } U ({ +, } - { })
SIG(A) = { + }
SIG(A) = SIG(A) U SIG(B)
SIG(A) = { + } U { $ }
SIG(A) = { +, $ }
E AB
SIG(B) = { }
SIG(B) = SIG(B) U SIG(E)
SIG(B) = { } U { $ }
B+AB
SIG(B) = { $ }
SIG(B) = SIG(B) U SIG(B)
SIG(B) = { $ }U { $ }
SIG(B) = { $ }
AFC
SIG(C) = { }
SIG(C) = SIG(C) U SIG(A)
SIG(C) = { } U { +, $ }
C*FC
SIG(C) = { +, $ }
SIG(C) = SIG(C) U SIG(C)
SIG(C) = { +, $ }U { +, $ }
SIG(C) = { +, $ }
AFC
SIG(F) = { }
SIG(F) = SIG(F) U ( PRIM(C) { } )
SIG(F) = { } U ({*, } { } )
SIG(F) = { * }
SIG(F) = SIG(F) U SIG(A)
SIG(F) = { * } U { +, $ }
C*FC
SIG(F) = { *, +, $ }
SIG(F) = SIG(F) U ( PRIM(C) { } )
SIG(F) = { *, +, $ } U ({*, } { } )
SIG(F) = { *, +, $ }
SIG(F) = SIG(F) U SIG(C)
SIG(F) = { *, +, $ }U { +, $ }
SIG(F) = { *, +, $ }
PRODUCCI
PREDICCION
ON
E := AB | PRED(EAB)= PRIM(A) = { (, id }
PRED(E)=SIG ( E )= { $ }
A := FC
PRED(AFC)= PRIM(A) = { (, id }
B := +AB | PRED(B+AB)= PRIM(+) = { + }
PRED(B)=SIG ( B )= { $ }
C := *FC | PRED(C*FC)= PRIM(*) = { * }
PRED(C)=SIG ( C )= { +, $ }

F := (E) | id

PRED(F(E))= PRIM( ( ) = { ( }
PRED(Fid)= PRIM( id ) = { id }

No Terminal Conjunto Primero Conjunto Siguiente


Prediccin
E
{(, id, }
{$}
PRED(EAB)= PRIM(A) = { (, id }
PRED(E)=SIG ( E )= { $ }
A
{ (, id }
{ +, $ }
PRED(AFC)= PRIM(A) = { (, id }
B
{ +, }
{$}
PRED(B+AB)= PRIM(+) = { + }
PRED(B)=SIG ( B )= { $ }
C
{*, }
{ +, $ }
PRED(C*FC)= PRIM(*) = { * }
PRED(C)=SIG ( C )= { +, $ }
F
{ (, id }
{ *, +, $ }
PRED(F(E))= PRIM( ( ) = { ( }
PRED(Fid)= PRIM( id ) = { id }
b) Construir la tabla de anlisis sintctico para G
E
A
B
C
F

EAB
AFC
ERROR
ERROR
F(E)

id
EAB
AFC
ERROR
ERROR
Fid

+
ERROR
ERROR
B+AB
C
ERROR

*
ERROR
ERROR
ERROR
C*FC
ERROR

c) Probar si la siguiente cadena es analizada correctamente: id*id+id


PILA DE SIMBOLOS

ENTRADA

$E
$BA
$BCF
$BCid
$BC
$BCF*
$BCF
$BCid
$BC
$BC
$B
$BA+
$BA
$BCF
$BCid
$BC
$BC
$B
$B
$

id*id+id $
id*id+id $
id*id+id $
id*id+id $
*id+id $
*id+id $
id+id $
id+id $
+id $
+id $
+id $
+id $
id $
id $
id $
$
$
$
$
$

CADENA ACEPTADA
Ejercicio 7: Dada las siguientes gramticas:
S ::= aA
A ::= Ba

G1

G2
S ::= B0
S ::= 1

REGLA O ACCION

EAB
AFC
Fid
EMPAREJAR(id)
C*FC
EMPAREJAR(*)
Fid
EMPAREJAR(id)
C
EMPAREJAR()
B+AB
EMPAREJAR(+)
AFC
Fid
EMPAREJAR(id)
C
EMPAREJAR()
B
EMPAREJAR()
EMPAREJAR($)

E
ERROR
B
C
ERROR

A ::= BCa
B ::= CAb

B ::= 14C
B ::= C

C ::= c

C ::= 3C
C ::= 04C
C ::= 2

a) Construir el Autmata para un Analizador LR(0).

Ejercicio 8: Dada las siguientes gramticas:


SA
Sxb
AB
Bx

G3

S ::= aA
A ::= Ba
A ::= BCa
B ::= CAb
C ::= c

a) Construir el Autmata para un Analizador LR(0).

G4

You might also like