Programación de Sistemas: Gramática 2.0

Post on 24-Jul-2015

51 views 0 download

description

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

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.