Programación de Sistemas: Gramática 2.0
-
Upload
antonio-acosta-murillo -
Category
Documents
-
view
51 -
download
0
description
Transcript of Programación de Sistemas: Gramática 2.0
Gramática 2.0
Programa:
DeclaracionVariable* Metodo*
DeclaracionVariable:
Tipo ExpresionId
Metodo:
DeclaracionVariable*
Sentencia*
Sentencia:
SentenciaAsignacion | SentenciaIf
SentenciaAsignacion:
ExpresionId = Expresion ; /* Noten el ; al final */
SentenciaIf:
if(ExpresionLogica) {Sentencia*} [else {Sentencia*}]
Tipo:
int | float | String
ExpresionMatematica:
ExpresionId OperadorAritmetico (ExpresionId | ExpresionNumerica)
ExpresionLogica:
ExpresionId OperadorLogico (ExpresionId | ExpresionNumerica)
OperadorAritmetico:
+ | - | * | /
OperadorLogico:
< | > | == | <= | >=
Para cada tipo de generadores (Sentencias, DeclaracionVariable, SentenciaIf, etc) existe una
clase con ese mismo nombre, que se encargará de mantener la información necesaria para
su funcionamiento. La clase SentenciaIf, por ejemplo, debido a su estructura necesita las
siguientes estructuras de datos para funcionar:
- ExpresionLogica
- Vector<Sentencias> // Para el if
- Vector<Sentencias> // Para el else
Y a su vez, una Sentencia tendrá otras estructuras de datos dentro del, según su naturaleza,
por ejemplo una sentencia de asignación (x=y) sería algo así:
- ExpresionId // El nombre de a variable
- ExpresionNumerica // Un numero
Un código pequeño de ejemplo
if(x == y)
{
z = 3;
x = 8;
}
Se crearán tres estructuras de datos, una para el if.
- x == 3 (ExpresionLogica)
- z = 3, x = 8 (Vector<Sentencias>)
- null (Vector<Sentencias>)
Una para la primer asignacion z = 3
- z (ExpresionId)
- 3 (ExpresionNumerica)
Y otra para x = 8
- x (ExpresionId)
- 8 (ExpresionNumerica)
Puede haber ifs aninados, más métodos, etcétera.