feat(charka): STRING y UNSTRING — manejo de cadenas
Dos verbos comunes de COBOL para construir y partir cadenas.
- IR: Stmt::StringConcat { sources, into } y
Stmt::Unstring { source, delimiter, into }.
- Parser: STRING a b DELIMITED BY SIZE INTO t END-STRING y
UNSTRING s DELIMITED BY d INTO a b c END-UNSTRING.
- Codegen: STRING -> format! concatenado; UNSTRING -> un bloque que
parte con str::split y reparte los trozos a los destinos.
- Shadow: el intérprete concatena / parte el texto y lo reparte.
- Corpus: programa nuevo 12-cadenas. Verificado: el intérprete sombra
y el crate compilado por scaffold dan la misma salida.
Alcance v1: STRING con DELIMITED BY SIZE (otros delimitadores se
ignoran); sin WITH POINTER ni ON OVERFLOW.
Tests: charka-ir 25, charka-codegen 19, charka-shadow 17. fmt +
clippy limpios.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
* corpus charka — nivel 6: STRING y UNSTRING
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. CADENAS.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-NOMBRE PIC X(3) VALUE 'ANA'.
|
||||
01 WS-APELLIDO PIC X(5) VALUE 'PEREZ'.
|
||||
01 WS-COMPLETO PIC X(20).
|
||||
01 WS-CSV PIC X(15) VALUE 'ROJO,VERDE,AZUL'.
|
||||
01 WS-C1 PIC X(8).
|
||||
01 WS-C2 PIC X(8).
|
||||
01 WS-C3 PIC X(8).
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
STRING WS-NOMBRE DELIMITED BY SIZE
|
||||
WS-APELLIDO DELIMITED BY SIZE
|
||||
INTO WS-COMPLETO
|
||||
END-STRING.
|
||||
DISPLAY 'COMPLETO=' WS-COMPLETO.
|
||||
UNSTRING WS-CSV DELIMITED BY ',' INTO WS-C1 WS-C2 WS-C3
|
||||
END-UNSTRING.
|
||||
DISPLAY 'C1=' WS-C1.
|
||||
DISPLAY 'C2=' WS-C2.
|
||||
DISPLAY 'C3=' WS-C3.
|
||||
STOP RUN.
|
||||
@@ -0,0 +1,4 @@
|
||||
COMPLETO=ANAPEREZ
|
||||
C1=ROJO
|
||||
C2=VERDE
|
||||
C3=AZUL
|
||||
@@ -20,6 +20,7 @@ salida correcta, una línea por `DISPLAY`.
|
||||
| `09-evaluar` | 5 | `EVALUATE` — el `case` de COBOL, `WHEN` / `OTHER` |
|
||||
| `10-condicion` | 5 | nombres de condición (nivel 88) en `IF` |
|
||||
| `11-tabla` | 6 | tablas (`OCCURS`) y referencias con subíndice |
|
||||
| `12-cadenas` | 6 | `STRING` (concatenar) y `UNSTRING` (partir) |
|
||||
|
||||
## Formato
|
||||
|
||||
|
||||
Reference in New Issue
Block a user