7 个版本
0.9.6 | 2024年8月6日 |
---|---|
0.9.5 | 2024年8月6日 |
0.9.3 | 2024年7月12日 |
#93 in 科学
每月376次下载
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