You are on page 1of 3

Facultad de Ing.

De Sistemas e Informática
3° Informe del laboratorio De Lenguajes
y Traductores

Pregrado
Arzapalo Caldas, César Kennedy Rousseau 17200134
Diego Martín Santillán Chávez 17200242
07 de setiembre 2018
Gramática para definir una clase
Leyenda:
 : Significa derivación.
||| : Significa “O”,
ejem: <A>  “a” ||| “b”
Quiere decir que A puede derivar en a o en b
< >: lo que se encuentre dentro del menor mayor es un no terminal.
“ ” : lo que se encuentre dentro de las comillas es un terminal.
dec: declaración.

idp: identificador de proteccion.

ide-d: identificador estatico-dinamico.

idtd: identificador de tipo de datos

idclass: nombre de clases

idn: nombre de varibles declaradas o de métodos.

Aclaraciones:
En los no terminales:
 <herencia_simple>, <herencia_multiple>, <dec> ,<idp>, <ide-d>

Al inicio de la producción de la gramática estos tenían derivación nula, por lo cual se eliminó la derivación
nula.

En las declaraciones <dec> en su derivación siempre debe estar presente el <idtd>, por ende este no debería
presentar en primera instancia derivación nula.

Al momento de definir la gramática dentro del conjunto de los no terminales y terminales, se optó por no
poner el < > y “ ” en los conjunto de los no terminales y terminales respectivamente, para que sea más
digerible su declaración; sin embargo, en la derivación esta incluido estos para poder diferenciarlos.

Los identificadores idclass y idclass los definimos como no terminales para hacer genérico la declaración de
nombres en las variables, ojo que esto no es viable de hacer o no es correcto, solo que lo presentamos así
para hacerlo más fácil de entender.

Gramatica de una clase:


G = {Vt, Vnt, S, P}
Vt = {clase, extends, private, public, package, int, char, bool, void, static, dinamic, abstract, nombre,”,”, “;”, “(”,
“)”}
Vnt = {class, herencia_simple, herencia_multiple cuerpo, dec, met, idp, ide-d, idn, idclass}
P: {
<S>  <class> <herencia_simple> “{” <cuerpo> “}” |||
“abstract” <class> “{” <cuerpo> “}” |||
<class> “{” <cuerpo> “}”

<class>  <idp> <ide-d> “clase” <idclass> |||

<idp> “clase” <idclass>|||

<ide-d> “clase” <idclass>|||

“clase” <idclass>

<herencia_simple>  “extends” <idclass> <herencia_multiple> ||| “extends” <idclass>

<herencia_multiple>  ”,” <idclass> < herencia_multiple > |||

“,” <idclass>

<cuerpo>  <dec> <met>

<dec>  <idp> <idtd> <idn> “;” <dec> |||

<idtd> <idn> “;” <dec> |||

<idp> <idtd> <idn> “;” |||

<idtd> <idn> “;”

<met>  <idp> <idtd> <idn> “(” <dec> “)” “;” <met> |||

<idtd> <idn> “(” <dec> “)” “;” <met> |||

<idp> <idtd> <idn> “(” <dec> “)” “;” |||

<idtd> <idn> “(” <dec> “)” “;”

<idp>  “private” ||| “public” ||| “package” ||| “protected”

<ide-d>  “static” ||| “dinamic”

<idtd>  “int” ||| “char” ||| “bool” ||| “void”

<idclass>  “nombre_de_clases”

<idn>  “nombre”

You might also like