# chem **Repository Path**: meth-nylon/chem ## Basic Information - **Project Name**: chem - **Description**: 直接基于化学式文法构建的cpp分子量计算器 - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-13 - **Last Updated**: 2025-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # chem 直接通过文法分析和词法分析, 利用递归下降法和LL(1)文法解析分子式的分子量, 相较前作dalton更高效且泛用性提高. ## 化学式文法 ```BNF T -> P // Total -> PrefixGroup | PrefixGroup ' ' T T -> P T P -> G // PrefixGroup -> Group | prefix Group P -> pG G -> A // Group -> Atom | Atom suffix | Atom Group | Atom suffix | Atom suffix Group G -> As G -> AG G -> AsG A -> e // Atom -> element | '(' Total ')' | '(' Total ')' suffix A -> (T) A -> (T)s p -> n s -> n e -> [A-Z][a-z]* n -> ([0-9][0-9]*)|([0-9][0-9]*.[0-9]*)|(.[0-9][0-9]*) ``` 总体而言将化学式分成以下组成部分: - 总式 Total - 前缀和原子团 PrefixGroup - 原子团 Group - 原子 Atom - 前缀 prefix - 后缀 suffix - 元素 element ## 使用方法 输入化学式, 通过括号和空格划分单元, 输出分子量, 通过exit, exit(), quit, quit(), bye, bye()退出 ``` Input formula: > CuSO4 5H2O 249.685 Input formula: > (NH4)6Mo7O24 4H2O 1235.86 Input formula: > 0.35FeO 1.22Na2O 2.0Al2O3 23.2SiO2 1698.64 Input formula: > KFC VW50 9313.06 Input formula: > exit ```