737ae5a696
Cimiento numérico del transpilador. Picture parsea la cláusula PICTURE (9, V, S, 9(n)); Decimal es punto fijo exacto (mantissa i128 + scale) con suma/resta/producto exactos, división con escala de resultado fija, redondeo Truncate/HalfUp y coerce a un Picture con detección de desbordamiento (ON SIZE ERROR). 22 tests. Determinista, sin deps de plataforma — base de Fase D. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
37 lines
1.3 KiB
Rust
37 lines
1.3 KiB
Rust
//! `charka-bcd` — aritmética decimal con semántica COBOL.
|
|
//!
|
|
//! El corazón numérico del transpilador charka. COBOL no calcula en
|
|
//! binario flotante: opera sobre campos decimales de precisión fija
|
|
//! declarados con una cláusula `PICTURE`. Reproducir un programa COBOL
|
|
//! fielmente exige reproducir esa aritmética dígito a dígito — eso es lo
|
|
//! que da este crate.
|
|
//!
|
|
//! - [`picture`] — la [`Picture`], forma declarada de un campo numérico.
|
|
//! - [`decimal`] — el [`Decimal`] de punto fijo exacto + redondeo +
|
|
//! detección de desbordamiento (`ON SIZE ERROR`).
|
|
//!
|
|
//! Determinista y sin dependencias de plataforma: mismo programa, mismos
|
|
//! dígitos, en cualquier máquina. El lexer, el parser, el IR y el codegen
|
|
//! de charka se construyen sobre este cimiento.
|
|
|
|
#![forbid(unsafe_code)]
|
|
|
|
pub mod decimal;
|
|
pub mod picture;
|
|
|
|
pub use decimal::{Decimal, Rounding};
|
|
pub use picture::Picture;
|
|
|
|
/// Falla de una operación decimal o de una cláusula PICTURE.
|
|
#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
|
|
pub enum BcdError {
|
|
#[error("cláusula PICTURE inválida: {0}")]
|
|
BadPicture(String),
|
|
#[error("literal numérico inválido: {0}")]
|
|
BadNumber(String),
|
|
#[error("división por cero")]
|
|
DivByZero,
|
|
#[error("desbordamiento de campo (ON SIZE ERROR)")]
|
|
Overflow,
|
|
}
|