You are on page 1of 2

Gramtica 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 informacin 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, segn su naturaleza, por ejemplo una sentencia de asignacin (x=y) sera algo as: - ExpresionId // El nombre de a variable - ExpresionNumerica // Un numero

Un cdigo pequeo de ejemplo if(x == y) { z = 3; x = 8; } Se crearn 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, ms mtodos, etctera.

You might also like