martes, 6 de octubre de 2009


LeVEC

Dagoberto Rodríguez
Alejandro Rodríguez
Hilario R. Velázquez

Filosofia
Transformando los vectores en un sencillo algoritmo

Objetivo
Una herramienta para aprender cálculo vectorial en forma de algoritmos.

Gramatica:

Encabezado de Programa

[comentario]% [Texto] %
[programa] ::= program [identificador]; [bloque] .
[bloque] ::= [declaraciones] [dec_proc][procedimientos]

Declaraciones

[declaraciones] ::=[mas_decs]
[mas_decs]:= [dec][mas_decs]
[mas_decs]::=null
[decs] ::= [dec_var] | [dec_vec] | [dec_const]
% Declaración de constantes numéricas%
[dec_const]::=define [id_const] = [digit];
%declaración vectores constantes%
[dec_vec]::= define [id_vector] = [vector];

%Ejemplo de vector const define V1= [2,3,4],[4,2,6]%

Tipos de Vectores

%Solo manejaremos vectores de hasta 4 dimensiones%
[vector]:= [ [lista_comp] ] ,[ [lista_comp]];
[lista_comp]::= [digit]
[lista_comp]::=[digit],[digit]
[lista_comp]::=[digit],[digit],[digit]
[lista_comp]::=[digit],[digit],[digit][digit]

Declarar Variables

%Declaración de variables para números y variables para vectores%
[dec_var] ::= declare variable [id_var] =[id_const] | =[id_var] | null | =[digit];

[dec_vec]::= declare vector [id_vec][[dimension]] = [id_vec]| null | =[vector ] ;

%Ej. declare vector VEC5 = [2,5,3],[7,1,9];%
%Ej. Declare vector VEC5= VEC1%

Sumas

% adición/substracción vectorial SE PEUDE SUMAR CUALQUIERIER COMBINACION, VEC+VEC, VEC+ESCALAR, ETC%
[suma] ::= [id_vec] = [EXP_sum];
[EXP_sum] ::= [termino] [mas_terminos]
[mas_terminos] ::= + [termino] [mas_terminos]
[mas_terminos] ::=null
[termino]::= [id_vec]|[id_var]|[id_const]|[digit]|[vector]

Restas

%En la resta el requisito es que el minuendo debe ser vector o si es numérico entonces, solo se le resta otro numérico… minuendo-sustraendo%
[resta]::=[id_vec]=[EXP_resta];
[EXP_resta]::=[T_vec] - [termino]
[EXP_resta]::=[T_dig] - [T_dig]
[termino]::=[id_vec]|[id_var]|[id_const]|[digit]|[vector]
[T_vec]::=[id_vec]|[vector]
[T_dig]::=[id_var]|[id_const]|[digit]
% V4= ve3 - [1,2],[4,2]; %

Productos

[producto]::= [id_vec] = [EXP_prod];
[EXP_prod] ::= [termino] [mas_terminos]
[mas_terminos] ::= * [termino] [mas_terminos]
[mas_terminos] ::=null
% Cualquier combinación vector*vector, numerico*vector %

Division

%Solo se puede vector/escalar, escalar/escalar, vector/vector%
[div]::=[id_vec]=[EXP_div];
[EXP_div]::=[T_vec] / [T_vec]
[EXP_div]::=[T_vec] / [T_dig]
[EXP_div]::=[T_dig] / [T_dig]
[T_vec]::=[id_vec]|[vector]
[T_dig]::=[id_var]|[id_const]|[digit]

Procedimientos

[procedimientos] ::= [vacío] | [procedimiento] [lista_procedimientos]
[procedimiento] ::= [firma] [declaraciones] [enunciado_compuesto]
[firma] ::= procedure [tipo] [id_proc] [[argumentos]]
[tipo]::= numeric|vector
[argumentos] ::= [lista_params] | null
[lista_params] ::= [lista_ids] : [tipo] | [lista_params] ; [lista_ids] : [tipo]
[declaraciones] ::= [dec_vars] | [vacío]

Cuerpo Procedimiento

[enunciado_compuesto] ::= beginp [lista_enunciados] [retorno] endp
[lista_enunciados] ::= [enunciado] | [lista_enunciados];
[enunciado]::= suma]|[resta]|[producto]|[div]|[imprimir]|
[sentencia_control] | [inc_dec]
[retorno] ::= return [suma] | [resta] | [producto] | [div] | [instancia] | [digit]

Sentencias de Control

[bucle] ::= loop[ [condicion] ] begin [lista_enunciados] [sentencias_bucle]; end
[sentencias_bucle] ::= break | continue
[if] ::= if[ [condicion] ] begin [lista_enunciados] end else begin [lista_enunciados] end
[sentencia_control] ::= [bucle] | [if]
[condicion] ::= [cond_logica] | [cond_rel] | true
[cond_logica] ::= [condicion_and] | [condicion_or] | [condicion_not]

Condiciones Logicas

[condicion_and] ::= [cond_and_elem] and [cond_and__elem]
[cond_and_elem] ::= [[condicion_and]] | [[cond_rel]] | [[condicion_not]]
[condicion_or] ::= [cond_or_elem] or [cond_or_elem]
[cond_or_elem] ::= [[condicion_or]] | [[cond_rel]] | [[condicion_not]]
[condicion_not] ::= not [[cond_rel]] | not [[cond_not_elem]]
[cond_not_elem] ::= [condicion_and] | [condicion_or] | [condicion_not]
[cond_rel] ::= [oper] [ [oper] | [oper] ] [oper] | [oper] [= [oper] | [oper] ]= [oper] | [oper] != [oper] | [oper] == [oper]

[cond_rel] ::= [oper] [ [oper] | [oper] ] [oper] | [oper] [= [oper] | [oper] ]= [oper] | [oper] != [oper] | [oper] == [oper]
[oper] ::= [[cond_rel]] | [instancia] | [[suma]] | [[resta]] | [[producto]] | [[div]]
[inc_dec] ::= [incremento] | [decremento]
[incremento] ::= [variables] ++
[decremento] ::= [variables] --
[variables] ::= id_var | id_vect

Elementos

[asignacion]::=[id_vec]=[suma]*|[resta]*|[producto]*|[div]*|[digit]*|[vector]*
[tipo] ::= vector | variable
[imprimir]::= print “[Texto]”|print [instancia] “[Texto]”;
[Texto]::= a|b|c|d|e|…|z|1|2|3|4|5|…|9|0
[instancia]::=[id_var]|[id_const]|[id_vec]
[digit]::=1|2|3|4|5|…|9|0

No hay comentarios:

Publicar un comentario