Opened 14 years ago
Closed 14 years ago
#1237 closed defect (fixed)
BysMcmc: Error parsing joint.bsr
Reported by: | Pedro Gea | Owned by: | Víctor de Buen Remiro |
---|---|---|---|
Priority: | highest | Milestone: | Mantainance |
Component: | BysMCMC | Version: | head |
Severity: | blocker | Keywords: | |
Cc: |
Description
Se ha encontrado un error estraño al crear restricciones para una combinación de parámetros.
El error encontrado dice:
ERROR: [101] [BSR.Parse] Expected symbol ';' File:'joint.bsr' Line:44 Col:1127 El diseño del parser modular de BSR puede verse en https://www.tol-project.org/ticket/745 Puede ver un ejemplos de la sintaxis de BSR en http://cvs.tol-project.org/viewcvs.cgi/*checkout*/tol/stdlib/math/stat/models/bayesian/bysMcmc/test_01/parse.bsr ...
pero allí no parece que haya nada raro (más allá de la longitud de la línea).
Adjunto archivos ascii para reproducirlo.
Attachments (1)
Change History (11)
Changed 14 years ago by
Attachment: | MMS.T661.zip added |
---|
comment:1 Changed 14 years ago by
comment:2 Changed 14 years ago by
Status: | new → accepted |
---|
El problema está precisamente en la longitud de la línea.
Si la recorto a menos de 1024 caracteres funciona.
No tengo la menor idea de por dónde aparece esa restricción ni si se puede evitar fácilmente.
Desde luego en mi código no hago nada adrede en ese sentido.
Tendré que revisar la documentación de boot::spirit y si no encuentro nada cambiar el parser para que admita saltos de línea dentro de las inequaciones y ecuaciones, y el Import para que meta saltos cada 1024 caracteres.
comment:3 Changed 14 years ago by
No estoy convencido que sea la longitud, pues he reproducido el error con restricciones más cortas, por ejemplo con:
+0<=+1*TPr_MetSer.Min.Uni_GeoUFe.XX_GOpXX_GGeB.VC1OffNetFixo_GCoXX_TSaA1.PrCo_FreDia__RecargaTot__Linear.1+1*TPr_MetSer.Min.Uni_GeoUFe.XX_GOpXX_GGeB.VC1OffNetFixo_GCoXX_TSaA1.PrCo_FreDia__RecargaTot__Linear.10;
No sé si puede ser algo relativo a que el nombre de un parámetro está contenido en el otro o algo así.
comment:4 Changed 14 years ago by
Pues no es eso, no.
De hecho he reemplazado en los .bsr el prefijo común TPr_MetSer.Min.Uni_GeoUFe.XX_GOpXX_GGeB.VC1OffNetFixo_GCoXX_TSaA1.PrCo_FreDia
por Tpr
y pasa igual: falla, o mejor dicho, dice que falla, en la aparentemente inocente línea
+0<=+1*Tpr__RecargaTot__Linear.1+1*Tpr__RecargaTot__Linear.10;
comment:5 Changed 14 years ago by
Aún no sé si tendrá que ver con esto o no pero hay algo extraño en la línea 15 del master.bsr
Include primary module "./Submodels/TPr_MetSer.Min.Uni_GeoUFe.XX_GOpXX_GGeB.VC1OffNetFixo_GCoXX_TSaA1.PrCo_Fr~1/primary.bsr";
Parece ser que al windows de la máquina que sea le ha parecido largo el nombre de directorio
TPr_MetSer.Min.Uni_GeoUFe.XX_GOpXX_GGeB.VC1OffNetFixo_GCoXX_TSaA1.PrCo_FreDia
y lo ha recortado a
TPr_MetSer.Min.Uni_GeoUFe.XX_GOpXX_GGeB.VC1OffNetFixo_GCoXX_TSaA1.PrCo_Fr~1
Algo hay que hacer con el tema de la nomenclatura porque esos nombres acaban siendo inmanejables por uno u otro motivo.
comment:6 Changed 14 years ago by
No tengo la menor idea de porqué pero está fallando el boost::spirit y como es una versión vieja no encuentro documentación ni foros ni nada.
Probando a dar palos de ciego he encontrado una forma de evitar el error, que no de arreglarlo: basta cambiar los sufijos de la forma ".xx" ó "_xx" donde x es una cifra por letras. Parece que por algún motivo que se me escapa no admite 2 ó mas cifras después del último punto ó '_', pero sólo cuando está leyendo una ecuación o inecuación y aparece una variable externa, es decir, que no aparece en la cabecera de declaraciones. En cambio sí te deja declarar variables con ese formato, y el caso es que la definición del parser es muy modular y esa parte está reutilizada al 100%, así que debería hacer lo mismo pero misteriosamente no es así. Se trata de código ajeno muy complicado de depurar por lo que me temo que tampoco puedo ir más allá.
En este caso concreto, por ejemplo, en vez de "...RecargaTotLinear.10" se pone "...RecargaTotLinear.A" ó "RecargaTotLinear.AB" y ya no falla. Propongo que en vez de usar los sufijos ".1", ".2" etc. lo hagáis de momento con ".a", ".b", etc.
Esto es un parche para que podáis continuar por ahora, mientras veo porqué puede pasar algo tan absurdo. Si no lo encuentro, que creo que difícilmente lo voy a encontrar, ya he visto otra forma de evitarlo bastante elegantemente: permitir la declaración de variables externas poniendo "nombre_variable <- EXTERN" para que no dé duplicados. Lo malo es que esto requiere tocar el Import y el código de BSR así que llevará un poquillo más de trabajo, pero creo que no habrá más remedio. Esta forma ya me gusta bastante más pues de hecho tiene todo el sentido del mundo que haya que declarar las variabes antes de usarlas, así que no sería un parche sino una mejora.
comment:10 Changed 14 years ago by
Resolution: | → fixed |
---|---|
Status: | accepted → closed |
Otros detalles en: MMS#661.