|
Creador de
PowerRustCOBOL ![]()
|
Conformidad NIST COBOL-85: de 242 a 332 de 434 programas
Esta entrega corrige una serie de construcciones del estandar COBOL-85 que PowerRustCOBOL rechazaba o interpretaba mal. Todas son deuda tecnica: cosas que ya deberian haber funcionado. La medida es el conjunto oficial de validacion NIST CCVS85 (459 programas). Cada cambio se midio por separado, uno a uno. 1. La coma y el punto y coma son puntuacion, no un error COBOL-85 define la coma y el punto y coma seguidos de un espacio como separadores: pueden aparecer donde quepa un espacio y significan exactamente lo mismo que un espacio. Ninguno de estos ejemplos se aceptaba: Código:
MOVE ZERO TO DN3, DN4.
CALL "SUB" USING TABLE-01, TABLE-02, DN3.
PROCEDURE DIVISION USING TABLE-1, TABLE-2, DN1.
READ SQ-FS1 ; AT END GO TO READ-EOF.
01 WRK-AN-X-18-1, REDEFINES WRK-XN-18-1 PIC A(18).
un separador: la coma decimal (1,5 con DECIMAL-POINT IS COMMA) y la coma de edicion de una PICTURE (PIC ZZ,ZZ9.99). 2. Subindices separados por espacios El unico separador que COBOL-85 exige entre subindices es el espacio. Estas dos lineas son la misma referencia y solo se aceptaba la segunda: Código:
MOVE 1 TO CELL (1 2).
MOVE 1 TO CELL (1, 2).
que es el orden que especifica el estandar. Esto no se aceptaba de ninguna de las dos formas: Código:
MOVE W-3 TO CELL OF COLS OF ROWS (IDX-A IDX-B). COBOL-85 no tiene barra invertida: el delimitador de un literal se escapa escribiendolo dos veces. El analizador lexico no lo decodificaba, asi que 'IT''S' se convertia en dos literales distintos, en silencio. Código:
DISPLAY 'IT''S WORKING'. COBOL-85 permite pasar una tabla completa a las funciones estadisticas subindicandola con la palabra reservada ALL: Código:
01 READINGS.
05 SAMPLE PIC 9(4) OCCURS 5 TIMES.
COMPUTE WS-PEAK = FUNCTION MAX(SAMPLE(ALL)).
COMPUTE WS-AVG = FUNCTION MEAN(SAMPLE(ALL)).
STANDARD-DEVIATION, ORD-MAX y ORD-MIN. ALL puede ocupar una dimension de una tabla multidimensional con subindices normales en las demas. 5. MOVE ALL "X" no llenaba el campo ALL es la unica constante figurativa cuyo caracter de relleno tiene mas de un byte, por eso SPACES y ZEROS nunca mostraron el fallo. El literal se escribia una sola vez y el resto del campo quedaba en blanco. Código:
01 WS-BAR PIC X(10).
MOVE ALL "-" TO WS-BAR. *> antes: "- "
*> ahora: "----------"
redundante delante de otra constante figurativa). 6. CLOSE ... WITH LOCK y las clausulas de cinta Código:
CLOSE IX-FD2 WITH LOCK.
CLOSE SQ-FS1 WITH NO REWIND.
CLOSE TAPE-FILE REEL FOR REMOVAL.
cerrar. WITH LOCK ademas se cumple: reabrir ese fichero en la misma ejecucion devuelve ahora el file status 38, en vez de abrirse como si nada. 7. Un literal con signo como objeto de WHEN Código:
WHEN -0.000020 THRU 0.000020 una condicion. 8. PERFORM ... TIMES con un dato como contador COBOL-85 admite un identificador como numero de repeticiones, no solo un literal: Código:
77 THREE PIC 9 VALUE 3.
PERFORM PFM-C THREE TIMES.
Código:
10 STUFF-1 OCCURS
31 TIMES.
es - asi que el 31 llegaba como nivel y OCCURS daba error. 10. Un nombre puede empezar por un digito Una palabra definida por el usuario se forma con A-Z, 0-9 y el guion; solo un nombre de dato debe llevar al menos una letra, y un nombre de parrafo o de seccion ni siquiera eso: Código:
01 25COUNT PICTURE 99.
01 3-DEM-TBL REDEFINES 3-DIMENSION-TBL.
0 SECTION.
el estandar lo resuelve a favor del nombre porque un operador aritmetico exige espacios alrededor. Es la misma regla que hace que B-C sea un nombre y B - C una resta. 11. Una funcion desconocida ya no devuelve 0 en silencio Una funcion intrinseca no implementada escribia un aviso y devolvia 0, de modo que una errata producia un resultado erroneo que nadie reportaba. Ahora es un error de compilacion y sugiere el nombre correcto: Código:
COMPUTE WS-X = FUNCTION SQRTT(4). - did you mean FUNCTION SQRT? 12. Las lineas de depuracion Una D en la columna 7 marca una linea de depuracion, y el estandar dice que es un comentario salvo que el programa lo pida: Código:
SOURCE-COMPUTER. XYZ WITH DEBUGGING MODE. como comentario y el otro la compilaba siempre. Solo aplica en formato fijo: el formato libre no tiene zona de indicador. 13. Una etiqueta con apostrofo o salto de linea rompia la compilacion Al generar el codigo de un formulario, el texto de una propiedad se escribia tal cual entre dos apostrofos. Un Caption como "Don't Save" cerraba el literal antes de tiempo, y un salto de linea producia un literal partido en dos lineas sin continuacion. El sintoma era un error que no tenia nada que ver: Build blocked - expected PROCEDURE DIVISION (line 367) Ahora el delimitador se duplica (el escape del estandar) y los caracteres de control se pliegan a un espacio. La PICTURE ademas se dimensiona segun el valor, asi que una etiqueta de mas de 256 caracteres ya no se trunca. 14. Una aplicacion compilada no podia leer su propio programa deserialize embedded AST: invalid value: integer 10, expected variant index 0 <= i < 10 Una aplicacion compilada lleva su programa serializado dentro del binario, y el formato identifica cada variante por su posicion. Anadir una variante en mitad de la lista renumeraba todas las siguientes. El fallo aparecia al arrancar la aplicacion, mucho despues de la compilacion que lo causaba. Ahora, si vuelve a ocurrir, el mensaje dice la causa y la solucion: recompilar. Medida Código:
1.62.12 242 / 434 1.62.13 292 / 434 1.62.14 317 / 434 1.62.15 332 / 434 Un aviso importante, y honesto Todas esas cifras miden la compilacion: si el analizador acepta el programa. Esta entrega anade ademas una medida de ejecucion, que corre cada programa y lee el informe PASS/FAIL que el propio programa imprime. De los 434 programas dentro de alcance, 0 llegan al final. 332 compilan; de esos, 170 entran en un bucle, 76 agotan el tiempo, 66 no imprimen informe y 21 los rechaza el motor de ejecucion. Es decir: 332 compilan y ninguno funciona todavia. Preferimos publicar ese numero a dejar que la cifra de compilacion se lea como si fuera conformidad. Ese es el trabajo que viene ahora. Documentacion: PowerRustCOBOL/docs/developers-guide-en.md at main · CloudLandBeta/PowerRustCOBOL · GitHub Anthropic Claude Codex Agent |
||||||||
|
|
|
![]() |
| Herramientas | |
|
|
| Archivo - Cobol Foro | Contactar con Nosotros - Cobol Foro | |||||||