Professional Documents
Culture Documents
Compiladores
TRABAJO PRCTICO N 3: ANLISIS
SINTCTICO
Alumnos:
Ali Luis Mariano
LU: 5804
Ingeniera Informtica
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;
2.Declaraciones
::= (Decl ; )+
3.Decl
4.Sentencias
::= ( Asignacion ; )+
5.Asignacion
6.Expresion
7.Expresion
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
::=
3)
lista_CASE
::=
( CASE )+ ( DEFAULT )* }
4)
CASE
::=
5)
DEFAULT
::=
6)
condicion
::=
7)
condicion_AND
::=
8)
condicion_OR
::=
9)
condicion_logica
::=
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)
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 }
PRODUCCION
SIG(S) = { }
SQA
SQA
Aor QA
Q
S QA
SIG(A) = { }
CONJUNTO SIGUIENTE
SIG(S) = SIG(S) U { $ }
SIG(S) = { } U { $ }
SIG(S) = { $ }
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)
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
$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
SIG(E) = { $ }
A
EAB
NO TERMINAL
E
A
B
C
SIG(A) = { }
F := (E) | id
PRED(F(E))= PRIM( ( ) = { ( }
PRED(Fid)= PRIM( id ) = { id }
EAB
AFC
ERROR
ERROR
F(E)
id
EAB
AFC
ERROR
ERROR
Fid
+
ERROR
ERROR
B+AB
C
ERROR
*
ERROR
ERROR
ERROR
C*FC
ERROR
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
G3
S ::= aA
A ::= Ba
A ::= BCa
B ::= CAb
C ::= c
G4