7 个版本

0.9.6 2024年8月6日
0.9.5 2024年8月6日
0.9.3 2024年7月12日

#93 in 科学

Download history 216/week @ 2024-07-08 8/week @ 2024-07-15 27/week @ 2024-07-29 322/week @ 2024-08-05

每月376次下载

MIT/Apache

52KB
1.5K SLoC

chemp 是一个解析化学公式的工具。

接受物质的分子式。对于给定的正确公式,它提取有关化合物的信息

  • 化学组成
  • 摩尔质量
  • 组成中每个元素的百分比质量
用法
use chemp;

let compound = chemp::parse("MgSO4*7H2O").unwrap();

// getters for each component of compound
compound.components().values().for_each(|component| {
    // get mass of all atoms of element in compound
    component.mass();

    // get percent of component mass to compound mass
    component.mass_percent();

    // get atoms count of element in compound
    component.atoms_count();

    // get chemical element symbol
    component.chemical_element().symbol();

    // get chemical element atomic weight
    component.chemical_element().atomic_weight();
});

// list of elements in order they parsed
// nested groups are flattened
compound.composition().iter().for_each(|element| {
    // get subscript of element
    element.subscript();

    // get chemical element symbol
    element.chemical_element().symbol();

    // get chemical element atomic weight
    element.chemical_element().atomic_weight();     
});

// get molar mass of compound
compound.molar_mass();

println!("compound: {:#?}", compound);

// compound: Compound {
//     composition: [
//         Element {
//             chemical_element: Magnesium,
//             subscript: 1,
//         },
//         Element {
//             chemical_element: Sulfur,
//             subscript: 1,
//         },
//         Element {
//             chemical_element: Oxygen,
//             subscript: 4,
//         },
//         Element {
//             chemical_element: Hydrogen,
//             subscript: 14,
//         },
//         Element {
//             chemical_element: Oxygen,
//             subscript: 7,
//         },
//     ],
//     components: {
//         "O": Component {
//             chemical_element: Oxygen,
//             atoms_count: 11,
//             mass_percent: 71.40498,
//         },
//         "S": Component {
//             chemical_element: Sulfur,
//             atoms_count: 1,
//             mass_percent: 13.007879,
//         },
//         "Mg": Component {
//             chemical_element: Magnesium,
//             atoms_count: 1,
//             mass_percent: 9.861401,
//         },
//         "H": Component {
//             chemical_element: Hydrogen,
//             atoms_count: 14,
//             mass_percent: 5.725739,
//         },
//     },
//     molar_mass: 246.466,
// }
解析器语法
substance = coefficient? component+ hydrate?
component = element | group
group = '(' component+ ')' subscript?
element = symbol subscript?
hydrate = '*' coefficient? water
symbol = uppercased | uppercased lowercased
subscript = digit+
coefficient = digit+
water = 'H2O'
uppercased = {'A'..'Z'}
lowercased = {'a'..'z'}
digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

依赖项

~47KB