lp_parser_rs/lib.rs
1#![allow(clippy::multiple_crate_versions)]
2
3//! LP Parser - A Linear Programming File Parser
4//!
5//! This crate provides robust parsing capabilities for Linear Programming (LP)
6//! files using LALRPOP parser generator. It supports multiple industry-standard
7//! LP file formats and offers comprehensive features for optimisation problems.
8//!
9//! # Features
10//!
11//! - Zero-copy parsing with lifetime management
12//! - Support for multiple LP file format specifications
13//! - Comprehensive parsing of all standard LP file components
14//! - Optional serialisation and diff tracking
15//!
16//! # Quick Start
17//!
18//! ```rust
19//! use std::path::Path;
20//!
21//! use lp_parser::{parser::parse_file, LpProblem};
22//!
23//!
24//! fn main() -> Result<(), Box<dyn std::error::Error>> {
25//! let content = parse_file(Path::new("problem.lp"))?;
26//! let problem = LpProblem::parse(&content)?;
27//! println!("Problem name: {:?}", problem.name());
28//! Ok(())
29//! }
30//! ```
31
32pub mod analysis;
33pub mod builder;
34pub mod compat;
35#[cfg(feature = "csv")]
36pub mod csv;
37pub mod error;
38pub mod interner;
39pub mod lexer;
40pub mod model;
41pub mod parser;
42pub mod problem;
43pub mod writer;
44
45// LALRPOP generated grammar module
46use lalrpop_util::lalrpop_mod;
47
48#[allow(
49 clippy::cast_sign_loss,
50 clippy::cloned_instead_of_copied,
51 clippy::cognitive_complexity,
52 clippy::elidable_lifetime_names,
53 clippy::match_same_arms,
54 clippy::missing_const_for_fn,
55 clippy::missing_errors_doc,
56 clippy::must_use_candidate,
57 clippy::no_effect_underscore_binding,
58 clippy::option_if_let_else,
59 clippy::redundant_field_names,
60 clippy::redundant_pub_crate,
61 clippy::too_many_lines,
62 clippy::trivially_copy_pass_by_ref,
63 clippy::type_complexity,
64 clippy::unnecessary_wraps,
65 clippy::use_self
66)]
67mod lp_grammar {
68 use super::lalrpop_mod;
69 lalrpop_mod!(pub lp);
70}
71pub use lp_grammar::lp;
72
73/// Tolerance for floating-point comparisons in coefficient handling.
74/// Used for checking if values are effectively zero or one.
75pub(crate) const NUMERIC_EPSILON: f64 = 1e-10;