Gramática del lenguaje codificador de softbots
En la gramática hay elementos de tres colores distintos, en negro están los elementos no-terminales que son auxiliares en el procesamiento en azul las etiquetas que genera el gadget y en rojo los datos que proporciona el usuario, éstos son de dos tipos, los que teclea (identificados con una T) y los que selecciona de una lista de opciones (identificados con S).
softbot --> <softbot nombre="ejemplo" (T) > datos metodos </softbot>
datos --> <datos> objeto
objeto --> <etiqueta> contenido </etiqueta> objeto |</datos>
contenido --> objeto | dato
etiqueta --> texto (T)
dato --> constante
constante --> numero | fecha | logico | texto (S)
metodos --> <metodos> metodo </metodos>
metodo --> <metodo> instruccion </metodo>
instruccion --> <decision> condicion verdadero (falso)* </decision>
| <asignacion> <operando> etiqueta </operando> <oparit> = </oparit> aritmetica
aritmetica --> operando (oparit operando)* // cero o muchas veces
operando --> <operando>A</operando> | (operando)
A --> etiqueta | constante
oparit --> + | - | * | / | ^ (S)
condicion --> proposicion (oplogico proposicion)*
oplogico --> y | o | no | = | != (S)
proposicion --> operando oprelacional operando
oprelacional --> = | menorque | > | menoroigualq | >= | != (S) // el caracter '<' viola sintaxis XML
Esta gramática genera expresiones como el ejemplo que vimos en clase para asignar día de inscripción a los estudiantes en función de su promedio y sus materias reprobadas. Los equipos del gadget deben tener la interfaz y para el tercer departamental generar el código. Los equipos del traductor deben leer el softbot y yla gramática del lenguaje de programación y generar las instrucciones al menos en javascript. Los equipos de la base de datos deben leer la estructura y generar los querys para guardar los elementos terminales y no terminales en la base de datos. Los mineros y los difusores no tienen que ver con esto.
<softbot nombre="estudiante">
<datos>
<estudiante>
<boleta>numero</boleta>
<promedio>numero</promedio> // los nombres de etiquetas (T) y el tipo de dato (S)
<reprobadas>numero</reprobadas>
<dia>numero</dia>
</estudiante>
</datos>
<metodos>
<metodo>
<decision>
<condicion>
<proposicion>
<operando>reprobadas</operando> (S) //de entre las registradas en <datos>
<oprelacional>=</oprelacional> (S)
<operando>0</operando> (T)
</proposicion>
<oplogico>y</oplogico> (S)
<proposicion>
<operando>promedio</operando> (S) //de entre las registradas en <datos>
<oprelacional> >= </oprelacional> (S)
<operando>8</operando> (T)
</proposicion>
</condicion>
<verdadero>
<metodo>
<asignacion>
<operando>dia</operando> (S) //de entre las registradas en <datos>
<oparit> = </oparit> //la asignación por fuerza lleva el signo =
<operando>1</operando> (T) //... y así sucesivamente.
</asignacion>
</metodo>
</verdadero>
<falso>
<metodo>
<decision>
<condicion>
<proposicion>
<operando>reprobadas</operando>
<oprelacional>=</oprelacional>
<operando>0</operando>
</proposicion>
<oplogico>y</oplogico>
<proposicion>
<operando>promedio</operando>
<oprelacional> < </oprelacional>
<operando>8</operando>
</proposicion>
</condicion>
<verdadero>
<metodo>
<asignacion>
<operando>dia</operando>
<oparit> = </oparit>
<operando>2</operando>
</asignacion>
</metodo>
</verdadero>
<falso>
<decision>
<condicion>
<proposicion>
<operando>reprobadas</operando>
<oprelacional>=</oprelacional>
<operando>1</operando>
</proposicion>
<oplogico>o</oplogico>
<proposicion>
<operando>reprobadas</operando>
<oprelacional> = </oprelacional>
<operando>2</operando>
</proposicion>
</condicion>
<verdadero>
<metodo>
<asignacion>
<operando>dia</operando>
<oparit> = </oparit>
<operando>3</operando>
</asignacion>
</metodo>
</verdadero>
<falso>
<metodo>
<asignacion>
<operando>dia</operando>
<oparit> = </oparit>
<operando>0</operando>
</asignacion>
</metodo>
</falso>
</decision>
</falso>
</decision>
</metodo>
</falso>
</decision>
</metodo>
</metodos>
</softbot>