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