Funciones para el motor de reglas de caracteres, engine.
Funciones
Set EngSol(Set linSet, Set rulSet, Real maxSta, Text preFil, Real numCol, Real rndCtr)Real EngJavascript(Text dirSol, Text dirSrc)//////////////////////////////////////////////////////////////////////////////
Set EngSol(Set linSet, // Area a resolver
Set rulSet, // Conjunto de reglas
Real maxSta, // Numero maximo de iteraciones (estados)
Text preFil, // Ruta y nombre del fichero sin extension
Real numCol, // Numero de columnas de la tabla de estados
Real rndCtr) // 0, determinista, 1 aleatorio y >0 <1 pseudoaletorio
//////////////////////////////////////////////////////////////////////////////
{
Real AreTrc(linSet, 0, preFil, numCol, 0); // estado 0, abre los ficheros
Set staMem = Copy(linSet); // Memoria de estado
Real staNum = 1; // Numero de estado (el inical es el 0)
Real end = Copy(FALSE);
Real While(Not(end),
{
Set new = AreCic(staMem, RulRnd(rulSet,rndCtr));
If(EQ(Card(new),0), Real(end:=TRUE), // Termino con exito
{
// Se ha alcanzado un nuevo estado
Real AreTrc(new, staNum, preFil, numCol, 1); // Nuevo estado, en ciclo
Set (staMem:=Copy(new)); // Memorizar el nuevo estado
Real(staNum:=staNum+1); // Probar con el siguiente estado
If(GT(staNum,maxSta), Real(end:=TRUE), // Termino sin exito
FALSE) // Cicla
})
});
Real AreTrc(Empty, 0, preFil, numCol, 2); // Cierra, fin del ciclo
staMem
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el resultado de aplicar el conjunto de reglas rulSet al area linSet
hasta que no haya reglas aplicables o se alcance el numero maximo de estados
(ciclos) maxSta.
Cada vez que haya un cambio de estado lo visualiza y los va escribiendo en el
fichero htmFil, la traza se escribe como una tabla html de numCol columnas.",
EngSol);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real EngJavascript(Text dirSol, // Directorio de casos resueltos
Text dirSrc) // Directorio de Javascript
//////////////////////////////////////////////////////////////////////////////
{
Set filSet = DirExtAll(dirSol, "js", FALSE, TRUE); // Todos los ficheros
Text filCod = DirReadFiles(dirSol, "js", "\n"); // Todo los scripts
// Contruir el array de casos, indice
Set arrSet = For(1, Card(filSet), Text(Real filPos) // Para los casos
{
Text arrNam = GetFilePrefix(filSet[filPos]);
Text arrLbl = Replace(arrNam, "_", " ");
Text arrNew = "new Array(" + arrNam + ", '" + arrLbl + "')";
Text arrEnd = If(Card(filSet)==filPos, "", ",\n"); // El ultimo diferente
" "+arrNew+arrEnd
});
Text arrTxt = SetSum(arrSet); // Une todos los textos
Text arrSed = dirSrc+"/simulatorarray.sed"; // Fichero semilla
Text arrPth = Replace(arrSed,".sed",".js"); // Fichero javascript
Text WriteFile(arrPth, Replace(ReadFile(arrSed), "_ARR_", arrTxt));
// Construir el banco de datos de pasos, steps, de los casos
Text sdbSed = dirSrc+"/simulatordb.sed";
Text sdbPth = Replace(sdbSed,".sed",".js");
Text WriteFile(sdbPth, Replace(ReadFile(sdbSed), "_SDB_", filCod));
Card(filSet) // Numero de casos
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Reune todos los casos realizados y los prepara para que su resolucion pueda
ser simulada por un simulador visual Javascript.
Genera 2 ficheros en lenguaje Javascript:
a) un fichero indice con un array en forma de tabña que contiene todos los
casos resueltos, cada fila es (array de pasos, comentario),
el nombre del array de pasos es el nombre del fichero sin extension y
el comentario es igual cambiando el _ por blanco y
b) un fichero mas grande, con tantos arrays como casos resueltos,
cada uno de estos arrays contiene todos los pasos de resolucion del caso.
El nombre de los arrays esta formado por el nombre de los ficheros.
Para la generacion de estos 2 ficheros emplea 2 ficheros semilla que tienen
la cabecera de comentarios de los programas Javascript.
Recibe como parametros:
a) el directorio de casos resueltos de entrada y
b) el directorio de salida donde se escribira el codigo Javascript,
asume que los ficheros semilla Javascript estan en este mismo directorio y
los nombres de los ficheros para el array indice y
el banco de datos son fijos.
Retorna el numero de casos resueltos.",
EngJavascript);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// FILE : eng.tol
// AUTHOR : http://www.asolver.com
// PURPOSE : Funciones para el motor de reglas de caracteres, engine.
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// FUNCTIONS
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set EngSol(Set linSet, // Area a resolver
Set rulSet, // Conjunto de reglas
Real maxSta, // Numero maximo de iteraciones (estados)
Text preFil, // Ruta y nombre del fichero sin extension
Real numCol, // Numero de columnas de la tabla de estados
Real rndCtr) // 0, determinista, 1 aleatorio y >0 <1 pseudoaletorio
//////////////////////////////////////////////////////////////////////////////
{
Real AreTrc(linSet, 0, preFil, numCol, 0); // estado 0, abre los ficheros
Set staMem = Copy(linSet); // Memoria de estado
Real staNum = 1; // Numero de estado (el inical es el 0)
Real end = Copy(FALSE);
Real While(Not(end),
{
Set new = AreCic(staMem, RulRnd(rulSet,rndCtr));
If(EQ(Card(new),0), Real(end:=TRUE), // Termino con exito
{
// Se ha alcanzado un nuevo estado
Real AreTrc(new, staNum, preFil, numCol, 1); // Nuevo estado, en ciclo
Set (staMem:=Copy(new)); // Memorizar el nuevo estado
Real(staNum:=staNum+1); // Probar con el siguiente estado
If(GT(staNum,maxSta), Real(end:=TRUE), // Termino sin exito
FALSE) // Cicla
})
});
Real AreTrc(Empty, 0, preFil, numCol, 2); // Cierra, fin del ciclo
staMem
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el resultado de aplicar el conjunto de reglas rulSet al area linSet
hasta que no haya reglas aplicables o se alcance el numero maximo de estados
(ciclos) maxSta.
Cada vez que haya un cambio de estado lo visualiza y los va escribiendo en el
fichero htmFil, la traza se escribe como una tabla html de numCol columnas.",
EngSol);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real EngJavascript(Text dirSol, // Directorio de casos resueltos
Text dirSrc) // Directorio de Javascript
//////////////////////////////////////////////////////////////////////////////
{
Set filSet = DirExtAll(dirSol, "js", FALSE, TRUE); // Todos los ficheros
Text filCod = DirReadFiles(dirSol, "js", "\n"); // Todo los scripts
// Contruir el array de casos, indice
Set arrSet = For(1, Card(filSet), Text(Real filPos) // Para los casos
{
Text arrNam = GetFilePrefix(filSet[filPos]);
Text arrLbl = Replace(arrNam, "_", " ");
Text arrNew = "new Array(" + arrNam + ", '" + arrLbl + "')";
Text arrEnd = If(Card(filSet)==filPos, "", ",\n"); // El ultimo diferente
" "+arrNew+arrEnd
});
Text arrTxt = SetSum(arrSet); // Une todos los textos
Text arrSed = dirSrc+"/simulatorarray.sed"; // Fichero semilla
Text arrPth = Replace(arrSed,".sed",".js"); // Fichero javascript
Text WriteFile(arrPth, Replace(ReadFile(arrSed), "_ARR_", arrTxt));
// Construir el banco de datos de pasos, steps, de los casos
Text sdbSed = dirSrc+"/simulatordb.sed";
Text sdbPth = Replace(sdbSed,".sed",".js");
Text WriteFile(sdbPth, Replace(ReadFile(sdbSed), "_SDB_", filCod));
Card(filSet) // Numero de casos
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Reune todos los casos realizados y los prepara para que su resolucion pueda
ser simulada por un simulador visual Javascript.
Genera 2 ficheros en lenguaje Javascript:
a) un fichero indice con un array en forma de tabña que contiene todos los
casos resueltos, cada fila es (array de pasos, comentario),
el nombre del array de pasos es el nombre del fichero sin extension y
el comentario es igual cambiando el _ por blanco y
b) un fichero mas grande, con tantos arrays como casos resueltos,
cada uno de estos arrays contiene todos los pasos de resolucion del caso.
El nombre de los arrays esta formado por el nombre de los ficheros.
Para la generacion de estos 2 ficheros emplea 2 ficheros semilla que tienen
la cabecera de comentarios de los programas Javascript.
Recibe como parametros:
a) el directorio de casos resueltos de entrada y
b) el directorio de salida donde se escribira el codigo Javascript,
asume que los ficheros semilla Javascript estan en este mismo directorio y
los nombres de los ficheros para el array indice y
el banco de datos son fijos.
Retorna el numero de casos resueltos.",
EngJavascript);
//////////////////////////////////////////////////////////////////////////////
ChRules.Iterative programa de aplicacion iterativa de reglas de areas de caracteres
2015 asolver.com | Aviso legal | XHTML | Δ Θ Ξ | Creative Commons | Mapa y funciones del sitio