feat(charka): INSPECT — contar y reemplazar caracteres
El verbo de COBOL para analizar y limpiar campos de texto.
- IR: Stmt::Inspect { target, op } con InspectOp::TallyingForAll
(cuenta apariciones y las suma a un contador) y
InspectOp::ReplacingAll (reemplaza apariciones).
- Parser: INSPECT t TALLYING n FOR ALL lit y
INSPECT t REPLACING ALL a BY b. Una forma no soportada cae a
Stmt::Unknown.
- Codegen: TALLYING -> str::matches(..).count(); REPLACING ->
str::replace.
- Shadow: el intérprete cuenta / reemplaza el texto.
- Corpus: programa nuevo 13-inspeccion. Verificado: el intérprete
sombra y el crate compilado por scaffold dan la misma salida.
Alcance v1: TALLYING FOR ALL y REPLACING ALL; sin LEADING, FIRST,
CHARACTERS, BEFORE/AFTER.
Tests: charka-ir 26, charka-codegen 20, charka-shadow 18. fmt +
clippy limpios.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
* corpus charka — nivel 6: INSPECT (contar y reemplazar)
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. INSPECCION.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-TEXTO PIC X(15) VALUE 'BANANA-MANZANA'.
|
||||
01 WS-CUENTA PIC 9(3) VALUE 0.
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
INSPECT WS-TEXTO TALLYING WS-CUENTA FOR ALL 'A'.
|
||||
DISPLAY 'LETRAS A = ' WS-CUENTA.
|
||||
INSPECT WS-TEXTO REPLACING ALL 'A' BY 'O'.
|
||||
DISPLAY 'TEXTO = ' WS-TEXTO.
|
||||
STOP RUN.
|
||||
@@ -0,0 +1,2 @@
|
||||
LETRAS A = 006
|
||||
TEXTO = BONONO-MONZONO
|
||||
@@ -21,6 +21,7 @@ salida correcta, una línea por `DISPLAY`.
|
||||
| `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) |
|
||||
| `13-inspeccion` | 6 | `INSPECT` — contar (`TALLYING`) y reemplazar |
|
||||
|
||||
## Formato
|
||||
|
||||
|
||||
Reference in New Issue
Block a user