Programación de Sistemas: Gramática 2.0

2
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

description

Pequeña gramática para un proyecto de Programación de Sistemas.

Transcript of Programación de Sistemas: Gramática 2.0

Page 1: 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

Page 2: Programación de Sistemas: Gramática 2.0

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.