Ver Mensaje Individual
  #8
Antiguo 28 de agosto de 2026, 00:43
Eslopes
Creador de
PowerRustCOBOL
Guru de los Gurus: Por solidos y amplios conocimientos - Issue reason: Por ámplios conocimientos en la materia Concurso: Tercer puesto: Ganador/a del Tercer puesto en un concurso - Issue reason: Juego  Innovación: Por aportar innovaciones - Issue reason: Por aportar soluciones innovadoras 
Última Actividad 27.10.2026 07:38
Posts Posts: 396
Likes enviados Enviados: 31
Likes recibidos Recibidos: 172

Seu código está correto e o REWRITE está implementado e funciona corretamente. O erro foi causado pelo Lexer do RustCOBOL (um problema que está sendo resolvido neste momento). O nome da chave do arquivo é RECORD-KEY e o lexer atualmente confunde-se e trata RECORD-KEY como uma palavra reservada ("RECORD-KEY" => Token::RecordKey,). O mesmo ocorre com outras palavras (ex: ALTERNATE-RECORD-KEY)

Renomeie a chave para um nome tipo RECKEY ou CUST-KEY ou outro nome que não faça o lexer confundir com uma palavra reservada.

Atualmente o agente está corrigindo o lexer e o compilador para que este tipo de erro não ocorra (o RC4 vai inclusive trazer 100% de aderência ao NIST).

Att. Emerson

PS: Para verificar outras possíveis colisões veja o arquivo ~/PowerRustCOBOL/crates/cobolt-lexer/src/keywords.rs
PS2: COBOL não facilita a vida de ninguém usando hifén como separador de palavras (END-DISPLAY, DATE-WRITTEN, PROGRAM-ID etc). Qualquer outra linguagem de programação entende que "-" é o sinal de menos, só COBOL faz esta confusão.



Post añadido a las 18:43. Post anterior a las 18:37


Mais alguns detalhes apontados pelo agente:

ACCESS MODE IS INDEXED — erro do utilizador e bug nosso

ACCESS MODE só aceita SEQUENTIAL | RANDOM | DYNAMIC. INDEXED é uma ORGANIZATION, não um access mode — é erro dele.

Mas nós engolimos o valor inválido sem um único diagnóstico (parser.rs:1097: nenhum dos três eat bate, o token cai no _ => p.advance()), e o acesso fica no default SEQUENTIAL. O resultado é pior do que um erro de compilação — falha silenciosa em runtime. O mesmo programa, só com INDEXED em vez de DYNAMIC no ACCESS MODE:

WRITE dup ST=22
REWRITE ST=46 ← e o registo NÃO foi atualizado (READ devolve "ANA")

Porque interpreter.rs:5750 decide random = spec.access != Sequential; em SEQUENTIAL o REWRITE endereça o registo corrente, que sem um READ prévio não existe → 46. Ou seja: mesmo depois de corrigir o nome do campo, o padrão dele continuaria a não funcionar, e sem dizer porquê.

Detalhe menor

STATUS WSTATUS — aceitamos, mas a grafia standard é FILE STATUS IS WSTATUS. Não é a causa do erro; só portabilidade.
Eslopes is offline   Responder Con Cita